<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        單片機寫延時程序的幾種方法

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月21日   【字體:

         1)空操作延時 (12MHz)
          void delay10us()
        {
           _NOP_();
           _NOP_();
           _NOP_();
           _NOP_();
           _NOP_();
           _NOP_();


        2)循環延時  (12MHz)
        Void delay500ms()
        {
        unsigned char i,j,k;
        for(i=15;i>0;i--)
             for(j=202;j>0;j--)
                 for(k=81;k>0;k--);
        }

        延時總時間=[(k*2+3)*j+3]*i+5
        k*2+3=165 us
        165*j+3=33333 us
        33333*i+5=500000 us=500 ms

        3)計時器中斷延時(工作方式2) (12MHz)
        #include<reg52.h>
        sbit led=P1^0;
        unsigned int num=0;
        void main()
        {
          TMOD=0x02;
          TH0=6;
          TL0=6;
          EA=1;
          ET0=1;
          TR0=1;
        while(1)
          {
            if(num==4000)
            {
              num=0;
              led=~led;
            }
          }
        }

        void T0_time() interrupt 1
        {
        num++;
        }

        4)C程序嵌入組合語言延時 
        #pragma asm
        ……
        組合語言程序段 
        ……
        #pragma endasm


        KEIL軟件仿真測量延時程序延時時間

         

        這是前段事件總結之延時程序、由於不懂組合語言,故NO.4無程序。希望對你有幫助。!


        對於12MHz晶振,機器周期為1uS,在執行該for循環延時程式的時候
        Void delay500ms()
        {
        unsigned char i,j,k;
        for(i=15;i>0;i--)
             for(j=202;j>0;j--)
                 for(k=81;k>0;k--);
        }
        賦值需要1個機器周期,跳轉需要2個機器周期,執行一次for循環的空操作需要2個機器周期,那么,對於第三階循環 for(k=81;k>0;k--);,從第二階跳轉到第三階需要2機器周期 ,賦值需要1個機器周期,執行81次則需要2*81個機器周期,執行一次二階for循環的事件為81*2+1+2;執行了220次,則(81*2+3)*220+3,執行15次一階循環,則 [(81*2+3)*220+3]*15,由於不需要從上階跳往下階,則只加賦值的一個機器周期,另外進入該延時子函數和跳出該函數均需要2個機器周期,故還需要+5。  

        unsigned char i,j,k;用一個機器周期,+上進出函數的2*2個機器周期,則最好需+5個機器周期的時間。

        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮