第六章 中断原理应用程序设计
6.1 中断系统的基本概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 中断源
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断)。
MCS-51单片机提供了5个中断源,其中两个为外部中断请求源 (P3.2)和(P3.3),两个片定时器/计数器T0和T1的溢出请求中断源TF0(TCON的第5位)和TF1(TCON的第7位),1个片串口发送或接收中断请求源TI(SCON的第1位)和RI(SCON的第0位)。
中断优先级
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
表6-4 MCS-51单片机中断源的自然优先级及入口地址
需要说明的是,为了便于用C语言编写单片机中断程序,C51编译器也支持51单片机的中断服务程序,而且用C语言编写中断服务程序,比用汇编语言方便的多。C语言编写中断服务函数的格式如下:
函数类型 函数名(形式参数列表)[interrupt n] [using m]
其中,interrupt后面的n是中断编号,取值围0~4,;using中的m表示使用的工作寄存器组号(如不声明,则默认用第0组)。
例如,定时器T0的中断函数可用如下方法编写: void Timer(void) interrupt 1 using 0
//定时器T0的中断服务函数,T0的中断编号为1,使用第0组工作寄存器 {
........//中断服务程序 }
6.2 中断系统的控制 定时器/计数器控制寄存器TCON
TCON的功能是接收外部中断源( 、)和定时器(T0、T1)送来的中断请求信号。字节地址为88H,可以进行位操作。表5-5列出了TCON的格式。
8FH TF1
8EH TR1
8DH TF0
8CH TR0
8BH IT0
8AH IT1
89H IE0
88H IT0
表6-5 定时器/计数器控制寄存器TCON的格式
?IT0和IT1分别为外部中断 和 的触发方式控制位,可以进行置位和复位。 ?IE0和IE1分别为外部中断 和 的中断请求标志位。 ?TF0和TF1分别为定时器/计数器T0和T1的中断请求标志。 ?TR0和TR1分别为定时器/计数器T0和T1的启动/停止位。
中断允许控制寄存器IE
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制。
表6-6 中断允许控制寄存器IE的格式
§ EX0(IE.0),外部中断0允许位;
§ ET0(IE.1),定时/计数器T0中断允许位; § EX1(IE.2),外部中断0允许位;
§ ET1(IE.3),定时/计数器T1中断允许位; § ES(IE.4),串行口中断允许位;
§ EA (IE.7), CPU中断允许(总允许)位。
中断优先级控制寄存器IP
MCS-51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
表6-7 中断优先级控制寄存器IP的格式