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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機中斷程序設(shè)計技巧

          PIC單片機中斷程序設(shè)計技巧

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

          首先,在定時器中斷里設(shè)置一個lms的時間基準(zhǔn)標(biāo)志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下:

          unsigned char count;

          if((ToIETOIF)==1){ //定時器中斷

          TMRO+=0x09; //每250μs中斷一次

          if(count==4){

          count=0;

          SYSlms=l; //系統(tǒng)時間標(biāo)志

          couot++;

          }

          T0IF=0; //清除時鐘中斷標(biāo)志位

          }

          有了這個時間基準(zhǔn),便可以在主程序里進(jìn)行按鍵去抖處理了。為了更好地利用這個時間基準(zhǔn),定義一個消息標(biāo)志SYSTime,筆者把它稱作時間消息。為了讓這個消息有自我發(fā)布和自我消失的功能.定義了如下一個宏:

          bit SYSTime;

          #defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)

          可以把TimeEnable()放到主程序死循環(huán)的任何地方,每當(dāng)程序執(zhí)行這個宏,SYSTime就會清零,這就是標(biāo)志位的自我消失.如果在定時器時間基準(zhǔn)標(biāo)志位SYSlms已經(jīng)置位的話,SYSTime就會置1,這樣別的程序就可以利用這個時間消息了,這就是消息的自我發(fā)布。下面就是利用這個時間消息來進(jìn)行按鍵延時去抖的,首先看一下按鍵掃描子程序;

          void seaakey(){

          unsigned char KeyTime,KeyTask;//定義任務(wù)時間參數(shù)、

          //任務(wù)參數(shù)

          switch(KeyTask){

          case0:if(key){

          KeyTime=30; //準(zhǔn)備延時30 ms

          KeyTask++; //準(zhǔn)備好下一個任務(wù)

          kcy=0;

          }

          break;

          case I:KeyTime--; //延時30 ms

          if(KeyTime==0)Key+ask++;

          break;

          case2;if(RB4==o){

          //調(diào)按鍵處理程序

          KeyTask=0;

          }

          else KeyTask=0;//退出任務(wù)

          break;

          }

          }

          在主程序的死循環(huán)中這樣用:

          while(1){

          TimeEnable();

          If(SYSTime==1){scankey();)

          //在此可以添加其他程序

          只有有時問消息的時候才執(zhí)行按鍵掃描程序??梢钥吹?,進(jìn)入掃描程序執(zhí)行第一次的時候,程序首先判斷按鍵標(biāo)志位有沒有置位,置位的話(也就是有按鍵按下的話),任務(wù)時間參數(shù)(KeyTime)賦值為30,這是延時30ms,去抖,當(dāng)然你也可以設(shè)置為其他的時間值;同時任務(wù)參數(shù) (KeyTask)加1。1ms后,再進(jìn)入掃描程序,這個時候掃描程序執(zhí)行casel的語句,這樣30次后(延時了30ms),任務(wù)參數(shù)(KeyTask)加1,值為2。lms后,再進(jìn)入掃描程序,將執(zhí)行case 2的語句,首先在這里再次判斷是不是按鍵還在按下,如果是就調(diào)按鍵的處理程序,如果不是。就退出按鍵掃描程序。在這里,還可以加入按鍵是否抬起的判斷程序。

          這樣設(shè)計的引腳變化程序,CPU開銷小,效率高,不會出現(xiàn)堆淺溢出的問題,提高了系統(tǒng)的實時性。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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