单片机各种延时程序集合 下载本文

;延时5秒左右

DELAY5SUSH 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 DL10MS1CALL 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: ;5005

00MS 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,DELAY24001 ;2