|
相信不少和我一樣的新手也有過對51單片機的中斷優先級有過迷惑,之前我在自己的博客上做過簡單的整理,現在搬運過來,希望能給和我一樣的新手一個看得懂的解釋。
51單片機有兩種優先級——查詢優先級&&執行優先級。
查詢優先級:
查詢優先級是指當51單片機的多個中斷源同時引起中斷時,CPU逐個查詢中斷標志位的次序,高優先級的中斷標志位將被優先查詢到,但并不代表查詢優先級高的中斷一定可以打斷正在執行中斷處理的低優先級中斷。查詢優先級由單片機硬件決定,不可更改,可在相應的數據手冊中得知,如下:
(不熟悉本論壇的排版,圖片可能會在文章末尾顯示,請見諒)
舉個栗子:
1、當定時器中斷0和外部中斷1同時引起時(沒有設置中斷優先級控制寄存器),則會首先執行定時器中斷0的請求;
2、當定時器中斷0和外部中斷1同時引起且外部中斷1正在執行請求時(沒有設置中斷優先級控制寄存器),外部中斷1不能被任何中斷(包括定時器中斷0)所打斷。
執行優先級:
執行優先級由中斷優先級控制寄存器IP來控制。
(不熟悉本論壇的排版,圖片可能會在文章末尾顯示,請見諒)
寄存器IP設置如下:
高兩位置0
PT2:定時器中斷2優先級控制位
PS:串口中斷優先級控制位
PT1:定時器中斷1優先級控制位
PX1:外部中斷1優先級控制位
PT0:定時器中斷0優先級控制位
PX0:外部中斷0優先級控制位
如果只設置IP,執行優先級則只有兩級——高優先級(IP中的相應位置1)和低優先級(IP中的相應位置0)。若寄存器IP沒有設置(即寄存器IP所有位全為0),則只按照查詢優先級進行。
當多個中斷源同時引起中斷時,優先響應執行優先級高的中斷;
同一執行優先級的中斷則根據查詢優先級依次響應;
一個正在執行的低優先級中斷能被高優先級中斷所打斷,反之則不能;
一個正在執行的中斷不能被新的同優先級中斷所打斷。
舉個栗子:
當IP中的PX1位和PT0位置1,其余位置0時,中斷的響應次序依次為:
定時器中斷0 → 外部中斷1 → 外部中斷0 → 定時器中斷1 → 串口中斷 → 定時器中斷2
|
評分
-
查看全部評分
|