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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)延時精確計算

          單片機(jī)延時精確計算

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          在不同單片機(jī)中,有不同的單片機(jī)指令。每個指令都占用不同的時鐘周期。一般延時程序就是通過循環(huán)去達(dá)到延時的作用。

          下面以最基礎(chǔ)的51單片機(jī)去做說明:

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

          我這邊用我之前debug過的2個延時程序,晶振使用12M:

          void delay_us_fun (unsigned int i)//us延時
          {
          while (i--);
          }

          這個是用來微秒級延時的,他在不同的參數(shù)i下,延時時間分別為實際為(9*i+16)us,這些延時的實際時間一般可以通過開發(fā)環(huán)境keil C51中模擬一下,看下時鐘就知道了。

          匯編好點的話也可以直接看匯編計算或者直接寫匯編程序。

          這時我們可以使用下面宏去調(diào)用上面的接口

          #define _delay_us(i)delay_us_fun((i)/9)

          這邊顯然有點誤差的。但是數(shù)值越大,誤差就相對小點。

          僅僅需要幾u(yù)s的延時,使用_NOP_();

          下面ms級延時一樣。

          void delay_ms_fun (unsigned int mDelay1)//ms延時
          {
          unsigned int mDelay2;

          for (; mDelay1 > 0; mDelay1--)
          {
          for (mDelay2 = 0; mDelay2 < 123; mDelay2++)
          {
          }
          }
          }

          #define _delay_ms(i)delay_ms_fun((i*1000L)/998L)//實際為(i*1000-13)/998

          總而言之,就是根據(jù)單片機(jī)的指令,還有每個指令占用的時鐘周期計算出相對應(yīng)的精確延時。



          關(guān)鍵詞: 單片機(jī)延時精確計

          評論


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

          關(guān)閉
          看屁屁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); })();