<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          c51的精確延時

          作者: 時間:2016-11-27 來源:網絡 收藏
          用c語言為單片機編程無疑十分節(jié)約時間,可在很短的時間內開發(fā)出較高效的代碼,對于程序的維護和擴充也較匯編語言方便許多。

          但c語言也有它的不足之處,那就是在時間的精確控制上。要想用c實現精確的延時,只能把c的函數編譯成匯編語言,然后按照匯編語言計算其執(zhí)行時間。本人就按照這種方法,編寫了幾個51單片機的c語言精確延時函數。

          本文引用地址:http://www.ex-cimer.com/article/201611/322200.htm

          注:1.編譯軟件為"Keil uVision3"(Keil uVision2也試用)。用其他編譯軟件的話就不準了。

          2.需要包含頭文件

          3.所有函數的延時時間都是在12Mhz晶振下計算的,如用其他晶振需進行換算。

          4.函數的執(zhí)行時間為“函數的參數”乘以精確到的時間。例如delayms(unsigned char n)函數,其精確度為1ms,如果寫入語句delayms(4),那就是延時4ms。

          5.計算出來的延時時間不包括函數調用與返回的時間。如果函數的精確度較高,且參數較小,那么實際延時時間就可能與計算的時間差很遠。

          (1)精確到2us的延時(12MHz)

          void delayus(unsigned char n)

          { while(--n);

          }

          (2)精確到100us的延時(12MHz)

          void delay100us(unsigned char n)

          { unsigned char i;
          for(;n;n--)
          { _nop_();
          for(i=46;i;i--);
          }
          }

          (3)精確的半毫秒延時函數(12MHz)

          void delay1_2ms(unsigned char n)

          { unsigned char i;
          for(;n!=0;n--)
          { _nop_();
          for(i=246u;i!=0;i--);
          }
          }

          (4)精確的毫秒延時函數(12MHz)

          void delayms(unsigned char n)

          { unsigned char i;
          for(;n!=0;n--)
          { for(i=248u;i!=0;i--);
          for(i=248u;i!=0;i--);
          }
          }



          關鍵詞: c51精確延

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();