51微控制器的中斷優先順序及中斷巢狀

2022-05-14 07:57:53 字數 2160 閱讀 3750

說最基本的,老的51微控制器(80c51系列)有5個中斷源,2個優先順序,可以實現二級中斷服務巢狀。現在很多擴充套件的51微控制器已經有4個優先順序(或更多)和更多的中斷源了。

在說到中斷之前,我先來定義一下優先順序,明白了什麼是優先順序,後面的闡述就容易明白了。實際上很多人都是混淆了優先順序的含義,所以才覺得糊里糊塗。

中斷的優先順序有兩個:查詢優先順序和執行優先順序。

什麼是查詢優級呢?我們從datasheet或書上看到的預設(ip暫存器不做設定,上電復位後為00h)的優先順序:

外部中斷0 > 定時/計數器0 > 外部中斷1 > 定時/計數器1 > 序列中斷

或  int0,timer0,int1,timer1,serial port  或  int0、t0、int1、t1、uart 

或  px0>pt0>px1>pt1>ps>......

其實都是查詢優級。首先查詢優先順序是不可以更改和設定的。這是乙個中斷優先權排隊的問題。是指多個中斷源同時產生中斷訊號時,中斷仲裁器選擇對哪個中斷源優先處理的順序。而這與是否發生中斷服務程式的巢狀毫不相干。當cpu查詢各個中斷標誌位的時候,會依照上述5個查詢優先順序順序依次查詢,當數個中斷同時請求的時候,會優先查詢到高優查詢先級的中斷標誌位,但並不代表高查詢優先順序的中斷可以打斷已經並且正在執行的低查詢優先順序的中斷服務。

例如:當計數器0中斷和外部中斷1(按查詢優先順序,計數器0中斷》外部中斷1)同時到達時,會進入計時器0的中斷服務函式;但是在外部中斷1的中斷服務函式正在服務的情況下,這時候任何中斷都是打斷不了它的,包括邏輯優先順序比它高的外部中斷0計數器0中斷。

而中斷的執行優先順序就是你對ip暫存器的設定了。在2個優先順序的情況下,某位為1,則相應的中斷源為高優先順序;為0,則為低優先順序。 

關於中斷的優先順序有三條原則:

1、cpu同時接收到幾個中斷時,首先響應優先順序最高的中斷請求;

2、正在進行的中斷過程不能被新的同級或低行優優先順序的中斷請求所中斷;

3、正在進行的低行優優先順序中斷服務,能被高行優優先順序中斷請求中斷;

若:同一執行優先順序中的中斷申請不止乙個時,則有乙個中斷優先權排隊問題。同一執行優先順序的中斷優先權排隊,由中斷系統硬體確定的自然優先順序形成,優先權自高到低的順序即:

外部中斷0>定時/計數0>外部中斷1>定時/計數1>序列介面

例如:設定ip = 0x10,即設定串列埠中斷為最高優先順序,則串列埠中斷可以打斷任何其他的中斷服務函式實現巢狀,且只有串列埠中斷能打斷其他中斷的服務函式。若串列埠中斷沒有觸發,則其他幾個中斷之間還是保持邏輯優先順序,相互之間無法巢狀。

關於中斷巢狀。可以這樣說,當乙個中斷正在執行的時候,如果事先設定了中斷優先順序暫存器ip,那麼當乙個更高優先順序的中斷到來的時候會發生中斷巢狀,如果沒有設定則不會發生任何巢狀;如果有同乙個優先順序的中斷觸發,它並不是在「不斷的申請」,而是將它相應的中斷標誌位置即ie暫存器的某位置位,當cpu執行完當前中斷之後,按照查詢優先順序重新去查詢各個中斷標誌位,進入相應中斷。

要記住,沒有設定ip時,微控制器會按照查詢優先順序(或都說邏輯優先順序)來排隊進入服務。如果要想讓某個中斷優先響應, 則要設定ip,更改執行優先順序(或者說物理優先順序)。要注意的是,當設定了ip後,當低執行優先順序中斷在執行時,如果有高執行優先順序的中斷產生,則會巢狀呼叫進入高執行優先順序的中斷。如果你是用c語言寫的程式,並在中斷服務時 using 了寄存組,要注意,兩個不同執行優先順序的中斷服務程式不要 using 同一組暫存器。

看兩個問題,如下:

1 在各個中斷都是低優先順序的時候,如果定時器0的溢位進入中斷。在這個中斷處理的過程中,外部中斷0也被觸發了,那麼是不是要發生中斷巢狀?

2 如果定時器0發生中斷的時候,進入中斷處理程式,這個時候外部中斷1條件觸發條件滿足了。因為定時器0自然優先順序比外部中斷1高,那麼定時器0的中斷處理程式繼續執行。假設定時器中斷處理程式執行的過程中,外部中斷1的觸發。條件消失了,那麼等定時器0的中斷處理完後,程式還是會進入外部中斷1處理程式嗎?

答案1:在ip事先設定了外部中斷0的優先順序的情況下,cup會中止定時器0的中斷服務,進入外部中斷0服務程式,執行完以後再回到定時器0中斷服務程式。否則不會。

答案2:肯定會進入中斷的;外部中斷1的觸發條件滿足後會置位外部1的中斷標誌,即使後來外部中斷1的觸發條件消失了,也不會清除已置位的中斷標誌,所以等定時器0的中斷處理完後,程式判斷外部中斷的中斷標誌為1後依然會進入外部中斷1處理程式的,只有在外部中斷1處理程式中執行reti指令才會硬體清除外部中斷1的中斷標誌(這也正是為什麼中斷返回使用reti指令而不可以用ret替換的原因)...

51微控制器的中斷優先順序及中斷巢狀

說最基本的,老的51微控制器 80c51系列 有5個中斷源,2個優先順序,可以實現二級中斷服務巢狀。現在很多擴充套件的51微控制器已經有4個優先順序 或更多 和更多的中斷源了。在說到中斷之前,我先來定義一下優先順序,明白了什麼是優先順序,後面的闡述就容易明白了。實際上很多人都是混淆了優先順序的含義,...

0中斷優先順序 51微控制器核心的中斷及中斷向基礎知識

51核心的最基礎的中斷源請求有外部中斷 定時器中斷和串列埠中斷,這也是學習和開發者最長用的。當然還有其他的中斷源,比如adc spi pwm等。以外部中斷0為例,在程式設計中常使用的方式為 void int0 interrupt 0 using 1 在這裡特別做上筆記 其中前面的void int0 ...

0中斷優先順序 51微控制器中斷基本概念

在了解基本概念之前,先看三個問題 1.你想使用的中斷是哪個?2.你所希望的觸發條件是什麼?3.你希望在中斷之後做什麼?可以邊看邊思考,文章最後給出答案 微控制器在執行程式時,中斷也隨時有可能發生,但無論何時發生,只要一旦發生,微控制器將立即暫停當前程式,趕去處理中斷程式,處理完中斷程式後再返回剛才暫...