在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 單片機·延時程序小結(jié)

            單片機·延時程序小結(jié)

            作者: 時間:2012-08-24 來源:網(wǎng)絡(luò) 收藏

            實驗中,有一個很重要也是很基本的子程序必須要求我們掌握,那就是。下面我憑記憶來講解

            課本上講,1個=6個狀態(tài)周期=12個時鐘周期,而這個時鐘周期與晶振頻率有關(guān)。我們接下來要上的實驗基本都是以12MHz的晶振。12M的頻率,得其周期為1/12乘10的-6方s,那么1個就是它的12倍,即1us,而一般語句需要2個,例如

            MOV R6,#20

            DNJZ R6,$

            每一次執(zhí)行時,每一個過程就需要2個機器周期,為1us乘2。.同樣C語言中for循環(huán)語句沒執(zhí)行一次也是2個機器周期,即2us。下面我會以每個語句執(zhí)行一次用時的2us為基本單位,不會再細(xì)化了。

            匯編語言最基本延時:

            MOV R6,#20

            D1:MOV R7,#248

            DNJZ R7,$//循環(huán)248次,共用248X2us,

            DNJZ R6,D1

            我開始也是搞不懂怎么算它到底延時多少,現(xiàn)在給大家寫它表達(dá)式:

            我覺得應(yīng)該從最后往前算,在MOR R7,#248執(zhí)行一次前提下,用時1X2us,然后循環(huán)減248,用時248X2us,故共用時[2+2X248]us。

            然而又由于DNJZ R6,D1,上面的過程又循環(huán)20次,故上面的循環(huán)最終用時20X[2+2X248]us。

            接著注意到單純DNJZ R6,D1會用時20X2=40us。

            最后注意過執(zhí)行唯一一次的MOV R6,#20會用時1X2us。

            所有,最終表達(dá)式為:1X2us+20X[2+2X248]us+20X2=10002us=10ms=0.01s。

            同理,用c51編的要了解它必須也要寫出它的表達(dá)式,下面的C51延時程序可以試著自己寫出表達(dá)式:

            void delay02s(void)
            {
            unsigned char i,j,k;
            for(i=20;i>0;i--)
            for(j=20;j>0;j--)
            for(k=248;k>0;k--);
            }

            我還是把表達(dá)式寫在這,[(248X2+2)X20+2]X20=199240=199.24ms=0.2s

            再給一個我驗證過的程序,這是個比較典型和基本的延時程序應(yīng)用例子:

            #includereg51.h>
            sbit L1=P0^0;
            void delay02s(void)
            {
            unsigned char i,j,k;
            for(i=20;i>0;i--)
            for(j=20;j>0;j--)
            for(k=248;k>0;k--);
            }
            void main(void)
            {
            while(1)
            {
            L1=0;
            delay02s();
            L1=1;
            delay02s();
            }
            }

            能看出它的功能么?他就是讓一個燈不停的閃啊閃,亮個0.2s,又熄個0.2s,如此反復(fù)。



            關(guān)鍵詞: 單片機 延時程序 機器周期

            評論


            相關(guān)推薦

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

            關(guān)閉