新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 幾種延時的匯編執(zhí)行代碼對比與總結(jié)

        幾種延時的匯編執(zhí)行代碼對比與總結(jié)

        作者: 時間:2013-04-07 來源:網(wǎng)絡(luò) 收藏

        16: }

        C:0x0029 22 RET

        分析:

        delay1(1); 404-390=14

        delay1(2); 425-405=20

        delay1(3); 452-426=26

        指令周期(即實(shí)際延時)= 8 + 延時參數(shù) * 6

        對比二和三可知循環(huán)結(jié)束條件不同,編譯結(jié)果理當(dāng)不同,用i != 0快2個周期。

        四、while語句1

        21: delay1(1);

        C:0x0005 7F01 MOV R7,#0x01

        C:0x0007 1123 ACALL delay1(C:0023)

        11: void delay1(unsigned char i)

        12: {

        13: while(i--);

        C:0x0023 AE07 MOV R6,0x07

        C:0x0025 1F DEC R7

        C:0x0026 EE MOV A,R6

        C:0x0027 70FA JNZ delay1(C:0023)

        14: }

        C:0x0029 22 RET

        407-390=17,有點(diǎn)夸張

        當(dāng)delay1(2)時,為431-408=23

        delay1(3)時,為461-432=29

        指令周期(即實(shí)際延時)= 11 + 延時參數(shù) * 6

        五、while語句2

        21: delay1(1);

        444 C:0x0005 7F01 MOV R7,#0x01

        445 C:0x0007 111D ACALL delay1(C:001D)

        11: void delay1(unsigned char i)

        12: {

        13: while(--i);

        447 C:0x001D DFFE DJNZ R7,delay1(C:001D)

        14: }

        449 C:0x001F 22 RET

        451

        從上看出451-444=7個周期,指令周期為1us的話,就是7us

        指令周期(即實(shí)際延時)= 5 + 延時參數(shù) * 2

        綜上可知:

        共性:裝載函數(shù)參數(shù)用時1,調(diào)用用2,返回用2,1+2+2=5為固定開銷。

        從以上各個結(jié)果的指令周期和延時參數(shù)的關(guān)系上看,很明顯,以后如果要求不用定時器實(shí)現(xiàn)us級的延時(按晶振12M,指令周期1us算),那么首選第五:

        while(--i);

        語句,其分辨率是最高,最精確的,當(dāng)然,對于相同的延時參數(shù),它的實(shí)際延時時間也是最短的,它只能最高延時5+255*2=515us,若所需延時大于此值,則需要循環(huán)嵌套;或者,可考慮選用

        for(;k>0;k--);

        最高延時=10 + 255*8=2050us=2.05ms

        需要其他的延時時間片的話,再參考以上的公式計算即可。


        上一頁 1 2 下一頁

        關(guān)鍵詞: 51單片機(jī) KeilC 延時程序

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 阳春市| 涪陵区| 揭东县| 芮城县| 酒泉市| 祁连县| 高唐县| 谢通门县| 临颍县| 曲水县| 闵行区| 长乐市| 新昌县| 南雄市| 夏邑县| 江口县| 泸州市| 古浪县| 澄城县| 江安县| 贵州省| 虞城县| 葫芦岛市| 定陶县| 侯马市| 松潘县| 电白县| 星座| 通城县| 潞城市| 九寨沟县| 乌审旗| 云南省| 阿拉善盟| 芒康县| 富川| 依兰县| 正阳县| 内乡县| 钟山县| 洛川县|