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