AT89S51的中断允许与中断优先级的控制

实现中断允许控制和中断优先级控制分别由特殊功能寄存器区中的中断允许寄存器IE和中断优先级寄存器IP来实现的 。下面介绍这两个特殊功能寄存器 。
中断允许寄存器IE
AT89S51的CPU对各中断源的开放或屏蔽 , 是由片内的中断允许寄存器IE控制的 。IE的字节地址为A8H , 可进行位寻址 , 其格式如下图所示 。
 
中断允许寄存器IE对中断的开放和关闭实现两级控制 。所谓两级控制 , 就是有一个总的开关中断控制位EA(IE.7位) , 当EA=O时 , 所有的中断请求被屏蔽 , CPU对任何中断请求都不接受 , 因此称EA为系统中断允许总开关控制位;当EA=1时 , CPU开放中断 , 但5个中断源的中断请求是否允许 , 还要由IE中的低5位所对应的5个中断请求允许控制位的状态来决定 。
IE中各位的功能如下:
(1)EA:中断允许总开关控制位 。
EA=0 , 所有的中断请求被屏蔽 。
EA=1 , 所有的中断请求被开放 。
(2)ES:串行口中断允许位 。
ES=0 , 禁止串行口中断 。
ES=1 , 允许串行口中断 。
(3)ET1:定时器/计数器Tl的溢出中断允许位 。
ET1=0 , 禁止Tl溢出中断 。
ETl=1 , 允许Tl溢出中断 。
(4)EXl:外部中断1中断允许位 。
EXl=0 , 禁止外部中断1中断 。
EXl=1 , 允许外部中断1中断 。
(5)ET0:定时器/计数器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的内容 , 可由位操作指令来实现(即SETB bit;CLR bit) , 也可用字节操作指令实现 。
举例如下:例1、若允许片内2个定时器/计数器中断 , 并禁止其他中断源的中断请求 , 请编写设置IE的相应程序段 。
(1)用位操作指令来编写如下程序段:
 
(2)用字节操作指令来编写:上述的两段程序对IE的设置是相同的 。
 
中断优先级寄存器lP
AT89S51的中断请求源有两个中断优先级 , 每一个中断请求源可由软件设置为高优先级中断或低优先级中断 , 也可实现两级中断嵌套 。所谓两级中断嵌套 , 就是AT89S51正在执行低优先级中断的服务程序时 , 可被高优先级中断请求所中断 , 待高优先级中断处理完毕后 , 再返回低优先级中断服务程序 。两级中断嵌套的过程如下图所示 。
 
关于各中断源的中断优先级关系 , 可以归纳为下面两条基本规则:
(1)低优先级可被高优先级中断 , 高优先级不能被低优先级中断 。
(2)任何一种中断(不管是高级还是低级)一旦得到响应 , 不会再被它的同级中断源所中断 。如果某一中断源被设置为高优先级中断 , 在执行该中断源的中断服务程序时 , 则不能被其他中断源的中断请求所中断 。
AT89S51的片内有一个中断优先级寄存器lP , 其字节地址为B8H , 可位寻址 。只要用程序改变其内容 , 即可进行各中断源中断优先级的设置 , IP寄存器的格式如下图所示 。
 
中断优先级寄存器IP各位的含义如下:
【AT89S51的中断允许与中断优先级的控制】(1)PS:串行口中断优先级控制位 。
PS=1 , 串行口中断为高优先级 。
PS=O , 串行口中断为低优先级 。
(2)PT1:定时器Tl中断优先级控制位 。
PTl=1 , 定时器Tl中断为高优先级 。
PTl=0 , 定时器Tl中断为低优先级 。
(3)PX1:外部中断1中断优先级控制位 。
PXl=1 , 外部中断1中断为高优先级 。
PXl=0 , 外部中断1中断为低优先级 。
(4)PT0:定时器T0中断优先级控制位 。
PT0=1 , 定时器T0中断为高优先级 。
PT0=0 , 定时器T0中断为低优先级 。
(5)PX0:外部中断0中断优先级控制位 。
PX0=1 , 外部中断0中断为高优先级 。
PX0=0 , 外部中断0中断为低优先级 。
中断优先级控制寄存器IP的各位都可由用户程序置1和清0 , 用位操作指令或字节操作指令可更新IP的内容 , 以改变各中断源的中断优先级 。
AT89S51复位以后 , IP的内容为0 , 各个中断源均为低优先级中断 。
下面简单介绍AT89S51的中断优先级结构 。AT89S51的中断系统有两个不可寻址的“优先级激活触发器”其中一个指示某高优先级的中断正在执行 , 所有后来的中断均被阻止;另一个触发器指示某低优先级的中断正在执行 , 所有同级的中断都被阻止 , 但不阻断高优先级的中断请求 。
在同时收到几个同一优先级的中断请求时 , 哪一个中断请求能优先得到响应 , 取决于内部的查询顺序 。这相当于在同一个优先级内 , 还同时存在另一个辅助优先级结构 , 其查询顺序见下表 。
 
同级中断的查询次序
由此可见 , 各中断源在同一个优先级的条件下 , 外部中断O的中断优先权最高 , 串行口中断的优先权最低 。
例2、设置IP寄存器的初始值 , 使AT89S51的两个外中断请求为高优先级 , 其他中断请求为低优先级 。
(1)用位操作指令
 
(2)用字节操作指令

    推荐阅读