2024-09-06 17:13:17
2024-09-06 17:02:10
这个程序可以只修改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
你可以试试看。
2024-09-06 06:56:34
;晶振24M
DELAY1s: ;子程序
mov A,R4
jz enddelay
MOV R5,#10H ; ∵ 1s=2000000*0.5us
MOV R6,#43H ; ∴ 2000000/2=1000000
MOV R7,#40H ; 1000000用16进制表示为: 0f4240
; 所以 R5=0fH+1=10H
; R6=042H+1=043H
; R7=40H
loop: DJNZ R7,$ ; 延时时间≈2×[(R5-1)×256+R6-1]×256+R7
DJNZ R6,loop ; 当R5、R6等于0,相当于256参与运算
DJNZ R5,loop ; 当R5、R6等于0,相当于256参与运算
DJNZ R4,DELAY1s
enddelay: RET
上面是延时子程序,基础延时是1s,调用前给R4赋值,R4的值就是延时的秒数,比如:
mov R4,#3 ;表示延时3秒
lcall DELAY1s
希望你能参考着用,这个用法有点像带参数的函数
第一行的【DELAY1s:】后面是加【mov R4,#3】的吗?
还有这个程序要复制成2个只改DELAY后的1s,不改R。这样能行吗?
你当这是c语言索
汇编不是这样的
DELAY1s是我写的延迟程序,其延迟时间长度受R4决定
所以调用DELAY1s程序前给R4赋值,就能决定延时为几秒
2024-09-06 02:59:50
2024-09-06 12:38:44