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

          新聞中心

          軟件延時(shí)的誤區(qū)

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          通常在大學(xué)里學(xué)習(xí)單片機(jī)編程,老師都是教導(dǎo)要寫(xiě)程序流程,而且寫(xiě)出來(lái)的流程幾乎是一條長(zhǎng)龍偶爾附加點(diǎn)分支判斷。這樣寫(xiě)出來(lái)的程序條理比較清晰、易懂,但是通常問(wèn)題多多,比如我突然間要加點(diǎn)東西進(jìn)去,發(fā)現(xiàn)系統(tǒng)不正常了。

          往往這些問(wèn)題都是整個(gè)流程上附加的延時(shí)過(guò)多導(dǎo)致的。延時(shí)程序是比較直觀明了的程序,但是也破壞單片機(jī)的整機(jī)性能,因?yàn)檠訒r(shí)單片機(jī)處于全速運(yùn)行狀態(tài)。

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

          我現(xiàn)在的腦海想起以前寫(xiě)的流程:初始化->顯示->按鍵->其他功能->結(jié)束。

          1.比如說(shuō)顯示,肉眼不可分辨是50HZ以上,所以說(shuō)用4個(gè)數(shù)碼管動(dòng)態(tài)顯示平均每個(gè)顯示是5ms。按照以前的觀點(diǎn)是這樣寫(xiě)的 第一個(gè)數(shù)碼管點(diǎn)亮->延時(shí)幾毫秒、滅第一個(gè)、點(diǎn)亮第二個(gè)->...->延時(shí)、滅最后個(gè)、點(diǎn)亮第一個(gè)。 如果8個(gè)數(shù)碼管的動(dòng)態(tài)顯示,豈不是得有 8 * 幾毫秒的 延時(shí)。

          2.還有個(gè)按鍵,按鍵得有個(gè)去除抖動(dòng),通常是軟件延時(shí),大約在20ms, 如果在加上顯示的幾十毫秒,那這延時(shí)是相當(dāng)恐怖的。

          3.其他功能函數(shù)也是有附帶延時(shí),特別是驅(qū)動(dòng)程序,比如MAX7279讀取操作都是需要一定延時(shí),但是這種延時(shí)都是在us級(jí)別,對(duì)比與ms級(jí)別可以忽略。

          筆者建議寫(xiě)程序,特別寫(xiě)到延時(shí)程序,考慮下你的延時(shí)得多久,如果是ms級(jí)別,考慮用定時(shí)器中斷處理。

          比如說(shuō)顯示程序。假如8個(gè)數(shù)碼管動(dòng)態(tài)顯示。那么你就得考慮20ms內(nèi)8個(gè)數(shù)碼管刷新一次,那么意味著每個(gè)數(shù)碼管顯示時(shí)間為2.5ms。

          那么程序如下:

          volatile unsigned char time_2500_flag; //2.5ms標(biāo)志

          void TimerA(void) //定時(shí)器初始化

          {

          //初始化,配置為500us中斷一次

          }

          #pragma interrupt_handler TimerA_ISR:NUM
          void Timer1_ISR(void) //中斷服務(wù)程序

          {

          static unsigned char cnt = 0;

          //reload 重新賦值

          if (++cnt > 5)

          {

          cnt = 0;

          time_2500_flag = 1;

          }

          }

          void Display(void)

          {

          ;

          }

          void main(void)

          {

          //初始化

          for (;;)

          {

          if (time_2500_flag == 1)

          {

          time_2500_flag = 0;

          Display();

          }

          }

          }

          程序?qū)懙竭@里。

          顯示程序這里要做特別處理,執(zhí)行一次顯示程序,數(shù)碼管依次點(diǎn)亮就OK。



          關(guān)鍵詞: 軟件延時(shí)誤

          評(píng)論


          技術(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); })();