📄 file2.asm
字号:
;软件延时实验
;现象:从1个灯开始从左到右循环,一个循环以后变成2个,然后三个....到都是8个的时候,回到
;从一个开始,依次循环
;着重演示了如何调用循环程序来完成软件延时(注意和以后定时的区别)。
;此外还涉及到了如何循环递增变量等
beep equ p3.7 ;这里定义蜂鸣器
org 00h ; 这是程序开始的地方,单片机开始执行
jmp main ; 的第一条指令就是从这里取出的
org 030h ; 这个才是真正的程序开始的地方,该地址可以变化,
; 建议采用 30H开始,00H -- 30H 中间包含所有的
; 中断入口地址
main:mov sp,#40h ; 初始化 sp
mov R0,#64
mov R1,#01
mov R2,#01
clr c
clr p3.7 ;禁止蜂鸣器
lp: mov a,R1
cpl a
mov P1,a
lcall delay ;开始延时250ms
lcall delay ; 共计延时0.5秒钟
mov a,R1
rlc a
jc lp1
mov R1,a
djnz R0,lp
jmp main
lp1: mov a, r1
rl a
mov r1,a
djnz R0,lp
jmp main
; ********** 该定时子程序总延时时间250ms
delay: push psw ; 保护PSW寄存器
clr psw.3 ;
setb psw.4 ; 重新设置寄存器组别
mov r0,#2 ; 延时常数
mov r1,#250 ; 延时常数
mov r2,#2 ; 延时常数
dl1:djnz r0,dl1 ; 延时循环1
mov r0,#250 ;
dl2:djnz r1,dl1 ; 延时循环2
mov r0,#240 ;
mov r1,#248 ;
dl3:djnz r2,dl1 ; 这是第三个循环
nop ; 这个用来修正演示精度
pop psw ; 恢复PSW寄存器
ret ; 延时子程序返回
; ********** 延时程序结束 *************
end ;注意:有些编译系统对于程序的结束标志敏感,一定要加上
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -