三、中断控制

三、中断控制

89C51中断系统有以下4个特殊功能寄存器:定时器控制寄存器TCON、串行口控制寄存器SCON、中断允许寄存器IE、中断优先级寄存器IP。其中,TCON和SCON只有一部分位用于中断控制。通过对以上各特殊功能寄存器的相关位进行置位或复位等操作,可实现各种中断控制功能。

1.中断请求标志

(1)TCON中的中断标志位。TCON为定时器/计数器T0和T1的控制寄存器,同时也锁存T0和T1的溢出中断标志及外部中断0和1的中断标志等。与中断有关的位如下。

各控制位的含义如下:

1)TF1:定时器/计数器T1的溢出中断请求标志位。当启动T1计数以后,T1从初值开始加1计数,计数器最高位产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。CPU响应中断时,硬件将自动对TF1清0。

2)TF0:定时器/计数器T0的溢出中断请求标志位。含义与TF1相同。

3)IE1:外部中断1的中断请求标志。当检测到外部中断1(P3.3引脚上)存在有效的中断请求信号时,由硬件使IE1置1。

4)IT1:外部中断1的中断触发方式控制位。

IT1=0时,外部中断l为电平触发方式。CPU在每一个机器周期S5P2期间采样外部中断1请求引脚的输入电平。若外部中断1请求为低电平,则使IE1置1;若外部中断1请求为高电平,则使IE1清0。

IT1=1时,外部中断1为边沿触发方式。CPU在每一个机器周期S5P2期间采样外部中断1请求引脚的输入电平。如果在相继的两个机器周期采样过程中,前一个机器周期采样到外部中断1请求为高电平,且后一个机器周期采样到外部中断1请求为低电平时,则使IE1置1。直到CPU响应该中断时,才由硬件使IE1清0。

5)IE0:外部中断0的中断请求标志。其含义与IE1类同。

6)IT0:外部中断0的中断触发方式控制位。其含义与IT1类同。

(2)SCON中的中断标志位。SCON为串行口控制寄存器,低2位用于锁存串行口的接收中断标志RI和发送中断标志TI,其含义如下:

1)TI:串行口发送中断请求标志。CPU将一个数据写入发送缓冲器SBUF时,就启动发送。每发送完一帧串行数据后,硬件置位TI。但CPU响应中断时,并不自动清除TI,必须在中断服务程序中由软件对TI清0。

2)RI:串行口接收中断请求标志。在串行口允许接收时,每接收完一个串行帧,硬件置位RI。同样,CPU响应中断时不会自动清除RI,必须由软件清0。

2.中断允许控制

89C51对中断源的开放或屏蔽是由中断允许寄存器IE控制的。IE的格式如下:

中断允许寄存器IE对中断的开放和关闭实现两级控制。所谓两级控制,就是有一个总的开关中断控制位EA(IE.7),当EA=0时,屏蔽所有的中断申请,即不接受任何中断源的中断请求;当EA=1时,CPU开放中断,但5个中断源还要由IE低5位的对应控制位的状态进行中断允许控制。IE中各位的含义如下:

(1)EA:中断允许总控制位。EA=0,屏蔽所有中断请求;EA=1,CPU开放中断。对各中断源的中断请求是否允许,还要取决于各中断源的中断允许控制位的状态。

(2)ES:串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。

(3)ET1:定时器/计数器T1的溢出中断允许位。ET1=0,禁止T1中断;ET1=1,允许T1中断。

(4)EX1:外部中断1中断允许位。EX1=0,禁止外部中断1中断;EX1=1,允许外部中断1中断。

(5)ET0:定时器/计数器T0的溢出中断允许位。ET0=0,禁止T0中断;ET0=1,允许T0中断。

(6)EX0:外部中断0中断允许位。EX0=0,禁止外部中断0中断;EX0=1,允许外部中断。

【例5-1】假设允许片内定时器/计数器T0中断,禁止或不改变其他中断。试根据假设条件设置IE的相应值。

解:采用字节传送指令完成如下:

禁止其他中断:

MOV IE, #82 H

不改变其他中断:

ORL IE, #82H

3.中断优先级控制

89C51有两个中断优先级。每一个中断请求源均可编程为高优先级中断或低优先级中断。89C51片内有一个中断优先级寄存器IP,其低5位PX0、PT0、PX1、PT1、PS分别为5个中断源的中断优先级控制位,其格式如下:

若某个控制位为1,则相应的中断源就规定为高级中断;反之,若某个控制位为0,则相应的中断源就规定为低级中断。

当CPU同时接收到几个同一优先级的中断请求时,优先响应哪个中断源则取决于内部硬件查询顺序,即自然优先级顺序,其排列如下:

【例5-2】已知某软件中对寄存器IE、IP设置如下:

MOV  IE, #8FH

MOV  IP, #06H

试说明此时该系统中断的状态。

解:(1)CPU中断允许。

(2)允许外部中断0、外部中断1、定时器/计数器0、定时器/计数器1,四个中断源的中断请求。

(3)定时器/计数器0和外部中断1为高优先级,外部中断0和定时器/计数器1为低优先级。四个中断源的中断优先次序为:定时器/计数器0>外部中断1>外部中断0>定时器/计数器1。