中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

        算法詳解

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

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

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

        時(shí)鐘周期:也稱(chēng)為振蕩周期,一個(gè)時(shí)鐘周期 =晶振的倒數(shù)。

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

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

        程序分析

        例1 50ms 延時(shí)子程序:

        DEL:MOV R7,#200 ①

        DEL1:MOV R6,#125 ②

        DEL2:DJNZ R6,DEL2 ③

        DJNZ R7,DEL1 ④

        RET ⑤

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

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

        =50603μs

        ≈50ms

        由⑥整理出公式(只限上述寫(xiě)法)延時(shí)時(shí)間=(2*內(nèi)循環(huán)+3)*外循環(huán)+3 ⑦

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

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

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

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

        例2 1秒延時(shí)子程序:

        DEL:MOV R7,#10 ①

        DEL1:MOV R6,#200 ②

        DEL2:MOV R5,#248 ③

        DJNZ R5,$ ④

        DJNZ R6,DEL2 ⑤

        DJNZ R7,DEL1 ⑥

        RET ⑦

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

        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

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

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

        注意,要實(shí)現(xiàn)較長(zhǎng)時(shí)間的延時(shí),一般采用多重循環(huán),有時(shí)會(huì)在程式序里加入NOP指令,這時(shí)公式⑨不再適用,下面舉例分析。

        例3仍以1秒延時(shí)為例

        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

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

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

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

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


        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉