微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机系统应用

51单片机系统应用

时间:11-26 来源:互联网 点击:
应用1:设有51应用系统连接如附图。试说明该系统分别执行如下程序段A和程序段B时,与P1.0端口连接的LED如何显示变化?对应程序段A和程序段B的显示变化有何区别?

程序段A:

LP: CPL P1.0

MOV R0,#0

DJNZ R0,$

JMP LP

程序段B:

LP: SETB P1.0

DJNZ R0,$

CLR P1.0

DJNZ R0,$

DJNZ R0,$

JMP LP

答:对应程序段A和程序段B,LED都将周期性变换亮灭状态。每个亮灭变换周期内,对程序段A,LED持续亮的时间与持续灭的时间长度相同;对程序段B,LED持续亮的时间是持续灭的时间长度的2倍。程序段B时的LED亮灭周期约为程序段A时的LED亮灭周期的1.5倍。

应用2:设有51应用系统连接如应用1附图,且系统所用晶振频率为12MHz。试编写程序段应用51单片机的定时/计数器1实现连接在P1.0上的LED的显示状态每隔10秒钟翻转一次。

答:

MOV TMOD,#20H;T1定时方式2:8位自动重装入

MOV TH1,#(256-250) ;定时周期250us(对应12MHz晶振,每个机器周期=1us)

MOV TL1,TH1

CLR TF1;清T1溢出标志

SETB TR1;启动T1计时

MOV R0,#0;R0用于累计T1溢出的次数

MOV R1,#0;R1用于累计R0达到200的次数

LP:JBC TF1,L1;如果TF1为1则清零TF1并转去进行溢出次数累计

JMP LP;循环等待T1溢出

L1:INC R0;累计T1溢出次数

CJNE R0,#200,LP;未达到200次则转去等待下一次溢出

MOV R0,#0;确保R0的值在0~199之间

INC R1;累计时间达到50ms的次数(250us*200=50ms)

CJNE R1,#200,LP;累计时间未达到10s则转去等待下一次溢出

MOV R1,#0;确保R1的值在0~199之间

CPL P1.0;累计时间已达到10s,则翻转P1.0状态1次(50ms*200=10s)

JMP LP;继续循环累计时间

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top