新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機匯編延時程序算法詳解

        51單片機匯編延時程序算法詳解

        作者: 時間:2013-01-30 來源:網絡 收藏

        算法詳解

        將以12MHZ晶振為例,詳細講解MCS-中匯編程序延時的

        指令周期、機器周期與時鐘周期

        指令周期:CPU執行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。

        時鐘周期:也稱為振蕩周期,一個時鐘周期 =晶振的倒數。

        MCS-的一個機器周期=6個狀態周期=12個時鐘周期。

        MCS-51單片機的指令有單字節、雙字節和三字節的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執行所占時間為12*(1/12000000)=1μs

        程序分析

        例1 50ms 延時子程序:

        DEL:MOV R7,#200 ①

        DEL1:MOV R6,#125 ②

        DEL2:DJNZ R6,DEL2 ③

        DJNZ R7,DEL1 ④

        RET ⑤

        精確延時時間為:1+(1*200)+(2*125*200)+(2*200)+2

        =(2*125+3)*200+3 ⑥

        =50603μs

        ≈50ms

        由⑥整理出公式(只限上述寫法)延時時間=(2*內循環+3)*外循環+3 ⑦

        詳解:DEL這個子程序共有五條指令,現在分別就 每一條指令 被執行的次數和所耗時間進行分析。

        第一句:MOV R7,#200 在整個子程序中只被執行一次,且為單周期指令,所以耗時1μs

        第二句:MOV R6,#125 從②看到④只要R7-1不為0,就會返回到這句,共執行了R7次,共耗時200μs

        第三句:DJNZ R6,DEL2 只要R6-1不為0,就反復執行此句(內循環R6次),又受外循環R7控制,所以共執行R6*R7次,因是雙周期指令,所以耗時2*R6*R7μs。

        例2 1秒延時子程序:

        DEL:MOV R7,#10 ①

        DEL1:MOV R6,#200 ②

        DEL2:MOV R5,#248 ③

        DJNZ R5,$ ④

        DJNZ R6,DEL2 ⑤

        DJNZ R7,DEL1 ⑥

        RET ⑦

        對每條指令進行計算得出精確延時時間為:

        1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2

        =[(2*248+3)*200+3]*10+3 ⑧

        =998033μs≈1s

        由⑧整理得:延時時間=[(2*第一層循環+3)*第二層循環+3]*第三層循環+3 ⑨

        此式適用三層循環以內的程序,也驗證了例1中式⑦(第三層循環相當于1)的成立。

        注意,要實現較長時間的延時,一般采用多重循環,有時會在程式序里加入NOP指令,這時公式⑨不再適用,下面舉例分析。

        例3仍以1秒延時為例

        DEL:MOV R7,#10 1指令周期1

        DEL1:MOV R6,#0FFH 1指令周期10

        DEL2:MOV R5,#80H 1指令周期255*10=2550

        KONG:NOP 1指令周期128*255*10=326400

        DJNZ R5,$ 2指令周期2*128*255*10=652800

        DJNZ R6,DEL2 2指令周期2*255*10=5110

        DJNZ R7,DEL1 2指令周期2*10=20

        RET 2

        延時時間=1+10+2550+326400+652800+5110+20+2 =986893μs約為1s

        整理得:延時時間=[(3*第一層循環+3)*第二層循環+3]*第三層循環+3 ⑩

        結論:針對初學者的困惑,對匯編程序的延時算法進行了分步講解,并就幾種不同寫法分別總結出相應的計算公式,只要仔細閱讀例1中的詳解,并用例2、例3來加深理解,一定會掌握各種類型程序的算法并加以運用。

        晶振相關文章:晶振原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 衢州市| 北海市| 古浪县| 巴林右旗| 平湖市| 天祝| 金寨县| 延安市| 镶黄旗| 湘潭市| 云阳县| 静海县| 卢湾区| 驻马店市| 石河子市| 晋中市| 屯门区| 灵武市| 内江市| 遂川县| 兰溪市| 新宾| 长丰县| 通辽市| 镇康县| 万载县| 盐池县| 东莞市| 乌兰察布市| 忻州市| 盐津县| 萝北县| 晋宁县| 芜湖市| 湘潭市| 彝良县| 西贡区| 鄂伦春自治旗| 沙坪坝区| 穆棱市| 杭锦旗|