中断系统
中断请求源
中断请求标志寄存器
TCON寄存器
SCON寄存器
定时器2的控制寄存器T2CON
中断允许与中断优先级的控制
中断允许寄存器IE
中断优先级寄存器IP
响应中断请求的条件
中断响应的过程
外部中断的响应时间
外部中断的触发方式选择
电平触发方式
跳沿触发方式
中断请求的撤销
中断技术主要用于实时监测与控制,要求单片机能及时地响应中断请求源提出的服务请求,并作出快速响应、及时处理。这是由片内的中断系统来实现的。
当中断请求源发出中断请求时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。
中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。
如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上。
采用中断技术完全消除了单片机在查询方式中的等待现象,大大地提高了单片机的工作效率和实时性
AT89S51中断系统结构
中断系统结构图如图所示。
中断系统有6个中断请求源(简称中断源),两个中断优先级,可实现两级中断服务程序嵌套。
每一中断源可用软件独立控制为允许中断或关中断状态,中断优先级均可用软件来设置。
由图可见,AT89S52中断系统共有6个中断请求源:
(1)INT0*—外部中断请求0,中断请求信号由INT0*脚输入,中断请求标志为IE0。
(2)INT1*—外部中断请求1,中断请求信号由INT1*脚输入,中断请求标志为IE1。
(3)定时器/计数器T0计数溢出发出的中断请求,中断请求标志为TF0。
(4)定时器/计数器T1计数溢出发出的中断请求,中断请求标志为TF1。
(5)串行口中断请求,中断请求标志为发送中断TI或接收中断RI。
(6)T2的中断请求源,含有计数溢出(TF2)和“捕捉”(EXF2)两种中断请求标志,经或门共用一个中断矢量。两种中断触发是由T2的两种不同工作方式决定的。
6个中断请求源的中断请求标志分别由TCON 、SCON和T2CON的相应位锁存。
为定时器/计数器的控制寄存器,字节地址为88H,可位寻址。特殊功能寄存器TCON的格式如图所示。
TCON各标志位功能如下:
(1)TF1—定时器/计数器T1的溢出中断请求标志位。
当T1计数产生溢出时,由硬件使TF1置“1”,向CPU申请中断。CPU响应TF1中断时,TF1标志由硬件自动清“0”,TF1也可由软件清“0”。
(2)TF0—定时器/计数器T0的溢出中断请求标志位,功能与TF1类似。
(3)IE1—外部中断请求1的中断请求标志位。
(4)IE0—外部中断请求0中断请求标志位,功能与IE1类似。
(5)IT1—选择外部中断请求1为跳沿触发还是电平触发。
IT1=0,电平触发方式,引脚 上低电平有效,并把IE1置“1”。转向中断服务程序时,由硬件自动把IE1清“0”。
IT1=1,跳沿触发方式,加到引脚 上的外部中断请求输入信号电平从高到低的负跳变有效,并把IE1置“1”。转向中断服务程序 时,由硬件自动把IE1清“0”。
(6)IT0—选择外部中断请求0为跳沿触发方式还是电平触发方式,其意义与IT1类似。
AT89S52复位后,TCON被清“0”,6个中断源的中断请求标志均为0。
TR1(D6位)、TR0(D4位)这2位与中断系统无关,将在第5章定时器/计数器中介绍。
串行口控制寄存器,字节地址为98H,可位寻址。
低二位锁存串行口的发送中断和接收中断的中断请求标志TI和RI,格式如图4-4所示。
各标志位的功能:
(1)TI—串行口的发送中断请求标志位。每发送完一帧串行数据后,TI自动置“1”。TI标志必须由软件清“0”。
(2)RI—串行口接收中断请求标志位。串行口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。必须在中断服务程序中用指令对RI清“0”。
特殊功能寄存器T2CON的字节地址为C8H,可位寻址,位地址为C8H~CFH。格式见图。
T2CON中的最高两位为定时器/计数器T2的中断请求标志位TF2和EXF2。
(1)TF2(D7):当T2的计数器(TL2、TH2)计数计满溢出回0时,由内部硬件置位TF2(寄存器T2CON.7),向CPU发出中断请求。但是当RCLK位或TCLK位为1时将不予置位。本标志位必须由软件清0。
(2)EXF2(D6):当由引脚T2EX(P1.1脚)上的负跳变引起“捕捉”或“重新装载”且EXEN2位为1,则置位EXF2标志位(寄存器T2CON.6),向CPU发出中断请求。
上述两种中断请求,在满足中断响应条件时,CPU都将响应其中断请求,转向同一个中断矢量地址进行中断处理。因此,必须在T2的中断服务程序中对TF2和EXF2两个中断请求标志位进行查询,然后正确转入对应的中断处理程序。中断结束后,中断请求标志位TF2或EXF2必须由软件清0。
中断允许控制由中断允许寄存器IE控制。
中断优先级控制由中断优先级寄存器IP控制。
AT89S52的对各中断源的开放或屏蔽,是由中断允许寄存器IE控制的。
IE字节地址为A8H,可位寻址,格式如图所示。
IE对中断的开放和关闭实现两级控制。
有一个总的开关中断控制位EA(IE.7位),
EA=0时,所有的中断请求被屏蔽;
EA=1时,开放中断,但6个中断源的中断请求是否允许,还要由IE中的低6位所对应的6个中断请求允许控制位的状态来决定(图4-6)。
IE中各位功能如下:
(1)EA—中断允许总开关控制位。
EA=0,所有的中断请求被屏蔽。
EA=1,所有的中断请求被开放。
(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,允许外部中断0中断。
(7)EX0——外部中断0中断允许位。
EX0=0,禁止外部中断0中断。
EX0=1,允许外部中断0中断。
AT89S52复位以后,IE被清“0”,所有的中断请求被禁止。IE中与各个中断源相应的位可用指令置“1”或清“0”,即可允许或禁止各中断源的中断申请。若使某一个中断源被允许中断,除了IE相应的位被置“1”外,还必须使EA位置“1”,即EA位置“1”为中断请求的必要条件。
改变IE的内容,可由位操作指令来实现(即SETB bit;CLR bit),也可用字节操作指令实现。 AT89S51复位以后,IE被清“0”,所有中断请求被禁止。IE中与各个中断源相应的位可用指令置“1”或清“0”。
AT89S52的中断请求源有两个中断优先级,由软件分别设置为高优先级中断或低优先级中断,可实现:两级中断嵌套
AT89S52正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。两级中断嵌套的过程如图所示。
各中断源的中断优先级关系,可归纳为两条基本规则:
(1)低优先级可被高优先级中断,高优先级不能低优先级中断。如果某一中断源被设置为高优先级中断,则不能被任何其他的中断源的中断请求所中断。
(2)任何一种中断一旦得到响应,不会再被它的同级中断源所中断。
中断优先级寄存器IP,其字节地址为B8H,可位寻址。只要用程序改变其内容,可进行各中断源中断优先级的设置,IP寄存器的格式如图所示。
中断优先级寄存器IP各位的含义如下:
(1)PT2—定时器T2中断优先级控制位
(2)PS—串行口中断优先级控制位
(3)PT1—定时器T1中断优先级控制位
(4)PX1—外部中断1中断优先级控制位
(5)PT0—定时器T0中断优先级控制位
(6)PX0—外部中断0中断优先级控制位
1:高优先级
0:低优先级
中断优先级控制寄存器IP用位操作指令或字节操作指令可更新IP的内容,以改变中断优先级。
AT89S52复位以后,IP的内容为0,各个中断源均为低优先级中断。
AT89S52的中断系统有两个不可寻址的“优先级激活触发器。
一个指示某高优先级的中断正在执行,所有后来的中断均被阻止;另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。
在同时收到几个同优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序见表
由此可见,各中断源在相同优先级的条件下,外部中断0的中断优先权最高,T2溢出中断或EXF2中断的中断优先权最低。
中断请求被响应,必须满足以下必要条件:
(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。
(2)该中断源发出中断请求,即对应的中断请求标志为“1”。
(3)该中断源的中断允许位EA=1,即该中断被允许。
(4)无同级或更高级中断正在被服务。
当CPU查询到有效的中断请求时,在满足上述条件时,紧接着就进行中断响应。
首先由硬件自动生成一条长调用指令“LCALL addr16”。就是程序存储区中相应的中断入口地址。
例如,对于外部中断1的响应,硬件自动生成的长调用指令为
LCALL 0013H
首先将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。
各中断源服务程序的入口地址(也称中断矢量)是固定的 ,如表所示。
两个中断入口间只相隔8字节,难以安放一个完整的中断服务程序。因此,通常在中断入口地址处放置一条无条件转移指令,使程序执行转向中断服务程序入口。
中断响应是有条件的,当遇到下列三种情况之一时,中断响应被封锁:
(1)CPU正在处理同级或更高优先级的中断。
(2)所查询的机器周期不是当前正在执行指令的最后一个机器周期。只有在当前指令执行完毕后,才能进行中断响应,以确保当前指令执行的完整性。
(3)正在执行的指令是RETI或是访问IE或IP的指令。因为按照AT89S52中断系统的规定,在执行完这些指令后,需要再执行完一条指令,才能响应新的中断请求。
如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能对中断进行响应。
使用外部中断时,需考虑从外部中断请求到转向中断入口地址所需的时间。
外部中断的最短响应时间为3个机器周期。其中中断请求标志位查询占1个机器周期,而这个机器周期恰好处于指令的最后一个机器周期。在这个机器周期结束后,中断即被响应,CPU接着执行一条硬件子程序调用指令LCALL到相应中断服务程序入口,需要2个机器周期。
外部中断响应的最长时间为8个机器周期。在CPU进行中断标志查询时,刚好才开始执行RETI或访问IE或IP的指令,需执行完指令再继续执行一条指令后,才响应中断。
执行RETI或访问IE或IP的指令,最长需要2个机器周期。
接着再执行一条指令,最长指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。再加上硬件子程序调用指令LCALL的执行,需要2个机器周期,所以,外部中断响应的最长时间为8个机器周期。
如果已经在处理同级或更高级中断,外部中断请求的响应时间取决于正在执行的中断服务程序的处理时间,这种情况下,响应时间就无法计算了。
这样,在一个单一中断的系统里,AT89S52单片机对外部中断请求的响应时间总是在3~8个机器周期之间。
两种触发方式:电平触发方式和跳沿触发方式。
外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入引脚的电平变化而变化。
在中断服务程序返回之前,外部中断请求输入必须无效(即外部中断请求输入已由低电平变为高电平),否则会再次响应中断。
所以本方式适合于外部中断以低电平输入且中断服务程序能清除外部中断请求源(即外中断输入电平又变为高电平)的情况。
外部中断申请触发器能锁存外部中断输入线上的负跳变。即使不能响应,中断请求标志不丢失。
相继连续两次采样,一个机器周期为高,下一个机器周期采样为低,则中断申请触发器置1,直到CPU响应此中断时,才清0。
输入的负脉冲宽度至少保持12个时钟周期,才能被采样到。适合于以负脉冲形式输入的外部中断请求。
某个中断请求被响应后,就存在着一个中断请求的撤销问题。
1.定时器/计数器T0、T1中断请求的撤销
硬件会自动把中断请求标志位(TF0或TF1)清0,自动撤销。
2.外部中断请求的撤销
(1)跳沿方式外部中断请求的撤销
包括两项:中断标志位清0和外中断信号的撤销。
中断标志位清0是在中断响应后由硬件自动完成的。
外中断请求信号的撤销,由于跳沿信号过后也就消失了,自动撤销。
(2)电平方式外部中断请求的撤销
电平方式外中断请求的撤销,其中中断请求标志自动撤销,但中断请求信号的低电平可能继续存在,为此,除了标志位清“0”之外,还需在中断响应后把中断请求信号输入引脚从低电平强制改变为高电平,如图4-9所示。
由图4-9,用D触发器锁存外来的中断请求低电平,并通过D触发器的输出端Q接到INT0*(或 INT1* )。所以,增加的D触发器不影响中断请求。
中断响应后,利用D触发器的SD端接AT89S51的P1.0端。因此,只要P1.0端输出一个负脉冲就可以使D触发器置“1”,撤销低电平的中断请求信号。
负脉冲可在中断服务程序中增加如下指令:
ORL P1,#01H ;P1.0为“1”
ANL P1,#0FEH ;P1.0为“0”
ORL P1,#01H ;P1.0为“1”
3.串行口中断请求的撤销
响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位,以判定是接收操作还是发送操作,然后才清除。所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:
CLR TI ;清TI标志位
CLR RI ;清RI标志位
4.定时器/计数器T2中断请求的撤销
定时器/计数器T2的中断请求包括两种:TF2和EXF2。
上述两种中断请求,在满足中断响应条件时,CPU都将响应其中断请求,转向同一个中断矢量地址。因此,必须在T2的中断服务程序中对TF2和EXF2两个中断请求标志位进行查询,然后正确转入对应的中断处理程序。
中断结束后,中断请求标志位TF2或EXF2必须由软件清0。所以定时器/计数器T2中断请求的撤销只能使用软件的方法,在中断服务程序返回前完成。