3.5.2 单片机中断系统设计原理
中断是计算机的一项重要技术,它不仅与硬件有关还与软件有关。中断是指计算机执行正常程序时,系统外部或内部发生某一事件,请求计算机迅速去处理。计算机响应中断后,CPU暂时中止当前的工作,转去处理所发生的事件。完成中断服务程序后,再回到原来被中止的地方,继续原来的工作。
中断技术是CPU等待外设请求服务的一种I/O方式,对于外设何时发生中断请求,CPU事先并不知道,因此,中断具有随机性。计算机与外设间的数据传送、故障处理、实时控制等往往都采用中断系统。一个CPU资源要面向多个任务,会出现资源竞争,中断技术实质上是一种资源共享技术。中断系统的应用大大提高了计算机的系统效率,实现了CPU与外设分时操作和自动处理故障。
引起中断的原因或设备称为中断源,实现这种功能的部件称为中断系统。当多个中断源同时向CPU申请中断时,CPU将根据每个中断源的优先级,优先响应级别最高的中断请求。
1.中断的基本概念
(1)中断:CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,这个过程称为中断。
(2)中断源:中断源是指能发出中断请求,引起中断的装置或事件。
(3)中断处理过程:中断处理过程大致可分为中断请求、中断响应、中断服务和中断返回四步。
1)中断请求
中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器(IE)中)置“1”。对于中断请求,如果没有被阻止,CPU将在下一个机器周期的状态周期S1相应激活最高级中断请求。
2)中断响应
CPU查询(检测)到某中断标志为“1”,在满足中断响应条件下,响应中断。如果存在下列情况,则中断请求不予响应:
(1)CPU正处于一个同级的或更高级的中断服务中。
(2)当前指令是中断返回(RETI)或子程序返回(RET),访问IE、IP的指令。这些指令规定,必须在完成这些指令后,还应继续执行一条后面的指令才能够响应中断请求。
3)执行中断服务程序
中断服务程序应包含以下几个部分:
(1)保护现场;
(2)执行中断服务程序主体,完成相应的操作;
(3)恢复现场。
4)中断返回
在中断服务程序最后,必须安排一条中断返回指令RETI。
5)中断响应等待时间
若排除CPU正在响应同级或更高级的中断情况,中断响应等待时间为3~8个机器周期。
6)中断请求的清除
中断源发出中断请求,相应中断请求标志位置“1”。CPU响应中断后,必须清除中断请求“1”标志。否则,中断响应返回后,将再次进入该中断,引起死循环出错。
2.中断控制
(1)中断源与中断请求标志如表3.3所示。
表3.3 中断源与中断请求标志
(2)用户对中断的管理体现在以下两个方面。
①中断能否进行,即对构成中断的双方进行控制,也就是是否允许中断源发出中断申请和是否允许CPU响应中断,只有双方都被允许,中断才能进行。
用户对中断的这种管理是通过对特殊功能寄存器IE(中断允许控制寄存器)的设置来完成的。
②当有多个中断源有中断请求时,用户控制CPU按照自己的需要安排响应次序。
用户对中断的这种管理就是对特殊功能寄存器IP(中断优先级控制寄存器)的管理,一个中断源对应一位。如果对应位置“1”,则该中断源优先级别高;如果对应位置“0”,则该中断源优先级别低。当某几个中断源在特殊寄存器IP相应位同为“1”或同为“0”时,由内部查询确定其优先级,优先响应先查询的中断请求。CPU查询的顺序为
3.中断相关寄存器
与中断有关的特殊功能寄存器是中断允许控制寄存器(IE)、中断请求标志及定时器/计数器控制寄存器(TCON)、中断优先级控制寄存器(IP)及串行口控制寄存器(SCON)
中断相关寄存器如表3.4至表3.6所示。
表3.4 中断允许控制寄存器(IE)
说明:EA=1,CPU开中断;EX1=1,允许INT1中断;EA=0,CPU关中断;EX1=0,禁止INT1中断;EX0=1,允许INTO中断;ET1=1,允许T1中断;EX0=0,禁止INTO中断;ET1=0,禁止T1中断;ETO=1,允许T0中断;ET2=1,允许T2中断;ET0=0,禁止T0中断;ET2=0,禁止T2中断。
表3.5 定时器/计数器控制寄存器(TCON)
表3.6 中断优先级控制寄存器(IP)
1)中断允许控制寄存器(IE)
8XX51/8XX52单片机通过中断允许控制寄存器进行两级中断控制。EA位作为总控制位,以各中断源的中断允许位作为分控制位。但总控制位为禁止(EA=O)时,无论其他位是1或0,整个中断系统是关闭的。只有总控制位EA=1,才允许由各分控制位设定禁止或允许中断,因此,单片机复位时,IE的初值是(IE)=00H,中断系统处于禁止状态,即关中断。
2)中断请求标志及定时器/计数器控制寄存器(TCON)
这个寄存器既有中断控制功能,又有定时器/计数器的控制功能。其中与中断有关的控制位有6位:IEO、IE1、ITO、IT1、TFO、TF1。
IEX:外部中断请求标志位,在CPU采样到
引脚出现中断请求后,此位由硬件置1;在中断响应完成后转向中断服务程序时,再由硬件自动清0。这样就可以接收下一次外中断源的请求。
ITX:计数器0溢出标志位,当计数器0产生计数溢出时,该位由硬件置1;当转到中断服务程序时,再由硬件自动清0。这个标志位的使用有以下两种情况。
(1)当采用中断方式时,这个标志位作为中断请求标志位,该位为1,当CPU开中断时,则CPU响应中断。
(2)当采用查询方式时,这个标志位作为查询状态位。
3)中断优先级控制寄存器(IP)
通过对IP的编程,可以把5个(89S52为6个)中断源分别定义在两个优先级中。IP是中断优先级控制寄存器,可以进行位寻址。IP的低6位分别对应一个中断源;当某位为1时,相应的中断源定义为高优先级;当某位为0时,相应的中断源定义为低优先级。
89S51单片机的硬件把全部中断源在同一个优先级的情况下按下列顺序排列了优先权,优先级最高,定时器2优先级最低。
4)串行口控制寄存器(SCON)
该寄存器共有八字节地址,其中与中断有关的控制位有以下两位。
TI:串行口中断请求标志位。在发送完一帧串行数据后,由硬件中断置1,在转向中断服务程序后,用软件清0。
RI:串行口接收中断请求标志位。在接收完一帧串行数据后,由硬件中断置1,在转向中断服务程序后,用软件清0。
4.中断响应过程
中断请求→中断响应→中断服务→中断返回。
5.中断服务函数的定义
中断服务函数的语法格式为
返回值 函数名([参数])interrupt n[using m]
其中,interrupt n表示将函数声明为中断服务函数;n为中断源编号,可以是0~31的整数,不允许是带运算符的表达式;using m选项用于实现工作寄存器组的切换,m是中断服务程序中选用的工作寄存器组号(0~3),如果没有明确指定工作指寄存器组,则表示默认系统自动分配,范例如下。
函数名()interrupt n(n为中断源编号)
n通常取以下值:
0——外部中断0;
1——定时器/计数器0溢出中断;
2——外部中断1;
3——定时器/计数器1溢出中断;
4——串行口发送与接收中断;
5——定时器/计数器2中断。
举例如下。