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