<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機的中斷優(yōu)先級及中斷嵌套

51單片機的中斷優(yōu)先級及中斷嵌套

作者: 時(shí)間:2013-05-30 來(lái)源:網(wǎng)絡(luò ) 收藏

說(shuō)最基本的,老的(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級,可以實(shí)現二級中斷服務(wù)嵌套?,F在很多擴展的已經(jīng)有4個(gè)優(yōu)先級(或更多)和更多的中斷源了。

在說(shuō)到中斷之前,我先來(lái)定義一下優(yōu)先級,明白了什么是優(yōu)先級,后面的闡述就容易明白了。實(shí)際上很多人都是混淆了優(yōu)先級的含義,所以才覺(jué)得糊里糊涂。

中斷的優(yōu)先級有兩個(gè):查詢(xún)優(yōu)先級和執行優(yōu)先級。

什么是查詢(xún)優(yōu)級呢?我們從datasheet或書(shū)上看到的默認(IP寄存器不做設置,上電復位后為00H)的優(yōu)先級:

外部中斷0 > 定時(shí)/計數器0 > 外部中斷1 > 定時(shí)/計數器1 > 串行中斷

或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART

或 PX0>PT0>PX1>PT1>PS>......

其實(shí)都是查詢(xún)優(yōu)級。首先查詢(xún)優(yōu)先級是不可以更改和設置的。這是一個(gè)中斷優(yōu)先權排隊的問(wèn)題。是指多個(gè)中斷源同時(shí)產(chǎn)生中斷信號時(shí),中斷仲裁器選擇對哪個(gè)中斷源優(yōu)先處理的順序。而這與是否發(fā)生中斷服務(wù)程序的嵌套毫不相干。當CPU查詢(xún)各個(gè)中斷標志位的時(shí)候,會(huì )依照上述5個(gè)查詢(xún)優(yōu)先級順序依次查詢(xún),當數個(gè)中斷同時(shí)請求的時(shí)候,會(huì )優(yōu)先查詢(xún)到高優(yōu)查詢(xún)先級的中斷標志位,但并不代表高查詢(xún)優(yōu)先級的中斷可以打斷已經(jīng)并且正在執行的低查詢(xún)優(yōu)先級的中斷服務(wù)。

例如:當計數器0中斷和外部中斷1(按查詢(xún)優(yōu)先級,計數器0中斷>外部中斷1)同時(shí)到達時(shí),會(huì )進(jìn)入計時(shí)器0的中斷服務(wù)函數;但是在外部中斷1的中斷服務(wù)函數正在服務(wù)的情況下,這時(shí)候任何中斷都是打斷不了它的,包括邏輯優(yōu)先級比它高的外部中斷0計數器0中斷。

而中斷的執行優(yōu)先級就是你對IP寄存器的設置了。在2個(gè)優(yōu)先級的情況下,某位為1,則相應的中斷源為高優(yōu)先級;為0,則為低優(yōu)先級。

關(guān)于中斷的優(yōu)先級有三條原則:

1、CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應優(yōu)先級最高的中斷請求;

2、正在進(jìn)行的中斷過(guò)程不能被新的同級或低行優(yōu)優(yōu)先級的中斷請求所中斷;

3、正在進(jìn)行的低行優(yōu)優(yōu)先級中斷服務(wù),能被高行優(yōu)優(yōu)先級中斷請求中斷;

若:同一執行優(yōu)先級中的中斷申請不止一個(gè)時(shí),則有一個(gè)中斷優(yōu)先權排隊問(wèn)題。同一執行優(yōu)先級的中斷優(yōu)先權排隊,由中斷系統硬件確定的自然優(yōu)先級形成,優(yōu)先權自高到低的順序即:

外部中斷0>定時(shí)/計數0>外部中斷1>定時(shí)/計數1>串行接口

例如:設置IP = 0x10,即設置串口中斷為最高優(yōu)先級,則串口中斷可以打斷任何其他的中斷服務(wù)函數實(shí)現嵌套,且只有串口中斷能打斷其他中斷的服務(wù)函數。若串口中斷沒(méi)有觸發(fā),則其他幾個(gè)中斷之間還是保持邏輯優(yōu)先級,相互之間無(wú)法嵌套。

關(guān)于??梢赃@樣說(shuō),當一個(gè)中斷正在執行的時(shí)候,如果事先設置了寄存器IP,那么當一個(gè)更高優(yōu)先級的中斷到來(lái)的時(shí)候會(huì )發(fā)生,如果沒(méi)有設置則不會(huì )發(fā)生任何嵌套;如果有同一個(gè)優(yōu)先級的中斷觸發(fā),它并不是在“不斷的申請”,而是將它相應的中斷標志位置即IE寄存器的某位置位,當CPU執行完當前中斷之后,按照查詢(xún)優(yōu)先級重新去查詢(xún)各個(gè)中斷標志位,進(jìn)入相應中斷。

要記住,沒(méi)有設置IP時(shí),單片機會(huì )按照查詢(xún)優(yōu)先級(或都說(shuō)邏輯優(yōu)先級)來(lái)排隊進(jìn)入服務(wù)。如果要想讓某個(gè)中斷優(yōu)先響應, 則要設置IP,更改執行優(yōu)先級(或者說(shuō)物理優(yōu)先級)。要注意的是,當設置了IP后,當低執行優(yōu)先級中斷在運行時(shí),如果有高執行優(yōu)先級的中斷產(chǎn)生,則會(huì )嵌套調用進(jìn)入高執行優(yōu)先級的中斷。如果你是用C語(yǔ)言寫(xiě)的程序,并在中斷服務(wù)時(shí) using 了寄存組,要注意,兩個(gè)不同執行優(yōu)先級的中斷服務(wù)程序不要 using 同一組寄存器。

看兩個(gè)問(wèn)題,如下:

1 在各個(gè)中斷都是低優(yōu)先級的時(shí)候,如果定時(shí)器0的溢出進(jìn)入中斷。在這個(gè)中斷處理的過(guò)程中,外部中斷0也被觸發(fā)了,那么是不是要發(fā)生?

2 如果定時(shí)器0發(fā)生中斷的時(shí)候,進(jìn)入中斷處理程序,這個(gè)時(shí)候外部中斷1條件觸發(fā)條件滿(mǎn)足了。因為定時(shí)器0自然優(yōu)先級比外部中斷1高,那么定時(shí)器0的中斷處理程序繼續執行。假設定時(shí)器中斷處理程序執行的過(guò)程中,外部中斷1的觸發(fā)。條件消失了,那么等定時(shí)器0的中斷處理完后,程序還是會(huì )進(jìn)入外部中斷1處理程序嗎?

答案1:在IP事先設置了外部中斷0的優(yōu)先級的情況下,CUP會(huì )中止定時(shí)器0的中斷服務(wù),進(jìn)入外部中斷0服務(wù)程序,執行完以后再回到定時(shí)器0中斷服務(wù)程序。否則不會(huì )。

答案2:肯定會(huì )進(jìn)入中斷的;外部中斷1的觸發(fā)條件滿(mǎn)足后會(huì )置位外部1的中斷標志,即使后來(lái)外部中斷1的觸發(fā)條件消失了,也不會(huì )清除已置位的中斷標志,所以等定時(shí)器0的中斷處理完后,程序判斷外部中斷的中斷標志為1后依然會(huì )進(jìn)入外部中斷1處理程序的,只有在外部中斷1處理程序中執行reti指令才會(huì )硬件清除外部中斷1的中斷標志(這也正是為什么中斷返回使用reti指令而不可以用ret替換的原因)...



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>