1、各种汇编延时程序大集合各种汇编延时程序大集合日期:2008-01-09 来源: 作者:字体:大中小 (投递新闻)在论坛上看到不少不错的延时程序,整理如下共同分享:精确延时计算公式:延时时间=(2*第一层循环+3)*第二层循环+3*第三层循环+5;延时5秒左右DELAY5S:PUSH 04H PUSH 05H PUSH 06H MOV R4,#50DELAY5S_0:MOV R5,#200DELAY5S_1:MOV R6,#245 DJNZ R6,$ DJNZ R5,DELAY5S_1 DJNZ R4,DELAY5S_0 POP 06H POP 05H POP 04H RET;513微秒延时程序
2、DELAY: MOV R2,#0FEHDELAY1: DJNZ R2,DELAY1RET;10毫秒延时程序DL10MS: MOV R3,#14HDL10MS1:LCALL DELAY DJNZ R3,DL10MS1 RET;0.1s延时程序12mhzDELAY: MOV R6,#250DL1: MOV R7,#200DL2: DJNZ R6,DL2DJNZ R7,DL1RET;延时1046549微秒(12mhz);具体的计算公式是:;(r7*2+1)+2)*r6+1)+2)*r5+1+4 = (r7*2+3)*r6+3)*r5+5DEL : MOV R5,#08HDEL1: MOV R6,#0
3、FFHDEL2: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL2 DJNZ R5,DEL1 RET;1秒延时子程序是以12MHz晶振Delay1S:mov r1,#50del0: mov r2,#91del1: mov r3,#100 djnz r3,$ djnz r2,del1 djnz r1,del0 Ret;1秒延时子程序是以12MHz晶振为例算指令周期耗时KK: MOV R5,#10 ;1指令周期1K1: MOV R6,#0FFH ;1指令周期10K2: MOV R7,#80H ;1指令周期256*10=2560K3: NOP ;1指令周期128*256*10=
4、327680DJNZ R7,K3 ;2指令周期2*128*256*10=655360DJNZ R6,K2 ;2指令周期2*256*10=5120DJNZ R5,K1 ;2指令周期2*10=20RET;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;D
5、1: MOV R6,#200;D2: NOP MOV R5,#248; DJNZ R5,$ DJNZ R6,D2; DJNZ R7,D1; RETDELAY_2S: ;10MS(11.0592mhz)MOV R3,#200JMP DELAY10MSDELAY_100MS: ;100MS(11.0592mhz)MOV R3,#10JMP DELAY10MSDELAY_10MS:MOV R3,#1DELAY10MS: ;去抖动10MS(11.0592mhz)MOV R4,#20DELAY10MSA:MOV R5,#247DJNZ R5,$DJNZ R4,DELAY10MSADJNZ R3,DELA
6、Y10MSRETDELAY_500MS: ;500500MSMOV R2,#208JMP DELAY_MSDELAY_175MS: ;175MSMOV R2,#73JMP DELAY_MSdelaY_120MS: ;120MSMOV R2,#50JMP DELAY_MSdelay_60ms: ;60msMOV R2,#25JMP DELAY_MSdelay_30ms: ;30msMOV R2,#12JMP DELAY_MSDELAY_5MS: ;5MSMOV R2,#2;=DELAY_MS:CALL DELAY2400DJNZ R2,DELAY_MSRET;=DELAY2400: ;10x24
7、4+4=2447/1.024=2390MOV R0,#244 ;1DELAY24001:MUL AB ;4MUL AB ;4DJNZ R0,DELAY24001 ;2RETDELAY: ;延时子程序(1秒)MOV R0,#0AHDELAY1: MOV R1,#00HDELAY2: MOV R2,#0B2HDJNZ R2,$DJNZ R1,DELAY2DJNZ R0,DELAY1RETMOV R2,#10 ;延时1秒LCALL DELAYMOV R2,#50 ;延时5秒LCALL DELAYDELAY: ;延时子程序PUSH R2PUSH R1PUSH R0DELAY1: MOV R1,#00H
8、DELAY2: MOV R0,#0B2HDJNZ R0,$DJNZ R1,DELAY2 ;延时 100 mSDJNZ R2,DELAY1POP R0POP R1POP R2RET1:DEL: MOV R7, #200 DEL1: MOV R6, #123 NOP DEL2: DJNZ R6, DEL2 DJNZ R7, DEL1 RET是50.001ms 算法是:0.001ms+200*0.001ms+200*0.001ms+200*123*0.002ms+200*0.002ms;(123*2+4)*200+12: DEL: MOV R7, #200DEL1: MOV R6, #123DEL2
9、:NOP DJNZ R6,DEL2 DJNZ R7,DEL1RETD500MS:PUSH PSWSETB RS0MOV R7,#200D51: MOV R6,#250D52: NOPNOPNOPNOPDJNZ R6,D52DJNZ R7,D51POP PSWRETDELAY: ;延时1毫秒PUSH PSWSETB RS0MOV R7,#50D1: MOV R6,#10D2: DJNZ R6,$DJNZ R7,D1POP PSWRET ORG 0 LJMP MAIN ORG 000BH LJMP CTC0 MAIN: MOV SP, #50H CLR EA MOV TMOD, #01H MOV TH0,#3CH MOV TL0,#0B0H MOV R4, #10 SETB ET0 SETB EA SETB TR0 SJMP $ ; CTC0: MOV TH0, #3CH MOV TL0, #0B0H DJNZ R4, LP CPL P1.0 MOV R4, #10 LP: RETI END