中断系统是为使CPU具有对外界紧总事件的实时处理能力而设置的
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。
当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
STC89C51RC/RD+系列单片机提供了8个中断请求源,它们分别是:外部中断0(INTO)、定时器0中断、外部中断1(INTI)、定时器1中断、串(UART)中断、定时器2中断、外部中断2(INT2)、外部中断3(INT3)。所有的中断都具有4个中断优先级。用户可以用关总中断允许位(EAE.7)或相应中断的允许位来屏蔽所有的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请:每一个中断源可以用软件独立地控制为开中断或关中断状态:每个中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级及同优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。
中断源 | 中断向量地址 | 相同优先级内的查询次序 | 中断优先级设置(IPH,IP) | 优先级0(最低) | 优先级1 | 优先级2 | 优先级3 | 中断请求标志位 | 中断允许控制位 |
INT0 (外部中断0) | 0003H | 0(highest) | PX0H,PX0 | 0,0 | 0,1 | 1,0 | 1,1 | IE0 | EX0/EA |
Timer 0 | 000BH | 1 | PT0H,PT0 | 0,0 | 0,1 | 1,0 | 1,1 | TF0 | ET0/EA |
INT1 (外部中断1) | 0013H | 2 | PX1H,PX1 | 0,0 | 0,1 | 1,0 | 1,1 | IE1 | EX1/EA |
Timer 1 | 001BH | 3 | PT1H,PT1 | 0,0 | 0,1 | 1,0 | 1,1 | TF1 | ET1/EA |
UART | 0023H | 4 | PSH,PS | 0,0 | 0,1 | 1,0 | 1,1 | RI+TI | |
Timer 2 | 002BH | 5 | PT2H,PT2 | 0,0 | 0,1 | 1,0 | 1,1 | TF2+EXF2 | (ET2)/EA |
INT2 (外部中断2) | 0033H | 6 | PX2H,PX2 | 0,0 | 0,1 | 1,0 | 1,1 | IE2 | EX2/EA |
INT3 (外部中断3) | 003BH | 7(lowest) | PX3H,PX3 | 0,0 | 0,1 | 1,0 | 1,1 | IE3 | EX3/EA |
通过设置新增加的特殊功能寄存器IPH中的相应位,可将中断优先级设为四级,如果只设置IP或XICON,那么中断优先级就只有两级,与传统8051单片机两级中断优先级完全兼容。
如果使用C语言编程,中断查询次序号就是中断号,例如:
void | Int0_Routine(void) | interrupt 0 |
void | Timer0_Rountine(void) | interrupt 1 |
void | Intl_Routine(void) | interrupt 2 |
void | Timer1_Rountine(yoid) | interrupt 3 |
void | UART_Routine(void) | interrupt 4 |
void | Timer2 Routine(yoid) | interrupt 5 |
void | Int2 Routine(void) | interrupt 6 |
void | int3 Routine(void) | interrupt 7x |
中断允许寄存器EE和XICON
STC89C51RC/RD+系列单片机CPU对中斯源的开放或屏蔽,每一个中断源是否被允许中断,是由内部的中断允许寄存器E(地址为A8H)和XICON(地址为C0H)控制的,寄存器IE的格式如下:
EA: CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请,EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制:其次还受各中断源自己的中断允许控制位控制。
ET2: 定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断: ET2=0,禁止T2中断。
ES: 串行口1中断允许位。ES=1,允许串行口1中断: ES=0,禁止串行口1中断。
ET1: 定时/计数器T1的溢出中断允许位。ET1=1,允许T1中断:ET1=0,禁止T1中断。
EX1: 外部中断1中断允许位。EX1=1,允许外部中断1中断:EX1=0,禁止外部中断1中断,
ET0: T0的溢出中断允许位,ET0=1,允许T0中断;ET0=0禁止T0中断
EX0: 外部中断0中新允许位。EX0=1,允许中断;EX0=0禁止中断。