在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機(jī)匯編延時程序算法詳解

            51單片機(jī)匯編延時程序算法詳解

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

            算法詳解

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

            指令周期、機(jī)器周期與時鐘周期

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

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

            MCS-的一個機(jī)器周期=6個狀態(tài)周期=12個時鐘周期。

            MCS-51單片機(jī)的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個單周期指令包含一個機(jī)器周期,即12個時鐘周期,所以一條單周期指令被執(zhí)行所占時間為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*內(nèi)循環(huán)+3)*外循環(huán)+3 ⑦

            詳解:DEL這個子程序共有五條指令,現(xiàn)在分別就 每一條指令 被執(zhí)行的次數(shù)和所耗時間進(jìn)行分析。

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

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

            第三句:DJNZ R6,DEL2 只要R6-1不為0,就反復(fù)執(zhí)行此句(內(nèi)循環(huán)R6次),又受外循環(huán)R7控制,所以共執(zhí)行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 ⑦

            對每條指令進(jìn)行計算得出精確延時時間為:

            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*第一層循環(huán)+3)*第二層循環(huán)+3]*第三層循環(huán)+3 ⑨

            此式適用三層循環(huán)以內(nèi)的程序,也驗證了例1中式⑦(第三層循環(huán)相當(dāng)于1)的成立。

            注意,要實現(xiàn)較長時間的延時,一般采用多重循環(huán),有時會在程式序里加入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*第一層循環(huán)+3)*第二層循環(huán)+3]*第三層循環(huán)+3 ⑩

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

            晶振相關(guān)文章:晶振原理


            評論


            相關(guān)推薦

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

            關(guān)閉