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