做流水灯要很多不同的延时程序
我现在用下面的延时程序
DELAY:MOV R7,#10
D0: MOV R6,#50
D1: MOV R5,#200
D2: DJNZ R5,D2
DJNZ R6,D1
DJNZ R7,D0
RET
想多写几个延时程序发现D和R不够用,也太麻烦
所以求个适合写多个延时的延时程序(要用汇编语言)
这个程序可以只修改DELAY的编号不修改R就可以用的吗?
追答可以如下编写:
(但是这两个子程序,使用同一组R,不能同时使用。)
DL1:
MOV R7,#10
MOV R6,#50
MOV R5,#20
DJNZ R5, $ ; = D2: DJNZ R5, D2
DJNZ R6, $ - 4 ; = DJNZ R6, D1
DJNZ R7, $ - 8 ; = DJNZ R7, D0
RET
DL2:
MOV R7,#100
MOV R6,#150
MOV R5,#220
DJNZ R5, $ ; = D2: DJNZ R5, D2
DJNZ R6, $ - 4 ; = DJNZ R6, D1
DJNZ R7, $ - 8 ; = DJNZ R7, D0
RET
也可以使用不同的R。
DL3:
MOV R2,#1
MOV R3,#15
MOV R4,#20
DJNZ R4, $
DJNZ R3, $ - 4
DJNZ R2, $ - 8
RET
你可以试试看。
上面是延时子程序,基础延时是1s,调用前给R4赋值,R4的值就是延时的秒数,比如:
mov R4,#3 ;表示延时3秒
lcall DELAY1s
希望你能参考着用,这个用法有点像带参数的函数
追问第一行的【DELAY1s:】后面是加【mov R4,#3】的吗?
还有这个程序要复制成2个只改DELAY后的1s,不改R。这样能行吗?
你当这是c语言索
汇编不是这样的
DELAY1s是我写的延迟程序,其延迟时间长度受R4决定
所以调用DELAY1s程序前给R4赋值,就能决定延时为几秒