新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機延時匯編語言計算方法

        單片機延時匯編語言計算方法

        作者: 時間:2016-11-25 來源:網絡 收藏
        我們用匯編語言單片機延時10ms的程序(用的是12MHz晶振的 MCS-51),可以編寫下面的程序來實現:
        MOV R5,#5 ①
        D1: MOV R6,#4 ②
        D2: MOV R7,#248 ③
        DJNZ R7,$ ④
        DJNZ R6,D2 ⑤
        DJNZ R5,D1 ⑥
        RET ⑦
        這個延時程序共有七條指令,現在就每一條指令執行的次數和所耗時間進行分析:
        第一條, MOV R5,#5 在整個程序中只執行一次,且為單周期指令,所以耗時1μs,
        第二條, MOV R6,#4 看⑥的指令可知,只要R5-1不為0,就會返回執行這條指令,共執行了R5次,共耗時5μs,
        第三條, MOV R7,#248 同第二條類似,只要R6-1不為0,就會返回執行這條指令,同時受到外部循環R5的控制,共耗時R5*R6*1=20μs,
        第四條, DJNZ R7,$ 只要R7-1不為0,就執行這條指令,同時受到外部循環的控制,由于該指令是雙周期指令,共耗時為R7*R6*R5*2=9920μs,
        第五條, DJNZ R6,D2 只要R6-1不為0,就反復執行此條指令(內循環R6次),又受外循環R7的控制,共耗時R6*R5*2=40μs,
        第六條, DJNZ R5,D1 只要R5-1不為0,就反復執行此條指令,耗時為R5*2=10μs,
        第七條, RET 此指令為雙周期指令,耗時為2μs,
        我們也要考慮在調用子程序時用到LCALL指令,耗時2μs,最后可以得到總的延時為:1+5+20+9920+40+10+2=9998μs=10ms
        我們可以總結延時總時間的公式:
        延時總時間=[(2*一層循環次數+3)*二層循環次數+3]*三層循環次數+3
        注意此公式只適用于三層以內的循環


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 成都市| 宁德市| 同德县| 鱼台县| 修武县| 澄迈县| 新建县| 龙川县| 河源市| 个旧市| 固原市| 榆林市| 城市| 定州市| 西贡区| 和政县| 和平区| 都安| 仁寿县| 大悟县| 伊春市| 弥渡县| 南宁市| 内丘县| 息烽县| 巴林右旗| 南漳县| 新和县| 永康市| 南岸区| 北川| 乾安县| 九江市| 英德市| 三台县| 天全县| 嘉义市| 三原县| 昌宁县| 奉节县| 龙门县|