AT89S51的中斷允許與中斷優(yōu)先級的控制
實現(xiàn)中斷允許控制和中斷優(yōu)先級控制分別由特殊功能寄存器區(qū)中的中斷允許寄存器IE和中斷優(yōu)先級寄存器IP來實現(xiàn)的。下面介紹這兩個特殊功能寄存器。
中斷允許寄存器IE
AT89S51的CPU對各中斷源的開放或屏蔽,是由片內的中斷允許寄存器IE控制的。IE的字節(jié)地址為A8H,可進行位尋址,其格式如下圖所示。
中斷允許寄存器IE對中斷的開放和關閉實現(xiàn)兩級控制。所謂兩級控制,就是有一個總的開關中斷控制位EA(IE.7位),當EA=O時,所有的中斷請求被屏蔽,CPU對任何中斷請求都不接受,因此稱EA為系統(tǒng)中斷允許總開關控制位;當EA=1時,CPU開放中斷,但5個中斷源的中斷請求是否允許,還要由IE中的低5位所對應的5個中斷請求允許控制位的狀態(tài)來決定。
IE中各位的功能如下:
(1)EA:中斷允許總開關控制位。
EA=0,所有的中斷請求被屏蔽。
EA=1,所有的中斷請求被開放。
(2)ES:串行口中斷允許位。
ES=0,禁止串行口中斷。
ES=1,允許串行口中斷。
(3)ET1:定時器/計數(shù)器Tl的溢出中斷允許位。
ET1=0,禁止Tl溢出中斷。
ETl=1,允許Tl溢出中斷。
(4)EXl:外部中斷1中斷允許位。
EXl=0,禁止外部中斷1中斷。
EXl=1,允許外部中斷1中斷。
(5)ET0:定時器/計數(shù)器T0的溢出中斷允許位。
ET0=0,禁止T0溢出中斷。
ET0=1,允許T0溢出中斷。
(6)EX0:外部中斷0中斷允許位。
EX0=0,禁止外部中斷0中斷。
EX0=1,允許外部中斷0中斷。
AT89S51復位以后,IE被清0,所有的中斷請求被禁止。IE中與各個中斷源相應的位可用指令置1或清0,即可允許或禁止各中斷源的中斷申請。若使某一個中斷源被允許中斷,除了IE相應的位被置1外,還必須使EA位置1。
改變IE的內容,可由位操作指令來實現(xiàn)(即SETB bit;CLR bit),也可用字節(jié)操作指令實現(xiàn)。
舉例如下:例1、若允許片內2個定時器/計數(shù)器中斷,并禁止其他中斷源的中斷請求,請編寫設置IE的相應程序段。
(1)用位操作指令來編寫如下程序段:
(2)用字節(jié)操作指令來編寫:上述的兩段程序對IE的設置是相同的。
中斷優(yōu)先級寄存器lP
AT89S51的中斷請求源有兩個中斷優(yōu)先級,每一個中斷請求源可由軟件設置為高優(yōu)先級中斷或低優(yōu)先級中斷,也可實現(xiàn)兩級中斷嵌套。所謂兩級中斷嵌套,就是AT89S51正在執(zhí)行低優(yōu)先級中斷的服務程序時,可被高優(yōu)先級中斷請求所中斷,待高優(yōu)先級中斷處理完畢后,再返回低優(yōu)先級中斷服務程序。兩級中斷嵌套的過程如下圖所示。
關于各中斷源的中斷優(yōu)先級關系,可以歸納為下面兩條基本規(guī)則:
(1)低優(yōu)先級可被高優(yōu)先級中斷,高優(yōu)先級不能被低優(yōu)先級中斷。
(2)任何一種中斷(不管是高級還是低級)一旦得到響應,不會再被它的同級中斷源所中斷。如果某一中斷源被設置為高優(yōu)先級中斷,在執(zhí)行該中斷源的中斷服務程序時,則不能被其他中斷源的中斷請求所中斷。
AT89S51的片內有一個中斷優(yōu)先級寄存器lP,其字節(jié)地址為B8H,可位尋址。只要用程序改變其內容,即可進行各中斷源中斷優(yōu)先級的設置,IP寄存器的格式如下圖所示。
中斷優(yōu)先級寄存器IP各位的含義如下:
(1)PS:串行口中斷優(yōu)先級控制位。
PS=1,串行口中斷為高優(yōu)先級。
PS=O,串行口中斷為低優(yōu)先級。
(2)PT1:定時器Tl中斷優(yōu)先級控制位。
PTl=1,定時器Tl中斷為高優(yōu)先級。
PTl=0,定時器Tl中斷為低優(yōu)先級。
(3)PX1:外部中斷1中斷優(yōu)先級控制位。
PXl=1,外部中斷1中斷為高優(yōu)先級。
PXl=0,外部中斷1中斷為低優(yōu)先級。
(4)PT0:定時器T0中斷優(yōu)先級控制位。
PT0=1,定時器T0中斷為高優(yōu)先級。
PT0=0,定時器T0中斷為低優(yōu)先級。
(5)PX0:外部中斷0中斷優(yōu)先級控制位。
PX0=1,外部中斷0中斷為高優(yōu)先級。
PX0=0,外部中斷0中斷為低優(yōu)先級。
中斷優(yōu)先級控制寄存器IP的各位都可由用戶程序置1和清0,用位操作指令或字節(jié)操作指令可更新IP的內容,以改變各中斷源的中斷優(yōu)先級。
AT89S51復位以后,IP的內容為0,各個中斷源均為低優(yōu)先級中斷。
下面簡單介紹AT89S51的中斷優(yōu)先級結構。AT89S51的中斷系統(tǒng)有兩個不可尋址的“優(yōu)先級激活觸發(fā)器”其中一個指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止;另一個觸發(fā)器指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級的中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。
在同時收到幾個同一優(yōu)先級的中斷請求時,哪一個中斷請求能優(yōu)先得到響應,取決于內部的查詢順序。這相當于在同一個優(yōu)先級內,還同時存在另一個輔助優(yōu)先級結構,其查詢順序見下表。
同級中斷的查詢次序
由此可見,各中斷源在同一個優(yōu)先級的條件下,外部中斷O的中斷優(yōu)先權最高,串行口中斷的優(yōu)先權最低。
例2、設置IP寄存器的初始值,使AT89S51的兩個外中斷請求為高優(yōu)先級,其他中斷請求為低優(yōu)先級。
(1)用位操作指令
(2)用字節(jié)操作指令