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