<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

PIC單片機中斷程序設計技巧

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

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

unsigned char count;

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

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

if(count==4){

count=0;

SYSlms=l; //系統時(shí)間標志

couot++;

}

T0IF=0; //清除時(shí)鐘中斷標志位

}

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

bit SYSTime;

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

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

void seaakey(){

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

//任務(wù)參數

switch(KeyTask){

case0:if(key){

KeyTime=30; //準備延時(shí)30 ms

KeyTask++; //準備好下一個(gè)任務(wù)

kcy=0;

}

break;

case I:KeyTime--; //延時(shí)30 ms

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

break;

case2;if(RB4==o){

//調按鍵處理程序

KeyTask=0;

}

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

break;

}

}

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

while(1){

TimeEnable();

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

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

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

這樣設計的引腳變化程序,CPU開(kāi)銷(xiāo)小,效率高,不會(huì )出現堆淺溢出的問(wèn)題,提高了系統的實(shí)時(shí)性。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>