l 单键控制多灯延时闪烁—延时子程序
ORG 0000H ; 程序开始
MAIN:
MOV C,80H ;P0.0口的状态传递给位累加器C
JNB 80H,GUAN ;按位操作;按P0.0口的状态为0获得跳转,否则顺序执行
MOV P1,#00H ;按P0.0口为1,得到顺序执行本指令;p1,p2,p3全部置低电平
MOV P2,#00H
MOV P3,#00H
ACALL DELAY ; 调延时子程序
GUAN : 按P0.0口的状态为0获得的跳转执行指令—子程序
CPL C ;反转P0.0口的状态0为1
MOV P0.1,C ; 按P0.0口的状态反转为1,显示P0.1口
MOV P1,#0FFH ; 把p1,p2,p3全部置高电平
MOV P2,#0FFH;
MOV P3,#0FFH;
ACALL DELAY ; 调延时子程序
AJMP MAIN ; 延时结束后,短转移跳转到MAIN,重新开始 ,改变了的P0.0口的状态便起作用了
ORG 0200H ; 从200H开始存放
DELAY: ; 延时子程序 — 这是一个非常有用、而且常见的一个子程序
MOV R5,#04H ;将16进制数04H传递给寄存器R5
F3:
MOV R6,#0FFH ;将16进制数0FFH传递给寄存器R6
F2:
MOV R7,#0FFH ;将16进制数0FFH传递给寄存器R7
F1:
DJNZ R7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令
DJNZ R6, F2 ;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令
DJNZ R5, F3 ;寄存器R5减1非0跳转到F3,直到减为0顺序执行下一指令
RET ; 子程序结束,返回子程序入口处
END
程序说明:
每个口用字节赋值指令一次性的开关各个Pi口的外接器件。特别注意延时指令,在单片机的应用中,经常会使用延时特性。参见如下所述。
注意延时的本质实际上是单片机在空运转,因此可以使用一个跳转或多个跳转的空运转,以便控制更长的延时。寄存器是与运算器直接打交道的存储单元。
基本的延时子程序为
DELAY:
MOV R5,#04H
F1:
DJNZ R5, F1
RET
l LED循环问题(跑马灯、流水灯)
一种方式位输出加延时子程序,二种方式字节输出加延时子程序,三种方式字节数据表加延时子程序。
a) 单个按键与多个LED灯—数码管(位操作—输入与字节操作—输出)—数表
l 单输入与多输出的电子线路—静态特性
在单个LED灯的基础上,添加多个LED灯或者用LED组灯来替代单个添加。从单个LED到LED组的硬件添加,再通过指令变化,可以感受到、可以发现数码管的应用方法,也可以体会到引用数组—数据表的好处。
l
多输出电子线路的控制指令—动态特性
通过硬件的变化,指令集—程序也在随着变化。可以发现,添加延时指令,可实现LED闪烁;也就是用多灯。通过用位赋值指令并延时单个LED的开关时间,实现流水灯现象。也可以对每个口用位指令赋值,顺序开关;可以用字节指令送数据,LOOP循环实现跑马灯。还可以用数据组格式—数表格式,通过扫描实现,等等。
关键字:Proteus 51系列 汇编