上一篇教程我們簡單認識和學習了中斷怎么使用,認識了單片機里面的幾種中斷源,學習了怎么配置中斷的設置
這里簡單的復習一下幾種中斷源
中斷符號 | 中斷名稱 |
---|---|
IE0 | 外部中斷0(INT0) |
ET0 | Timer0中斷 |
IE1 | 外部中斷1(INT1) |
ET1 | Timer1中斷 |
ES | UART串口中斷 |
ET2 | Timer2中斷 |
陽光明媚的秋日,你坐在琴桌前輕撫古琴,這時候門外傳來敲門聲,你正要起身,身旁茶桌上的水壺里的水燒開了……
你起身,從爐上拿起燒水壺放在一旁,再來到門前打開了門……
提起水壺和開門是兩個事件,當兩個事件發生的時候總要有順序的,先提起水壺再開門或者先開門后提起水壺所造成的結果是不同的。往往為了安全,我們會先提起水壺再去開門,這就是我們處理兩個事件的順序
在單片機中,倘若同一個時刻Timer0觸發了中斷,Timer1也觸發了中斷,這時候外部中斷又觸發了。單片機會先執行哪個中斷操作呢?
是不是隨意執行一個操作呢?
顯然不是的,為了保證程序的有序執行,單片機根據“中斷優先級”判斷中斷是否需要優先執行
優先級越高的中斷,越優先執行
單片機的默認中斷優先級
單片機里面,已經對中斷的優先級進行設置,這是C51的所有中斷優先級
中斷優先級(數字越大越優先) | 中斷符號 | 中斷名稱 |
---|---|---|
6 | IE0 | 外部中斷0(INT0) |
5 | ET0 | Timer0中斷 |
4 | IE1 | 外部中斷1(INT1) |
3 | ET1 | Timer1中斷 |
2 | ES | UART串口中斷 |
1 | ET2 | Timer2中斷 |
中斷的嵌套
(1)低優先級的中斷和高優先級的中斷同時觸發,單片機優先執行高優先級的中斷
由于中斷A的優先級大于中斷B的優先級,所以單片機先處理完中斷A的任務,再跳轉處理中斷B的任務,最后跳轉回原來的位置,繼續執行程序
(2)低優先級中斷執行過程中高優先級中斷觸發中斷,單片機跳轉執行高優先級中斷,再返回執行低優先級中斷,執行結束后返回程序
中斷A的優先級大于中斷B的優先級,中斷B觸發,單片機跳轉處理中斷B的任務,執行到一半的時候,中斷A觸發,由于中斷A的優先級更高,所以單片機先去處理中斷A的任務,處理完再跳轉回來處理中斷B的任務
(3)高優先級的中斷處理的過程中低優先級的中斷觸發,單片機優先處理完高優先級的中斷的任務,再執行低優先級的中斷的任務
中斷A的優先級大于中斷B的優先級,中斷A觸發,單片機先去執行中斷A,執行的過程中中斷B觸發,由于中斷B的優先級小于中斷A的優先級,所以單片機在執行完中斷A后才會執行中斷B的任務
上面中斷的執行過程就叫中斷的嵌套
到此我們簡單的復習一下
中斷優先級(數字越大越優先) | 中斷符號 | 中斷名稱 |
---|---|---|
6 | IE0 | 外部中斷0(INT0) |
5 | ET0 | Timer0中斷 |
4 | IE1 | 外部中斷1(INT1) |
3 | ET1 | Timer1中斷 |
2 | ES | UART串口中斷 |
1 | ET2 | Timer2中斷 |
下面用這個圖示實踐以下中斷的嵌套
Timer0先觸發,Timer0運行的過程中Timer1觸發,由于Timer1的優先級不及Timer0,所以單片機執行完Timer0才處理Timer1,在Timer1的處理過程中遇上了外部中斷INT0的觸發,單片機先執行INT0的任務,再返回執行Timer1的任務,最后所有的任務都完成了以后,退回主程序
設置中斷優先級
我們再看看單片機的默認優先級
中斷優先級(數字越大越優先) | 中斷符號 | 中斷名稱 |
---|---|---|
6 | IE0 | 外部中斷0(INT0) |
5 | ET0 | Timer0中斷 |
4 | IE1 | 外部中斷1(INT1) |
3 | ET1 | Timer1中斷 |
2 | ES | UART串口中斷 |
1 | ET2 | Timer2中斷 |
有的時候,如果使用默認的優先級,可能難以滿足我們對程序的需求,事實上,我們可以手動設置單片機內中斷的優先級。
手動設置單片機的優先級涉及到一個寄存器
IP寄存器,0xB8,可位尋址
位 | 符號 | 說明 |
---|---|---|
7 | - | - |
6 | - | - |
5 | PT2 | Timer2優先級設置 |
4 | PS | UART串口優先級設置 |
3 | PT1 | Timer1優先級設置 |
2 | PX1 | 外部中斷INT1優先級設置 |
1 | PT0 | Timer0優先級設置 |
0 | PX0 | 外部中斷INT0優先級設置 |
當我們給其中的一位寫上1的時候就說明我們把這一位的中斷優先級提前了
舉個簡單的例子,如果我們要做一個簡單的秒表+時鐘電子鐘,秒表使用Timer0,時鐘使用Timer1,為了讓機器使用秒表的時候能讓時鐘正常走時,所以我們把Timer1的優先級提前,如下
PT1 = 1;
優先級的設置我們會在后面的項目中用到的,后面用到的時候我也會跟大家細細說明的哦
-
單片機
+關注
關注
6058文章
44821瀏覽量
644657 -
中斷
+關注
關注
5文章
902瀏覽量
42365 -
串口
+關注
關注
14文章
1580瀏覽量
78331 -
中斷優先級
+關注
關注
0文章
22瀏覽量
9510
發布評論請先 登錄
相關推薦
MCS-96系列單片機中斷優先級的控制方法
單片機中斷多優先級的軟件擴展方法
如何采用STM32單片機中斷向量控制器NVIC來分配優先級的數量
為什么51單片機的默認中斷優先級都是低級及中斷嵌套

評論