1. 闪烁灯程序
MOV R6,#20 2 个机器周期 2
D1: MOV R7,#248 2个机器周期 2 2+2×248=498 20×
DJNZ R7,$ 2 个机器周期 2×248 498
DJNZ R6,D1 2 个机器周期 2×20=40
10002
因此,上面的延时程序时间为 10.002ms。
由以上可知,当 R6=10、R7=248 时,延时 5ms,R6=20、R7=248 时 延时 10ms,以此为基本的计时单位。如本实验要求 0.2 秒=200ms,
10ms×R5=200ms,则 R5=20,延时子程序如下:
DELAY: MOV R5,#20
D1: MOV R6,#20
D2: MOV R7,#248
,
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
(2). 输出控制
如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管
的单向导电性可知,这时发光二极管 L1 熄灭;当P1.0 端口输出低电平 ,
即 P1.0=0时, 发光二极管 L1 亮; 我们可以使用 SETB P1.0指令使 P1.0
端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。
5. 程序框图
如图4.1.2所 示
3
图 4.1.2
6. 汇编源程序
ORG 0
START: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
7. C 语言源程序
#include sbit L1=P1^0; void delay02s(void) //延时 0.2 秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { while(1) { L1=0; delay02s(); 4 L1=1; delay02s(); } } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务