鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 6.7 單片機(jī)中斷的優(yōu)先級(jí)
2.1 單片機(jī)內(nèi)部資源(內(nèi)部結(jié)構(gòu))
5.1 單片機(jī)邏輯電路與邏輯運(yùn)算
6.1 C 語(yǔ)言數(shù)組
5.7 單片機(jī)數(shù)碼管的靜態(tài)顯示
4.8 單片機(jī) LED 流水燈程序[詳細(xì)]
6.7 單片機(jī)中斷的優(yōu)先級(jí)
5.2 單片機(jī)定時(shí)器介紹
1. 如何學(xué)習(xí)單片機(jī)
1.3 單片機(jī)學(xué)習(xí)的準(zhǔn)備工作
4.3 C 語(yǔ)言基本運(yùn)算符
5.5 單片機(jī)中 LED 數(shù)碼管的介紹
2.6 第一個(gè)單片機(jī)程序(C 語(yǔ)言編寫(xiě))
3.5 單片機(jī)中 74HC138 三八譯碼器的應(yīng)用
3.2 單片機(jī)中去耦電容的應(yīng)用
6.4 單片機(jī)數(shù)碼管動(dòng)態(tài)顯示程序[帶解釋]
1.5 Keil uVision4簡(jiǎn)單使用教程
第一章問(wèn)題匯總
1.2 如何學(xué)習(xí)單片機(jī)
4.4 C 語(yǔ)言 for 循環(huán)語(yǔ)句
6.5 單片機(jī)數(shù)碼管顯示消隱
單片機(jī)上的發(fā)光二極管(LED 燈)
5. 單片機(jī)定時(shí)器與數(shù)碼管基礎(chǔ)
5.3 單片機(jī)定時(shí)器的寄存器
5.6 單片機(jī)數(shù)碼管的真值表
6.2 C 語(yǔ)言 if 語(yǔ)句
3.3 三極管的的概念及其工作原理
4. C 語(yǔ)言基礎(chǔ)及流水燈的實(shí)現(xiàn)
點(diǎn)亮你的 LED 燈
4.6 C 語(yǔ)言函數(shù)的簡(jiǎn)單介紹
2.4 51單片機(jī)特殊功能寄存器和位定義
6.6 單片機(jī)中斷系統(tǒng)
3.1 電磁干擾 EMI
4.1 二進(jìn)制、十進(jìn)制和十六進(jìn)制
4.5 C 語(yǔ)言 while 循環(huán)語(yǔ)句
3. 單片機(jī)硬件基礎(chǔ)知識(shí)學(xué)習(xí)
2.5 使用 Keil uVision 新建一個(gè)工程
1.4 單片機(jī)開(kāi)發(fā)環(huán)境搭建--Keil uVision4安裝教程
4.7 單片機(jī)延時(shí)方法(Keil 軟件延時(shí))
6. 單片機(jī)的中斷與數(shù)碼管動(dòng)態(tài)顯示
3.6 單片機(jī) LED 燈閃爍程序
6.3 C 語(yǔ)言 switch 語(yǔ)句
1.1 學(xué)習(xí)什么單片機(jī)
4.2 C 語(yǔ)言變量類(lèi)型和范圍
5.4 單片機(jī)中定時(shí)器的應(yīng)用
2.7 將程序下載到單片機(jī)
3.4 單片機(jī)中三極管的應(yīng)用
2.2 單片機(jī)最小系統(tǒng)[配圖][超詳細(xì)]

6.7 單片機(jī)中斷的優(yōu)先級(jí)

中斷優(yōu)先級(jí)的內(nèi)容,大家先通過(guò)我的介紹大概了解一下即可,后邊實(shí)際應(yīng)用的時(shí)候我們?cè)僭敿?xì)理解。

在講中斷產(chǎn)生背景的時(shí)候,我們僅僅講了看電視和燒水的例子,但是實(shí)際生活當(dāng)中還有更復(fù)雜的,比如我正在看電視,這個(gè)時(shí)候來(lái)電話(huà)了,我要進(jìn)入接電話(huà)的“中斷”程序當(dāng)中去,就在接電話(huà)的同時(shí),聽(tīng)到了水開(kāi)的聲音,水開(kāi)的“中斷”也發(fā)生了,我們就必須要放下手上的電話(huà),先把煤氣關(guān)掉,然后再回來(lái)聽(tīng)電話(huà),最后聽(tīng)完了電話(huà)再看電視,這里就產(chǎn)生了一個(gè)優(yōu)先級(jí)的問(wèn)題。

還有一種情況,我們?cè)诳措娨暤臅r(shí)候,這個(gè)時(shí)候聽(tīng)到水開(kāi)的聲音,水開(kāi)的“中斷”發(fā)生了,我們要進(jìn)入關(guān)煤氣的“中斷”程序當(dāng)中,而在關(guān)煤氣的同時(shí),電話(huà)聲音響了,而這個(gè)時(shí)候,我們的處理方式是先把煤氣關(guān)閉,再去接聽(tīng)電話(huà),最后再看電視。

從這兩個(gè)過(guò)程中,我們可以得到一個(gè)結(jié)論,就是最最緊急的事情,一旦發(fā)生后,我們不管當(dāng)時(shí)處在哪個(gè)“程序”當(dāng)中,我們必須先去處理最最緊急的事情,處理完畢后再去解決其它事情。在我們的單片機(jī)程序當(dāng)中有時(shí)候也是這樣的,有一般緊急的中斷,有特別緊急的中斷,這取決于具體的系統(tǒng)設(shè)計(jì),這就涉及到中斷優(yōu)先級(jí)和中斷嵌套的概念,在本章節(jié)我們先簡(jiǎn)單介紹一下相關(guān)寄存器,不做例程說(shuō)明。

中斷優(yōu)先級(jí)有兩種,一種是搶占優(yōu)先級(jí),一種是固有優(yōu)先級(jí),先介紹搶占優(yōu)先級(jí)。來(lái)看表6-4和表6-5。

表6-4 IP——中斷優(yōu)先級(jí)寄存器的位分配(地址 0xB8、可位尋址)

7 6 5 4 3 2 1 0
符號(hào) -- -- PT2 PS PT1 PX1 PT0 PX0
復(fù)位值 -- -- 0 0 0 0 0 0

表6-5 IP——中斷優(yōu)先級(jí)寄存器的位描述

符號(hào) 描述
7 -- 保留
6 -- 保留
5 PT2 定時(shí)器2中斷優(yōu)先級(jí)控制位
4 PS 串口中斷優(yōu)先級(jí)控制位
3 PT1 定時(shí)器1中斷優(yōu)先級(jí)控制位
2 PX1 外部中斷1中斷優(yōu)先級(jí)控制位
1 PT0 定時(shí)器0中斷優(yōu)先級(jí)控制位
0 PX0 外部中斷0中斷優(yōu)先級(jí)控制位

IP 這個(gè)寄存器的每一位,表示對(duì)應(yīng)中斷的搶占優(yōu)先級(jí),每一位的復(fù)位值都是0,當(dāng)我們把某一位設(shè)置為1的時(shí)候,這一位的優(yōu)先級(jí)就比其它位的優(yōu)先級(jí)高了。比如我們?cè)O(shè)置了 PT0 位為1后,當(dāng)單片機(jī)在主循環(huán)或者任何其它中斷程序中執(zhí)行時(shí),一旦定時(shí)器 T0 發(fā)生中斷,作為更高的優(yōu)先級(jí),程序馬上就會(huì)跑到 T0 的中斷程序中來(lái)執(zhí)行。反過(guò)來(lái),當(dāng)單片機(jī)正在 T0中斷程序中執(zhí)行時(shí),如果有其它中斷發(fā)生了,還是會(huì)繼續(xù)執(zhí)行 T0 中斷程序,直到把 T0 中的中斷程序執(zhí)行完畢以后,才會(huì)去執(zhí)行其它中斷程序。

當(dāng)進(jìn)入低優(yōu)先級(jí)中斷中執(zhí)行時(shí),如又發(fā)生了高優(yōu)先級(jí)的中斷,則立刻進(jìn)入高優(yōu)先級(jí)中斷執(zhí)行,處理完高優(yōu)先級(jí)級(jí)中斷后,再返回處理低優(yōu)先級(jí)中斷,這個(gè)過(guò)程就叫做中斷嵌套,也稱(chēng)為搶占。所以搶占優(yōu)先級(jí)的概念就是,優(yōu)先級(jí)高的中斷可以打斷優(yōu)先級(jí)低的中斷的執(zhí)行,從而形成嵌套。當(dāng)然反過(guò)來(lái),優(yōu)先級(jí)低的中斷是不能打斷優(yōu)先級(jí)高的中斷的。

那么既然有搶占優(yōu)先級(jí),自然就也有非搶占優(yōu)先級(jí)了,也稱(chēng)為固有優(yōu)先級(jí)。在表6-3中的最后一列給出的就是固有優(yōu)先級(jí),請(qǐng)注意,在中斷優(yōu)先級(jí)的編號(hào)中,一般都是數(shù)字越小優(yōu)先級(jí)越高。從表中可以看到一共有1~6共6級(jí)的優(yōu)先級(jí),這里的優(yōu)先級(jí)與搶占優(yōu)先級(jí)的一個(gè)不同點(diǎn)就是,它不具有搶占的特性,也就是說(shuō)即使在低優(yōu)先級(jí)中斷執(zhí)行過(guò)程中又發(fā)生了高優(yōu)先級(jí)的中斷,那么這個(gè)高優(yōu)先級(jí)的中斷也只能等到低優(yōu)先級(jí)中斷執(zhí)行完后才能得到響應(yīng)。既然不能搶占,那么這個(gè)優(yōu)先級(jí)有什么用呢?

答案是多個(gè)中斷同時(shí)存在時(shí)的仲裁。比如說(shuō)有多個(gè)中斷同時(shí)發(fā)生了,當(dāng)然實(shí)際上發(fā)生這種情況的概率很低,但另外一種情況就常見(jiàn)的多了,那就是出于某種原因我們暫時(shí)關(guān)閉了總中斷,即 EA=0,執(zhí)行完一段代碼后又重新使能了總中斷,即 EA=1,那么在這段時(shí)間里就很可能有多個(gè)中斷都發(fā)生了,但因?yàn)榭傊袛嗍顷P(guān)閉的,所以它們當(dāng)時(shí)都得不到響應(yīng),而當(dāng)總中斷再次使能后,它們就會(huì)在同時(shí)請(qǐng)求響應(yīng)了,很明顯,這時(shí)也必需有個(gè)先后順序才行,這就是非搶占優(yōu)先級(jí)的作用了——如表6-3中,誰(shuí)優(yōu)先級(jí)最高先響應(yīng)誰(shuí),然后按編號(hào)排隊(duì),依次得到響應(yīng)。

搶占優(yōu)先級(jí)和非搶占優(yōu)先級(jí)的協(xié)同,可以使單片機(jī)中斷系統(tǒng)有條不紊的工作,既不會(huì)無(wú)休止的嵌套,又可以保證必要時(shí)緊急任務(wù)得到優(yōu)先處理。在后續(xù)的學(xué)習(xí)過(guò)程中,中斷系統(tǒng)會(huì)與我們?nèi)缬半S形,處處都有它的身影,隨著學(xué)習(xí)的深入,相信你對(duì)它的理解也會(huì)更加的深入。