在前面的IO篇中,使用到矩陣鍵盤與LED,主函數(shù)中對它們的功能函數(shù),從而檢測矩陣鍵盤是否被按下,LED是否需要被點亮。如下面的代碼所示,在循環(huán)中,不斷執(zhí)行鍵盤掃描與顯示。
/*******************************************************
*
* Function name :main
* Description :掃描鍵盤與顯示
* Parameter :None
* Return :None
**********************************************************/
void main() {
sysinit();
while(1) {
//掃描鍵盤將鍵值碼保存到一維數(shù)組
inputNum();
//顯示數(shù)組
showsmg(0,table2[0]);
delay(5); //添加延時函數(shù),防止會有顯示亂碼,必須加
if(table2[1]==1){
showsmg(1,table2[1]);
delay(5); //添加延時函數(shù),防止會有顯示亂碼,必須加
}
}
從上面的代碼中,循環(huán)中的inputNum()函數(shù)會被一直調(diào)用,CPU不斷檢測檢矩陣鍵盤有沒有被使用,從而進行按鍵處理。
實際應用中,可能矩陣鍵盤很久才會被用到,不斷掃描的方式,會影響CPU的利用率;為此希望按鍵被按下時, 才會執(zhí)行按鍵代碼處理代碼,否則執(zhí)行其他的功能代碼。這樣子inputNum()函數(shù),就不應該放在主函數(shù)執(zhí)行了,而是需要放在inputNum()函數(shù)放在中斷服務程序中執(zhí)行。
中斷是個什么概念?從上面的場景中可以看到
(1)CPU可以循環(huán)執(zhí)行著主程序代碼;
(2)矩陣鍵盤被按下(有中斷源請求),打斷主程序執(zhí)行;
(3)中斷響應,進入中斷服務程序(執(zhí)行按鍵處理程序);
(4)中斷服務程序(按鍵處理程序)執(zhí)行完后,中斷返回;
(5)繼續(xù)執(zhí)行主函數(shù)代碼。
中斷的是否發(fā)生,是由外部因素決定(按鍵是否被按下,是人為因素)。程序中無法事先按安排好(不然鍵盤掃描函數(shù)可以放在主函數(shù)執(zhí)行即可),因此中斷服務程序的過程是由硬件自動完成的。
中斷的特點:
1)分時操作:緩解慢速外設與快速CPU的矛盾(鍵盤使用與CPU利用率的矛盾)
2)實時操作:外界變量可以根據(jù)要向CPU提出處理請求
中斷系統(tǒng)的功能:
1)實現(xiàn)中斷響應與中斷返回
根據(jù)中斷請求優(yōu)先級是否馬上進行中斷響應;
執(zhí)行中斷響應時,需要將當前運行的狀態(tài)(程序指針PC、寄存器、標志位)壓入堆棧保存,保護現(xiàn)場,然后進入中斷服務程序;
中斷服務程序執(zhí)行完后,恢復原來的運行狀態(tài),恢復現(xiàn)場。
2)中斷優(yōu)先權
一般系統(tǒng)有多個中斷源(可以請求中斷的事件),它們進行中斷請求時,需要區(qū)分優(yōu)先級進行響應。
3)中斷嵌套
中斷可以實現(xiàn)嵌套,當CPU正在響應某個中斷,這個時候有更高優(yōu)先級的中斷請求,高優(yōu)先級的中斷可以打斷低優(yōu)先級的中斷,先高優(yōu)先級中斷,然后返回執(zhí)行低優(yōu)先級中斷。
-
led
+關注
關注
243文章
24327瀏覽量
683725 -
單片機
+關注
關注
6071文章
45257瀏覽量
660109 -
中斷系統(tǒng)
+關注
關注
1文章
96瀏覽量
61591 -
矩陣鍵盤
+關注
關注
7文章
207瀏覽量
32528
發(fā)布評論請先 登錄
51單片機中斷系統(tǒng)詳解
單片機中斷系統(tǒng)介紹_51單片機中斷系統(tǒng)結(jié)構(gòu)

單片機--中斷系統(tǒng)實驗

C51單片機學習筆記(四)——單片機的中斷系統(tǒng)及應用

單片機(AT89C51)中斷系統(tǒng)詳解和中斷系統(tǒng)應用實驗

51單片機的中斷系統(tǒng)

基于單片機的外部中斷實驗 中斷系統(tǒng)知識介紹

評論