說最基本的,老的51單片機(jī)(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套?,F(xiàn)在很多擴(kuò)展的51單片機(jī)已經(jīng)有4個(gè)優(yōu)先級(jí)(或更多)和更多的中斷源了。
在說到中斷之前,我先來定義一下優(yōu)先級(jí),明白了什么是優(yōu)先級(jí),后面的闡述就容易明白了。實(shí)際上很多人都是混淆了優(yōu)先級(jí)的含義,所以才覺得糊里糊涂。
中斷的優(yōu)先級(jí)有兩個(gè):查詢優(yōu)先級(jí)和執(zhí)行優(yōu)先級(jí)。
什么是查詢優(yōu)級(jí)呢?我們從datasheet或書上看到的默認(rèn)(IP寄存器不做設(shè)置,上電復(fù)位后為00H)的優(yōu)先級(jí):
外部中斷0 > 定時(shí)/計(jì)數(shù)器0 > 外部中斷1 > 定時(shí)/計(jì)數(shù)器1 > 串行中斷
或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART
或 PX0>PT0>PX1>PT1>PS>......
其實(shí)都是查詢優(yōu)級(jí)。首先查詢優(yōu)先級(jí)是不可以更改和設(shè)置的。這是一個(gè)中斷優(yōu)先權(quán)排隊(duì)的問題。是指多個(gè)中斷源同時(shí)產(chǎn)生中斷信號(hào)時(shí),中斷仲裁器選擇對(duì)哪個(gè)中斷源優(yōu)先處理的順序。而這與是否發(fā)生中斷服務(wù)程序的嵌套毫不相干。當(dāng)CPU查詢各個(gè)中斷標(biāo)志位的時(shí)候,會(huì)依照上述5個(gè)查詢優(yōu)先級(jí)順序依次查詢,當(dāng)數(shù)個(gè)中斷同時(shí)請(qǐng)求的時(shí)候,會(huì)優(yōu)先查詢到高優(yōu)查詢先級(jí)的中斷標(biāo)志位,但并不代表高查詢優(yōu)先級(jí)的中斷可以打斷已經(jīng)并且正在執(zhí)行的低查詢優(yōu)先級(jí)的中斷服務(wù)。
例如:當(dāng)計(jì)數(shù)器0中斷和外部中斷1(按查詢優(yōu)先級(jí),計(jì)數(shù)器0中斷>外部中斷1)同時(shí)到達(dá)時(shí),會(huì)進(jìn)入計(jì)時(shí)器0的中斷服務(wù)函數(shù);但是在外部中斷1的中斷服務(wù)函數(shù)正在服務(wù)的情況下,這時(shí)候任何中斷都是打斷不了它的,包括邏輯優(yōu)先級(jí)比它高的外部中斷0計(jì)數(shù)器0中斷。
而中斷的執(zhí)行優(yōu)先級(jí)就是你對(duì)IP寄存器的設(shè)置了。在2個(gè)優(yōu)先級(jí)的情況下,某位為1,則相應(yīng)的中斷源為高優(yōu)先級(jí);為0,則為低優(yōu)先級(jí)。