国产亚洲综合精品一区二区三区_亚洲永久网址在线观看_亚洲色大成网站www久久九_国产亚洲AV夜间福利香蕉149

你不知道的PIC單片機中斷程序的設計技巧

2013-11-20 18:04 來源:互聯網 作者:和靜

所有的中檔系列PIC單片機,PORTB端口最高的4個引腳(RB7~RB4)在設為輸入模式時,當輸入電平由高到低或由低到高發生變化時,可以讓單片機產生中斷。這就是通常所說的引腳狀態變化中斷。

在設計引腳中斷程序時,有三個需要特別注意的地方。一是,在清除P0RTB中斷標志位RBIF之前,必須安排一條必不可少的,以PORTB端口數據寄存器PORTB為源寄存器的讀操作指令。放置這一指令的目的有時并不只是為了讀取有用的數據,而是為了取消狀態變化的硬件信號,以便順利清除RBIF標志位,為下一次中斷做好準備。二是,由于端口PORTB是引腳電子變化中斷,即無論引腳出現上升沿還是下降沿都會產生中斷請求,所以必須處理好不需要的虛假中斷。三是,一般都利用PIC單片機的引腳功能來檢測按鍵,所以必須處理好按鍵消抖的問題。

2 引腳中斷程序設計

在主程序里先設置有關的寄存器。

◇設置TRISB寄存器,使RB7~RB4相關的引腳處于輸入狀態;

◇如果需要弱上拉,通過OPTION_REG的第7位設置;

◇RBIF=O;

◇RBIE=1;

◇GIF=1。

響應狀態變化后的中斷服務程序。

◇檢查RBIF是否為l,為l則是引腳變化引起的中斷;

◇調用延時程序,延時20~30 ms,目的是為了按鍵去抖;

◇判斷是引腳出現上升沿還是下降沿引起的中斷;

◇調用按鍵處理程序;

◇讀PORTB口的值,取消狀態變化的硬件信號;

◇清除RBIF標志。

筆者認為上面程序設計最大的問題是在中斷程序里調用延時程序。大家知道,中檔PIC單片機只有8層深度的硬件堆棧,在中斷里調用于程序出現極易堆棧溢出的情況。另外,PIC單片機中斷程序人口只有一個,在響應中斷的請求時,PIC單片機就會自動把全局中斷的使能位(INTCON的第7位GIF)清除,這樣其他中斷就暫時不能被響應(此時,如果別的中斷發出的中斷請求,標志位將一直保留著),直到這個中斷程序退出后才會得到響應。這就要求我們設計中斷程序的時候必須盡量短,避免調用子程序,更不要在中斷里進行復雜的運算。

下面給出筆者設計程序時的思路。

當引腳狀態變化引起中斷時,在中斷子程序里首先判斷引起中斷的原因是不是我們需要的變化引起的中斷。如果是,不要在這里延時,而是設置一個標志位,接著清除中斷標志,退出中斷。中斷程序如下:

else if((RBIE&RBlF)==1){ //如果引腳變化引起中斷

if(RB4==0){ //RB4上的按鈕接地

key=1; //按鍵標志位置位

}

RBIF=0; //清除引腳中斷標志位

}

其中,if(RB4==0)語句相當于讀取了PORTB端口數據寄存器,取消了狀態變化的硬件信號。

下面詳細介紹怎么樣進行按鍵去抖。

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

unsigned char count;

if((ToIE&TOIF)==1){ //定時器中斷

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

if(count==4){

count=0;

SYSlms=l; //系統時間標志

couot++;

}

T0IF=0; //清除時鐘中斷標志位

}

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

bit SYSTime;

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

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

void seaakey(){

unsigned char KeyTime,KeyTask;//定義任務時間參數、

//任務參數

switch(KeyTask){

case0:if(key){

KeyTime=30; //準備延時30 ms

KeyTask++; //準備好下一個任務

kcy=0;

}

break;

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

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

break;

case2;if(RB4==o){

//調按鍵處理程序

KeyTask=0;

}

else KeyTask=0;//退出任務

break;

}

}

在主程序的死循環中這樣用:

while(1){

TimeEnable();

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

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

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

這樣設計的引腳變化程序,CPU開銷小,效率高,不會出現堆淺溢出的問題,提高了系統的實時性。

單片機 PIC 中斷程序

相關閱讀

暫無數據

一周熱門

国产亚洲综合精品一区二区三区_亚洲永久网址在线观看_亚洲色大成网站www久久九_国产亚洲AV夜间福利香蕉149

    精品视频全国免费看| 国产免费观看久久| 国产精品国产成人国产三级| 日韩精品1区2区3区| 成人高清免费在线播放| 亚洲乱码国产乱码精品精可以看 | 99re6这里只有精品视频在线观看| 亚洲视频香蕉人妖| 91精品国产综合久久精品图片 | 黑人巨大精品欧美一区| 国产午夜精品在线观看| 在线一区二区三区四区| 国产色一区二区| 麻豆视频观看网址久久| 国产女主播在线一区二区| 欧亚洲嫩模精品一区三区| 国产精品二三区| 国产精品99久久久久久宅男| 亚洲人成网站在线| 日韩欧美国产wwwww| 亚洲第一av色| 国产色一区二区| 欧美日韩www| 一区二区三区在线观看视频| 成人综合激情网| 色综合天天综合色综合av | 男男视频亚洲欧美| 中文字幕欧美国产| 在线播放一区二区三区| 亚洲福利视频一区| 国产日韩亚洲欧美综合| 精品视频999| 一级日本不卡的影视| 91丨国产丨九色丨pron| 欧美专区在线观看一区| 亚洲制服丝袜一区| 久久嫩草精品久久久精品一| 欧美三级乱人伦电影| 亚洲在线视频一区| 久久精品男人天堂av| 555www色欧美视频| 首页国产欧美久久| 中文字幕一区二区三区在线观看| 日韩一级高清毛片| 奇米色777欧美一区二区| 亚洲天堂2014| 国产欧美精品一区二区色综合朱莉| 国产在线观看一区二区| 夜夜嗨av一区二区三区| 国产免费成人在线视频| 成人教育av在线| 欧美伊人久久大香线蕉综合69| 亚洲综合色噜噜狠狠| 久久久久久**毛片大全| 日韩欧美在线影院| 美国十次综合导航| 亚洲一区在线观看视频| 中文字幕在线不卡视频| 91亚洲精品一区二区乱码| 在线成人免费观看| 美女任你摸久久| 亚洲v日本v欧美v久久精品| 亚洲视频香蕉人妖| 欧美国产日韩亚洲一区| 久久久久久久一区| 波多野结衣中文字幕一区二区三区 | 人人精品人人爱| 亚洲午夜在线观看视频在线| 亚洲欧洲精品天堂一级| 久久久久久影视| 精品国产3级a| 成人毛片在线观看| 欧美一区三区二区| 国产永久精品大片wwwapp| 欧美专区亚洲专区| 免费成人av资源网| 91九色02白丝porn| 日韩成人一区二区三区在线观看| 亚洲精品久久久蜜桃| 一区二区三区四区五区视频在线观看 | 偷窥少妇高潮呻吟av久久免费| 亚洲黄色性网站| 亚洲欧美综合网| 中文字幕一区av| 欧美韩国日本一区| 国产精品久久久久永久免费观看 | 日韩主播视频在线| 亚洲成人激情自拍| 日韩欧美123| 成人免费三级在线| 日韩欧美激情在线| 成人爱爱电影网址| 精品国产成人在线影院| 成人免费高清在线观看| 日韩欧美国产电影| 99久久精品国产毛片| 欧美变态tickle挠乳网站| 成人h动漫精品| 精品国产91亚洲一区二区三区婷婷 | 一区二区三区国产| 一区二区三区在线视频观看| 亚洲一区二区三区国产| 亚洲国产精品视频| 秋霞电影一区二区| 在线观看欧美日本| 激情文学综合网| 91麻豆精品91久久久久同性| 粉嫩aⅴ一区二区三区四区| 日韩欧美亚洲国产另类| 99久久精品免费看国产免费软件| 国产亚洲精品bt天堂精选| 久久久久成人黄色影片| 国产精品久久久久久久久动漫 | 欧美一区二区三区公司| 国产91精品一区二区| 精品国产精品一区二区夜夜嗨| 91一区二区三区在线观看| 国产精品免费免费| 亚洲欧美日韩在线播放| 午夜免费欧美电影| 欧美性猛交一区二区三区精品| 国产精华液一区二区三区| 欧美sm美女调教| 国产亚洲一区二区三区| 亚洲欧美日本在线| 午夜成人免费视频| 国产精品中文字幕一区二区三区| 日韩美女视频在线| 欧美激情一区二区三区全黄| 一区二区三区在线免费视频| 偷窥少妇高潮呻吟av久久免费| 国产麻豆日韩欧美久久| 欧美精品一区二区三区蜜桃 | 国产一区亚洲一区| 精品国产乱码久久久久久老虎| 国产欧美日产一区| 亚洲一卡二卡三卡四卡五卡| 91久久精品网| 不卡的电视剧免费网站有什么| 国产亚洲综合在线| 一区二区三区在线观看视频| 老司机免费视频一区二区| 日韩欧美国产不卡| 国产精品国产三级国产aⅴ中文| 婷婷中文字幕综合| 91精品国产乱| 国产欧美日韩精品a在线观看| 亚洲成人综合在线| 日韩欧美中文一区| 中文字幕制服丝袜一区二区三区 | 男女性色大片免费观看一区二区| 欧美一区二区不卡视频| 日本一区二区高清| 日韩电影在线看| 久久综合精品国产一区二区三区| 国产精品家庭影院| 久久91精品国产91久久小草| 精品国产髙清在线看国产毛片 | 亚洲国产精品黑人久久久| 天堂成人国产精品一区| 日韩欧美亚洲国产精品字幕久久久 | 久久精品国产一区二区| 久久久久久久久久久久久久久99| 一区二区三区成人| 丁香婷婷综合色啪| 亚洲精品日日夜夜| 欧美高清www午色夜在线视频| 欧美激情在线观看视频免费| 日韩影院在线观看| 久久久亚洲精品一区二区三区| 亚洲精品国久久99热| 粗大黑人巨茎大战欧美成人| 亚洲人成小说网站色在线| 欧美在线综合视频| 欧美激情一区二区三区四区| 日本aⅴ免费视频一区二区三区| 久久久久国色av免费看影院| 亚洲国产日韩av| 26uuu亚洲| 男人操女人的视频在线观看欧美| 国产色产综合产在线视频| 色综合天天综合在线视频| 久久久影院官网| 蜜桃av噜噜一区二区三区小说| 国产日韩欧美不卡| 欧美怡红院视频| 一区在线播放视频| 丁香网亚洲国际| 丝袜a∨在线一区二区三区不卡| 久久免费的精品国产v∧| 色综合天天综合狠狠| 久久久99久久精品欧美| 精久久久久久久久久久| 亚洲欧美日韩系列| 日韩一区国产二区欧美三区| 亚洲精品中文在线观看| av一区二区三区在线| 首页国产丝袜综合| 中文字幕欧美一区| 欧美一二三四在线|