各种延时程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;延时5秒左右
DELAY5S:PUSH 04H
PUSH 05H
PUSH 06H
MOV R4,#50
DELAY5S_0:MOV R5,#200
DELAY5S_1:MOV R6,#245
DJNZ R6,$
DJNZ R5,DELAY5S_1
DJNZ R4,DELAY5S_0
POP 06H
POP 05H
POP 04H
RET
;513微秒延时程序
DELAY: MOV R2,#0FEH
DELAY1: DJNZ R2,DELAY1
RET
;10毫秒延时程序
DL10MS: MOV R3,#14H
DL10MS1:LCALL DELAY
DJNZ R3,DL10MS1
RET
;0.1s延时程序12mhz
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秒1秒=1000000微秒
;这个算下来也只有0.998抄
T_0: MOV R7,#10;
D1: MOV R6,#200;
D2: MOV R5,#248;
DJNZ R5,$
DJNZ R6,D2;
DJNZ R7,D1;
RET
;这样算下来应该是1.000011秒
T_0: MOV R7,#10;
D1: MOV R6,#200;
D2: NOP
MOV R5,#248;
DJNZ R5,$
DJNZ R6,D2;
DJNZ R7,D1;
RET
DELAY_2S: ;10MS(11.0592mhz)
MOV R3,#200
JMP DELAY10MS
DELAY_100MS: ;100MS(11.0592mhz)
MOV R3,#10
JMP DELAY10MS
DELAY_10MS:
MOV R3,#1
DELAY10MS: ;去抖动10MS
(11.0592mhz)
MOV R4,#20
DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
DJNZ R3,DELAY10MS
RET
DELAY_500MS: ;500500MS
MOV R2,#208
JMP DELAY_MS
DELAY_175MS: ;175MS
MOV R2,#73
JMP DELAY_MS
delaY_120MS: ;120MS
MOV R2,#50
JMP DELAY_MS
delay_60ms: ;60ms
MOV R2,#25
JMP DELAY_MS
delay_30ms: ;30ms
MOV R2,#12
JMP DELAY_MS
DELAY_5MS: ;5MS
MOV R2,#2
;===================================
DELAY_MS:
CALL DELAY2400
DJNZ R2,DELAY_MS
RET
;===================================
DELAY2400: ;10x244+4=2447
/1.024=2390
MOV R0,#244 ;1
DELAY24001:
MUL AB ;4
MUL AB ;4
DJNZ R0,DELAY240
01 ;2
RET
DELAY: ;延时子程序(1秒)
MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0B2H
DJNZ
R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
MOV R2,#10 ;延时1秒
LCALL DELAY
MOV R2,#50 ;延时5秒
LCALL DELAY
DELAY: ;延时子程序
PUSH R2
PUSH R1
PUSH R0
DELAY1: MOV R1,#00H
DELAY2: MOV R0,#0B2H
DJNZ R0,$
DJNZ R1,DELAY2 ;延时 100 mS
DJNZ R2,DELAY1
POP R0
POP R1
POP R2
RET
(转贴)精确廷时计算公式:
延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5
另外,网上有很多计算延时的应用程序,我这也有几个,有需要的同学发邮件.