文档介绍:精确延时计算公式:
延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5
;延时5秒左右
DELAY5S:PUSH 04H;2个机器周期
PUSH 05H;2个机器周期
PUSH 06H;2个机器周期
MOV R4,#50;1个机器周期
DELAY5S_0:MOV R5,#200;1个机器周期
DELAY5S_1:MOV R6,#245;1个机器周期
DJNZ R6,$;2×245=490个机器周期
DJNZ R5,DELAY5S_1;这条2个机器周期,这层循环包含R5×(490+1)+2×R5=98600个机器周期
DJNZ R4,DELAY5S_0;这条2个机器周期,这层循环包含R4×(98600+1)+2×R4=4930150个机器周期
POP 06H;2个机器周期
POP 05H;2个机器周期
POP 04H;2个机器周期
RET;2个机器周期
;(共2+2+2+1+4930150+2+2+2+2=4930165个机器周期)
;513微秒延时程序
DELAY: MOV R2,#0FEH;1个机器周期
JUZINAIYOU: DJNZ R2,JUZINAIYOU;2×R21即2×245
RET;2个机器周期
;(实际上是493个机器周期)
;10毫秒延时程序
DL10MS: MOV R3,#14H
DL10MS1:LCALL DELAY
DJNZ R3,DL10MS1
RET
;(缺DELAY)
;
DELAY: MOV R6,#250
DL1: MOV R7,#200
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
;延时1046549微秒(12MHz)
;具体的计算公式是:
;((((r7*2+1)+2)*r6+1)+2)*r5+1+4 = ((r7*2+3)*r6+3)*r5+5
DEL : MOV R5,#08H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
;1秒延时子程序是以12MHz晶振
Delay1S:mov r1,#50
del0: mov r2,#91
del1: mov r3,#100
djnz r3,$
djnz r2,del1
djnz r1,del0
Ret
;1秒延时子程序是以12MHz晶振为例算指令周期耗时
KK: MOV R5,#10 ;1指令周期×1
K1: MOV R6,#0FFH ;1指令周期×10
K2: MOV R7,#80H ;1指令周期256×10=2560
K3: NOP ;1指令周期
;128*256*10=327680
DJNZ R7,K3 ;2指令周期
2*128*256*10=655360
DJNZ R6,K2 ;2指令周期
2*256*10=5120
DJNZ R5,K1 ;2指令周期2*10=20
RET;2指令周期
;21+10+2560+327680+655360+5120+20+2=990753
;约等于1秒=1000000微秒
;这个算