上一篇教程我們簡單認識和學(xué)習(xí)了中斷怎么使用,認識了單片機里面的幾種中斷源,學(xué)習(xí)了怎么配置中斷的設(shè)置
這里簡單的復(fù)習(xí)一下幾種中斷源
| 中斷符號 | 中斷名稱 |
|---|---|
| IE0 | 外部中斷0(INT0) |
| ET0 | Timer0中斷 |
| IE1 | 外部中斷1(INT1) |
| ET1 | Timer1中斷 |
| ES | UART串口中斷 |
| ET2 | Timer2中斷 |
陽光明媚的秋日,你坐在琴桌前輕撫古琴,這時候門外傳來敲門聲,你正要起身,身旁茶桌上的水壺里的水燒開了……
你起身,從爐上拿起燒水壺放在一旁,再來到門前打開了門……
提起水壺和開門是兩個事件,當(dāng)兩個事件發(fā)生的時候總要有順序的,先提起水壺再開門或者先開門后提起水壺所造成的結(jié)果是不同的。往往為了安全,我們會先提起水壺再去開門,這就是我們處理兩個事件的順序
在單片機中,倘若同一個時刻Timer0觸發(fā)了中斷,Timer1也觸發(fā)了中斷,這時候外部中斷又觸發(fā)了。單片機會先執(zhí)行哪個中斷操作呢?
是不是隨意執(zhí)行一個操作呢?
顯然不是的,為了保證程序的有序執(zhí)行,單片機根據(jù)“中斷優(yōu)先級”判斷中斷是否需要優(yōu)先執(zhí)行
優(yōu)先級越高的中斷,越優(yōu)先執(zhí)行
單片機的默認中斷優(yōu)先級
單片機里面,已經(jīng)對中斷的優(yōu)先級進行設(shè)置,這是C51的所有中斷優(yōu)先級
| 中斷優(yōu)先級(數(shù)字越大越優(yōu)先) | 中斷符號 | 中斷名稱 |
|---|---|---|
| 6 | IE0 | 外部中斷0(INT0) |
| 5 | ET0 | Timer0中斷 |
| 4 | IE1 | 外部中斷1(INT1) |
| 3 | ET1 | Timer1中斷 |
| 2 | ES | UART串口中斷 |
| 1 | ET2 | Timer2中斷 |
中斷的嵌套
(1)低優(yōu)先級的中斷和高優(yōu)先級的中斷同時觸發(fā),單片機優(yōu)先執(zhí)行高優(yōu)先級的中斷

由于中斷A的優(yōu)先級大于中斷B的優(yōu)先級,所以單片機先處理完中斷A的任務(wù),再跳轉(zhuǎn)處理中斷B的任務(wù),最后跳轉(zhuǎn)回原來的位置,繼續(xù)執(zhí)行程序
(2)低優(yōu)先級中斷執(zhí)行過程中高優(yōu)先級中斷觸發(fā)中斷,單片機跳轉(zhuǎn)執(zhí)行高優(yōu)先級中斷,再返回執(zhí)行低優(yōu)先級中斷,執(zhí)行結(jié)束后返回程序

中斷A的優(yōu)先級大于中斷B的優(yōu)先級,中斷B觸發(fā),單片機跳轉(zhuǎn)處理中斷B的任務(wù),執(zhí)行到一半的時候,中斷A觸發(fā),由于中斷A的優(yōu)先級更高,所以單片機先去處理中斷A的任務(wù),處理完再跳轉(zhuǎn)回來處理中斷B的任務(wù)
(3)高優(yōu)先級的中斷處理的過程中低優(yōu)先級的中斷觸發(fā),單片機優(yōu)先處理完高優(yōu)先級的中斷的任務(wù),再執(zhí)行低優(yōu)先級的中斷的任務(wù)

中斷A的優(yōu)先級大于中斷B的優(yōu)先級,中斷A觸發(fā),單片機先去執(zhí)行中斷A,執(zhí)行的過程中中斷B觸發(fā),由于中斷B的優(yōu)先級小于中斷A的優(yōu)先級,所以單片機在執(zhí)行完中斷A后才會執(zhí)行中斷B的任務(wù)
上面中斷的執(zhí)行過程就叫中斷的嵌套
到此我們簡單的復(fù)習(xí)一下
| 中斷優(yōu)先級(數(shù)字越大越優(yōu)先) | 中斷符號 | 中斷名稱 |
|---|---|---|
| 6 | IE0 | 外部中斷0(INT0) |
| 5 | ET0 | Timer0中斷 |
| 4 | IE1 | 外部中斷1(INT1) |
| 3 | ET1 | Timer1中斷 |
| 2 | ES | UART串口中斷 |
| 1 | ET2 | Timer2中斷 |
下面用這個圖示實踐以下中斷的嵌套

Timer0先觸發(fā),Timer0運行的過程中Timer1觸發(fā),由于Timer1的優(yōu)先級不及Timer0,所以單片機執(zhí)行完Timer0才處理Timer1,在Timer1的處理過程中遇上了外部中斷INT0的觸發(fā),單片機先執(zhí)行INT0的任務(wù),再返回執(zhí)行Timer1的任務(wù),最后所有的任務(wù)都完成了以后,退回主程序
設(shè)置中斷優(yōu)先級
我們再看看單片機的默認優(yōu)先級
| 中斷優(yōu)先級(數(shù)字越大越優(yōu)先) | 中斷符號 | 中斷名稱 |
|---|---|---|
| 6 | IE0 | 外部中斷0(INT0) |
| 5 | ET0 | Timer0中斷 |
| 4 | IE1 | 外部中斷1(INT1) |
| 3 | ET1 | Timer1中斷 |
| 2 | ES | UART串口中斷 |
| 1 | ET2 | Timer2中斷 |
有的時候,如果使用默認的優(yōu)先級,可能難以滿足我們對程序的需求,事實上,我們可以手動設(shè)置單片機內(nèi)中斷的優(yōu)先級。
手動設(shè)置單片機的優(yōu)先級涉及到一個寄存器
IP寄存器,0xB8,可位尋址
| 位 | 符號 | 說明 |
|---|---|---|
| 7 | - | - |
| 6 | - | - |
| 5 | PT2 | Timer2優(yōu)先級設(shè)置 |
| 4 | PS | UART串口優(yōu)先級設(shè)置 |
| 3 | PT1 | Timer1優(yōu)先級設(shè)置 |
| 2 | PX1 | 外部中斷INT1優(yōu)先級設(shè)置 |
| 1 | PT0 | Timer0優(yōu)先級設(shè)置 |
| 0 | PX0 | 外部中斷INT0優(yōu)先級設(shè)置 |
當(dāng)我們給其中的一位寫上1的時候就說明我們把這一位的中斷優(yōu)先級提前了
舉個簡單的例子,如果我們要做一個簡單的秒表+時鐘電子鐘,秒表使用Timer0,時鐘使用Timer1,為了讓機器使用秒表的時候能讓時鐘正常走時,所以我們把Timer1的優(yōu)先級提前,如下
PT1 = 1;
優(yōu)先級的設(shè)置我們會在后面的項目中用到的,后面用到的時候我也會跟大家細細說明的哦
-
單片機
+關(guān)注
關(guān)注
6076文章
45494瀏覽量
670252 -
中斷
+關(guān)注
關(guān)注
5文章
917瀏覽量
43754 -
串口
+關(guān)注
關(guān)注
15文章
1618瀏覽量
82805 -
中斷優(yōu)先級
+關(guān)注
關(guān)注
0文章
22瀏覽量
9727
發(fā)布評論請先 登錄
MCS-96系列單片機中斷優(yōu)先級的控制方法
單片機中斷優(yōu)先級應(yīng)用案例
關(guān)于51單片機中斷嵌套
單片機中斷多優(yōu)先級的軟件擴展方法
STM32單片機優(yōu)先級的定義
如何設(shè)置51單片機的中斷優(yōu)先級
如何采用STM32單片機中斷向量控制器NVIC來分配優(yōu)先級的數(shù)量
解析單片機里的中斷優(yōu)先級
51單片機的中斷優(yōu)先級和中斷嵌套的詳細資料概述
為什么51單片機的默認中斷優(yōu)先級都是低級及中斷嵌套
51單片機的中斷優(yōu)先級及中斷嵌套的詳細資料說明
單片機之中斷優(yōu)先級設(shè)置
51單片機中斷優(yōu)先級都有啥?如何設(shè)置?
單片機的默認中斷優(yōu)先級
評論