在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間: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è)計(jì)的引腳變化程序,CPU開銷小,效率高,不會出現(xiàn)堆淺溢出的問題,提高了系統(tǒng)的實(shí)時性。


            上一頁 1 2 下一頁

            評論


            相關(guān)推薦

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

            關(guān)閉