8051單片機(jī)原理
8031、8751AH和89C51,提供了5個中斷源:即2個外部中斷、兩個計(jì)時器中斷和串列口中斷。 8052AH則除了以上5個中斷外另增加了第六個中斷:那就是第三個計(jì)時器/計(jì)數(shù)器。底下僅將中斷結(jié)構(gòu)作一概略性的介紹。
中斷允許暫存器(INTERRUPT ENABLES)
EA | - | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA | IE.7 | 如果EA=0,禁止所有的中斷,EA=1時,各中斷是否作用,由各允許位決定 |
- | IE.6 | 不能使用 |
ET2 | IE.5 | 允許Timer2溢位或補(bǔ)入中斷(8052) |
ES | IE.4 | 允許串行I/O |
ET1 | IE.3 | 允許Timer1 |
EX1 | IE.2 | 允許INT1 |
ET0 | IE.1 | 允許Timer0 |
EX0 | IE.0 | 允許INT0 |
透過設(shè)定或清除在SFR里名為IE(Interrupt Enable)暫存器里的位元,每個中斷源都可以被各別的(Enable)或禁止(DISABLE)。這個暫存器(IE)也包含有一個整體禁止位元,它可以被清除,以禁止所有的中斷。
中斷優(yōu)先權(quán)(Interrupt Priority)
- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
IE.7 | 不能使用 | |
- | IE.6 | 不能使用 |
PT2 | IE.5 | 定義Timer2優(yōu)先權(quán)(8052) |
PS | IE.4 | 定義串行I/O優(yōu)先權(quán) |
PT1 | IE.3 | 定義Timer1優(yōu)先權(quán) |
PX1 | IE.2 | 定義INT1優(yōu)先權(quán) |
PT0 | IE.1 | 定義Timer0優(yōu)先權(quán) |
PX0 | IE.0 | 定義INT0優(yōu)先權(quán) |
每個中斷源可透過設(shè)定或清除SFR內(nèi)名為IP(Interrupt Priority)的暫存器內(nèi)的某些位元,可個別的將它面劃到兩層優(yōu)先權(quán)的一層里,較低優(yōu)先權(quán)的中斷可以被較高優(yōu)先權(quán)的中斷所中斷,但并不能被另一個低優(yōu)先權(quán)中斷。而高優(yōu)先權(quán)中斷就不能被其它中斷源中斷。如果有兩個不同優(yōu)先權(quán)層次的中斷同時到達(dá)時,則較高優(yōu)先權(quán)的中斷要求先被服務(wù)。如果相同優(yōu)先層次的中斷同時到達(dá)時,則可以用內(nèi)部的輪詢(polling)順序決定那一個要求先被服務(wù),因此在每個優(yōu)先層次里有一個次優(yōu)先權(quán)結(jié)構(gòu)由輪詢順序來決定。
IE和IP暫存器及輪詢順序如何動作?
以決定任何中斷發(fā)生時那一個會被優(yōu)先服務(wù)。中斷工作會在每個機(jī)械周期的狀態(tài)5(S5)時,所有的中斷旗號都被鎖入中斷控制系統(tǒng)中,這個取樣信號會在下一個機(jī)械周期時被加以檢查,如果有允許的中斷,它的旗號被發(fā)現(xiàn)設(shè)定"1",此時中斷系統(tǒng)就產(chǎn)生一個LCALL至程序記憶體的對應(yīng)位址。但有某些情況會禁止中斷的產(chǎn)生,即相同或較高優(yōu)先權(quán)的中斷正在執(zhí)行時。
硬體所產(chǎn)生的LCALL動作會使得目前的程序計(jì)數(shù)器值被推入(push)堆疊區(qū),然后將服務(wù)程序的起始位址載入PC。如前面所述每個中斷服務(wù)程序都有一固定的起始位址。中斷發(fā)生時僅有程序計(jì)數(shù)器(PC)被推入堆疊區(qū),而PSW或任何一個暫存器都沒有放入堆疊區(qū)。僅PC被推入堆疊區(qū)保存起來,這使得寫程序的人可以自己決定要花多少時間去保存其它的暫存器,雖然這會增加程序的負(fù)擔(dān),但這樣,可增快中斷響應(yīng)時間。在許多的中斷功能里,例如控制應(yīng)用時,只要將口里的接腳反相、或重新載入計(jì)時器、或讀入或?qū)戀Y料至列口緩沖區(qū)時,這種作法通常可以比其它的CPU還短的時間完成中斷服務(wù)的工作。