按钮开关S1的检测由“DELAY:”程序段中的一条指令“JNB P1.0,FLASH”实现。当P1.0=1时,该指令不进行任何操作;当P1.0=0时,该指令会跳向“FLASH:”程序段执行急促交替发光的操作。如果S1一直被按下,“FLASH:”程序段将被不断执行,急促交替发光持续进行。直到S1释放后,程序又回到“MAIN:”中进行500ms间隔的交替发光。这个程序实现了发光二极管的交替闪烁效果。
相关资料显示,使用汇编语言可以更精确地控制延时操作。例如,在“微机汇编一秒延时子程序”中,介绍了一种实现一秒延时的子程序;“C51汇编语言延时子程序集合”提供了多种不同的延时子程序,可以根据具体需求选择合适的实现方法;而“用汇编程序点亮led即汇编中的延时子程序”则详细讲解了如何通过汇编语言实现LED的延时点亮功能。
程序代码如下:
ORG 00H ;设置起始地址
MAIN: ;标号
MOV P1,#0FFH ; P1口作为输入口使用
MOV P0,#00H ;向P0口输出低电平,使发光二极管D1点亮
MOV P2,#0FFH ;向P2口输出高电平,使发光二极管D2熄灭
CALL DELAY ;调用延时子程序
MOV P0,#0FFH ;向P0口输出高电平,使发光二极管D1熄灭
MOV P2,#00H ;向P2口输出低电平,使发光二极管D2点亮
CALL DELAY ;调用延时子程序
JMP MAIN ;跳回MAIN,循环执行
FLASH:
MOV P0,#00H ;向P0口输出低电平,使发光二极管D1点亮
MOV P2,#0FFH ;向P2口输出高电平,使发光二极管D2熄灭
CALL DELAY1 ;调用延时子程序
MOV P0,#0FFH ;向P0口输出高电平,使发光二极管D1熄灭
MOV P2,#00H ;向P2口输出低电平,使发光二极管D2点亮
CALL DELAY1 ;调用延时子程序
JMP MAIN ;跳回MAIN,循环执行
DELAY:
MOV R3,#50 ;延时子程序(500ms)
D1: MOV R4,#20
D2: MOV R5,#124
D3: JNB P1.0,FLASH ;当开关S1按下时,P1.0=0,跳转到FLASH程序段
DJNZ R5,D3
DJNZ R4,D2
DJNZ R3,D1
RET ;返回主程序
DELAY1:
MOV R3,#20 ;延时子程序(200ms)
D11: MOV R4,#20
D21: MOV R5,#248
D31: DJNZ R5,D31
DJNZ R4,D21
DJNZ R3,D11
RET ;返回主程序
END ;汇编程序结束
暂无评论