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