新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 各種匯編延時(shí)程序大集合

        各種匯編延時(shí)程序大集合

        作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
        在論壇上看到不少不錯(cuò)的延時(shí)程序,整理如下共同分享:

        本文引用地址:http://www.104case.com/article/201611/321248.htm

        精確延時(shí)計(jì)算公式:

        延時(shí)時(shí)間=[(2*第一層循環(huán)+3)*第二層循環(huán)+3]*第三層循環(huán)+5


        ;延時(shí)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微秒延時(shí)程序
        DELAY: MOV R2,#0FEH
        DELAY1: DJNZ R2,DELAY1
        RET


        ;10毫秒延時(shí)程序
        DL10MS: MOV R3,#14H
        DL10MS1:LCALL DELAY
        DJNZ R3,DL10MS1
        RET


        ;0.1s延時(shí)程序12mhz
        DELAY: MOV R6,#250
        DL1: MOV R7,#200
        DL2: DJNZ R6,DL2
        DJNZ R7,DL1
        RET


        ;延時(shí)1046549微秒(12mhz)
        ;具體的計(jì)算公式是:
        ;((((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秒延時(shí)子程序是以12MHz晶振
        Delay1S:mov r1,#50
        del0: mov r2,#91
        del1: mov r3,#100
        djnz r3,$
        djnz r2,del1
        djnz r1,del0
        Ret


        ;1秒延時(shí)子程序是以12MHz晶振為例算指令周期耗時(shí)
        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微秒



        ;這個(gè)算下來也只有0.998抄
        T_0: MOV R7,#10;
        D1: MOV R6,#200;
        D2: MOV R5,#248;
        DJNZ R5,$
        DJNZ R6,D2;
        DJNZ R7,D1;
        RET


        ;這樣算下來應(yīng)該是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: ;去抖動(dòng)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,DELAY24001 ;2
        RET


        DELAY: ;延時(shí)子程序(1秒)
        MOV R0,#0AH
        DELAY1: MOV R1,#00H
        DELAY2: MOV R2,#0B2H
        DJNZ R2,$
        DJNZ R1,DELAY2
        DJNZ R0,DELAY1
        RET


        MOV R2,#10 ;延時(shí)1秒
        LCALL DELAY
        MOV R2,#50 ;延時(shí)5秒
        LCALL DELAY
        DELAY: ;延時(shí)子程序
        PUSH R2
        PUSH R1
        PUSH R0
        DELAY1: MOV R1,#00H
        DELAY2: MOV R0,#0B2H
        DJNZ R0,$
        DJNZ R1,DELAY2 ;延時(shí) 100 mS
        DJNZ R2,DELAY1
        POP R0
        POP R1
        POP R2
        RET


        1: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+1


        2: DEL: MOV R7, #200

        DEL1: MOV R6, #123

        DEL2:NOP

        DJNZ R6,DEL2

        DJNZ R7,DEL1

        RET


        D500MS:
        PUSH PSW
        SETB RS0
        MOV R7,#200
        D51: MOV R6,#250
        D52: NOP
        NOP
        NOP
        NOP
        DJNZ R6,D52
        DJNZ R7,D51
        POP PSW
        RET



        DELAY: ;延時(shí)1毫秒
        PUSH PSW
        SETB RS0
        MOV R7,#50
        D1: MOV R6,#10
        D2: DJNZ R6,$
        DJNZ R7,D1
        POP PSW
        RET


        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



        關(guān)鍵詞: 匯編延時(shí)程序大集

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 紫云| 抚远县| 饶平县| 车险| 肥乡县| 翁牛特旗| 中卫市| 枣阳市| 湾仔区| 普格县| 珲春市| 泾阳县| 大化| 锦州市| 嘉定区| 芜湖县| 拉萨市| 泾阳县| 连州市| 旌德县| 新蔡县| 孟州市| 土默特左旗| 仙游县| 喀什市| 武汉市| 蚌埠市| 达日县| 比如县| 阜城县| 阳新县| 深州市| 湖北省| 固原市| 调兵山市| 科技| 永丰县| 尉犁县| 南皮县| 寿阳县| 平远县|