8051单片机的中断系统.docx
《8051单片机的中断系统.docx》由会员分享,可在线阅读,更多相关《8051单片机的中断系统.docx(28页珍藏版)》请在冰点文库上搜索。
8051单片机的中断系统
第6章8051单片机的中断系统
6.1微型计算机中断技术概述
6.1.1中断的概念
1.中断及中断技术的特点计算机在执行某一程序的过程中,由于计算机系统之外的某
种原因,有必要尽快地中止当前程序的运行,而去执行相应的处理程序,待处理程序结束后,再返回来继续执行被中止了的那个程序。
这种某一程序在执行过程中由于外界的原因,中间被打断的情况就称为“中断”。
“中断”类似于程序设计中的调用子程序,区别在于这些外部原因的发生是随机的,而子程序调用是程序设计人员事先安排好的。
能够打断当前程序的外部事件,被称为中断源。
中断属于一种对事件的实时处理过程,中断源可能随时迫使CPU停止当前正在执行的工作,转而去处理中断源指示的另一项工作,待后者完成后,再返回原来工作的“断点”处,继续原来的工作。
一个计算机一般具有多个中断源,这就存在中断优先权和中断嵌套的问题。
例如,一个人在读书时如果接了电话并且正在通话时,又有人敲门,由于敲门的优先权更高,这个人又“响应”这个敲门的中断申请,暂停通话,去与敲门人交谈;交谈完毕,接着原来的话茬继续通话,直到通话完毕,再返回书桌前继续看书。
这里,敲门的中断源就比电话的中断源优先权高,因此,出现了中断嵌套,即高级优先权的中断源可以打断低级中断优先权的中断服务程序,而去执行高级中断源的中断处理,直至该处理程序完毕,再返回接着执行低级中断源的中断服务程序,直至这个处理程序完毕,最后返回主程序。
计算机响应中断的条件是,计算机的CPU是处于开中断状态的,同时只能在一条指令执行完毕后才能响应中断请求。
2.中断功能利用中断技术,使计算机能够完成更多的功能。
(1)可实现高速CPU;
(2)可实现实时处理;
(3)实现故障的紧急处理;
(4)便于人机联系。
总之,随着计算机硬件软件技术的发展,中断技术也在不断丰富,所以中断功能已经成为评价计算机系统的整体性能的一项重要指标。
6.1.2中断处理过程
CPU响应中断源的中断请求后,就转去进行中断处理。
不同的中断源,其中断处理内
容可能不同,但其主要内容及顺序都如图6-1所示。
图6-1中断处理流程
从图6-1可以看到中断处理的过程,下面做几点补充说明:
1•保护现场与恢复现场为了使中断服务程序的执行不破坏CPU中寄存器或存储单元
的原有内容,以免在中断返回后影响主程序的运行,因此,要把CPU中有关寄存器或存储
单元的内容推入堆栈中保护起来,这就是所谓保护现场。
而在中断服务程序结束时和返回主
程序之前,则需要把保护起来的那些现场内容从堆栈中弹出,以便恢复寄存器或存储单元原
有的内容,这就是恢复现场。
注意一定要按先进后出的原则进行推入和弹出堆栈。
2.开中断与关中断在中断处理正在进行的过程中,可能又有新的中断请求到来,一
般说来,为防止这种高于当前优先级的中断请求打断当前的中断服务程序的执行,CPU响
应中断后应关断(很多CPU是自动关中断的,但8051单片机不是自动关闭的,需要用软件指令关闭),而在编写保护现场和恢复现场的程序时,也应在关闭中断后进行,以免使保护现场和恢复现场的工作不被干扰,这样,就可屏蔽其他中断请求了。
如果要想响应更高级的中断源的中断请求•那么应在现场保护之后,将CPU处于开中断的状态,这样就使系统具
有中断嵌套的功能。
对于不同的CPU,开中断和关中断的方法有所不同,有关8051单片机
的开中断和关中断的办法将在下节叙述。
3•中断服务中断服务是中断处理程序的主要内容,将根据中断功能去编写,以满足用
户的需要。
复杂的中断服务程序也可以用子程序形式。
4•中断返回中断返回是把当前运行的中断服务程序转回到被中断请求中断的主程序
上来。
中断返回指令与子程序返回不同,用专用的中断返回指令RETI来完成。
因此,这条
指令是中断服务程序的最后一条指令;另外,开中断后,必须运行一条指令后才有响应中断的可能性,所以,后面紧跟一条RETI指令,在执行完RETI指令前不可能响应新的中断申
请。
6.28051单片机的中断控制
由于单片机的结构和功能有限,中断系统不算复杂。
但从实际应用的角度来看,8051
单片机的中断系统已足够。
下面针对8051单片机的中断系统做详细介绍。
6.2.1中断源与中断标志位
8051型单片机提供了5个中断源:
两个外部中断源和三个内部中断源,8052增加了一个
中断源定时器2中断。
每一个中断源都有一个中断申请标志,但串行口占两个中断标志
位,一共六个中断标志,表6-1给出了它们的名称。
表6-1中断源和中断申请标志
分类
中断源名称
中断申请标志
触发方式
中断入口地址
外部中断
INT0夕卜部中断0
IEO(TCON.1)
INT0(P3.2)引脚上的低电
平/下降沿引起的中断
0003H
内部中断
T0定时器/计数器0中断
IF0(TCON.5)
T0定时器/计数器溢岀后引起的中断
000BH
外部中断
INT1外部中断1
IE1(TCON.3)
INT1(P3.3)引脚上的低电
平/下降沿引起的中断
0013H
内部中断
T1定时器/计数器1中断
IF1(TCON.7)
T1定时器/计数器溢岀后引起的中断
001BH
内部中断
串口中断
RI(SCON.0)
TI(SCON.1)
串行口接收完成或发送完一帧数据后引起的中断
0023H
外/内
部中断
定时器2中断(仅8052)
TF2(T2CON.7)
EXF2(T2CON.6)
T2定时器/计数器计数满后溢岀,置标志位TF2;或当外部输入T2EX发生从1到0的下降时置标志位EXF2,引起中断
002BH
(1)外部中断源,指可以向单片机提出中断申请的外部原因引起的,共有两个中断源:
外
部中断0和外部中断1,它们的请求信号分别由引脚INTO(P3.2)和而(P3.3)接入。
外部中断的信号被称为外部事件,这个信号究竟是低电平有效还是下降沿有效,可以被
软件设定,称之为外部中断触发方式选择”。
(2)内部中断源,有定时器中断和串行中断两种。
定时器中断是为满足定时或计数的需要而设置的。
在8051单片机内部有两个定时器/计数器,当其内部计数器溢出时,即表明定时
时间已到或计数值已满,这时就以计数溢出作为中断请求去置位一个标志位,作为单片机接
收中断请求的标志。
这个中断请求是在单片机内部发生的,因此,无需从单片机芯片的外部引入输入端。
串行中断是为串行数据传送的需要而设计的,每当串行口接收和发送完一帧串行数据
时,就产生一个中断请求。
至于中断申请标志位,是在两个特殊功能寄存器TCON和SCON
中定义了相应位作为中断标志位;当其中某位为0时,相应的中断源没有提出中断申请,当
其中某位变成1时,表示相应中断源已经提出了中断申请。
对于这些申请何时予以响应,由硬件和软件共同确定。
所有的中断申请标志位都可以由软件置位或清0,其效果与硬件置位
(置1)或清0标志位是相同的。
这就是说,可以由软件产生或者撤销一次中断申请。
8052单片机增加了定时器2,当定时/计数器方式的计数器(TH2,TL2)计数满后溢出,置位中断请求标志位TF2(T2CON.7),向CPU申请中断处理;当外部输入端口T2EX(P1.1)发生从1~0下降沿时,也将置位中断请求标志位EXF2(T2CON.6),向CPU申请中断处理。
6.2.2与中断有关的特殊功能寄存器SFR
与中断有关的特殊功能寄存器是中断允许控制寄存器(IE)、定时器控制寄存器(TCON)、
中断优先级控制寄存器(IP)及串行口控制寄存器(SCON)。
这四个寄存器都属于专用寄存器,且可以位寻址,通过置位和清零这些位以便对中断进行控制。
1•中断允许控制寄存器(IE)这个特殊功能寄存器的字节地址为0A8H,其位地址为
0A8H~0AFH,也可以用IE.0~IE.7表示。
该寄存器中各位的定义及位地址表示如下:
位地址
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H
位符号
EA
ET2
ES
ET1
EX1
ET0
EX0
其中只有7位有定义,它们是:
EA—中断允许的总控制位。
EA=0时,中断总禁止相当于关中断,即禁止所有中断。
EA=1时,中断总允许,相当于开中断。
总的中断允许后,各个中断源是否可以申请中断,则由其余各中断源的中断允许位进行控制。
EX0—外部中断0允许控制位,当EX0=0,禁止外中断0;EX0=1,允许外中断0。
EX1—外部中断1允许控制位,当EX仁0,禁止外中断1;EX仁1,允许外中断1。
ET0—定时器0中断允许控制位,当ET0=0,禁止该中断;ET0=1,允许定时器0中断。
ET1—定时器1中断允许控制位,当ET1=0,禁止该中断;ET1=1,允许定时器1中断。
ES—串行口中断允许控制位,当ES=0,禁止串行中断;ES=1,允许串行中断。
ET2—定时器2中断允许控制位,当ET2=0,禁止该中断;ET2=1,允许定时器2中断。
由上可见,8051单片机通过中断允许控制寄存器进行两级中断控制。
EA位作为总控制
位,以各中断源的中断允许位作为分控制位。
但总控制位为禁止(EA=0)时,无论其它位是1
或0,整个中断系统是关闭的。
只有总控制位为1时,才允许由各分控制位设定禁止或允许中
断,因此,单片机复位时,IE寄存器的初值是(IE)=00H,中断系统是处于禁止状态,即关中断。
还要注意,单片机在响应中断后不会自动关中断(8086等很多CPU响应中断后则自动关
中断),因此,如果在转入中断处理程序后,如果想禁止更高级的中断源的中断申请,可以用软件方式关闭中断。
对于中断允许寄存器状态的设置,由于IE既可以字节寻址又可以位寻址,因此,对该寄
存器的设置既能够用字节操作指令,也可以使用位操作指令进行设置。
例如,假定要开放外中断0,使用字节操作的指令是:
MOVIE,#81H
如果使用位操作指令则需要两条指令,但更清晰
SETBEA
SETBEX0
2•定时器控制寄存器(TCON)该寄存器的字节地址为88H,位地址88H~8FH,也可以用TCON.0~TCON.7表示。
寄存器的定义及位地址表示如下:
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
位符号
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
这个寄存器既有中断控制功能,又有定时器/计数器的控制功能。
其中与中断有关的控制位
有6位:
IE0—夕卜部中断0(INT0)请求标志位,当CPU采样到INTO引脚出现中断请求后,此位由硬件置1。
在中断响应完成后转向中断服务程序时,再由硬件自动清0。
这样,就可以接收下
一次外中断源的请求。
IE1—夕卜中断1(INT0)请求标志位,功能同上。
IT0—夕卜中断0请求信号方式控制位,当IT0=1,后沿负跳变有效;IT0=0,低电平有效。
此位可由软件置1或清0。
IT1—夕卜中断1请求信号方式控制位,IT1=1,后沿负跳变有效;IT1=0,低电平有效。
TF0—计数器0溢出标志位,当计数器0产生计数溢出时,该位由硬件置1,当转到中断
服务程序时,再由硬件自动清0。
这个标志位的使用有两种情况:
当采用中断方式时,把它
作为中断请求标志位用,该位为1,当CPU开中断时,则CPU响应中断;而采用查询方式时,
作查询状态位使用。
TF1—计数器1溢出标志位,功能同TF0。
3•中断优先级控制寄存器(IP)8051中断优先级的控制比较简单,因为系统只定义了高低两个优先级,各中断源的优先级由特殊功能寄器IP设定。
通过对特殊功能寄器IP的编程,可以把五个(8052六个)中断源分别定义在两个优先级中。
IP是中断优先级寄存器,可以位寻址。
IP的低6位分别各对应一个中断源:
某位为1时,相应
的中断源定义为高优先级;某位为0时,定义为低优先级。
软件可以随时对IP的各位清零或
置位。
IP寄存器的字节地址为0B8H,位地址为0B8H~0BFH,或用IP.0~IP.7表示。
寄存器的定义和位地址表如下:
位地址
BFH
BEH
BDH
BCH
BBH
BAH
B9H
B8H
位符号
一
一
PT2(IP.5)
PS(IP.4)
PT1(IP.3)
PX1(IP.2)
PT0(IP.1)
PXO(IP.O)
PXO-外部中断0优先级设定位;该位为0优先级为低;该位为1,优先级为高。
PTO—定时中断0优先级设定位;定义同上。
PX1—外部中断1优先级设定位;定义同上。
PT1—定时中断1优先级设定位;定义同上。
PS—串行中断优先级设定位;定义同上。
PT2—定时中断2优先级设定位;定义同上。
(仅8052)
另外,8051单片机的硬件把全部中断源在同一个优先级的情况下按下列顺序排列了优先权,INT0优先权最高,定时器2优先权最低:
INT0、T0、INT1、T1、串口、T2
(最高)(最低)
一个中断服务子程序被另一个中断申请所中断,实现两级中断嵌套。
图6-2是两级中断嵌套的示意图。
主
中断
中断
程
服务
服务
序
子程
子程
序1
序2
▼
断点2
图6-2两级中断嵌套示意图
在中断开放的条件下,中断优先级结构解决了如下两个向题:
1)正在执行一个中断服务
子程序时,如果发生了另一个中断申请,CPU是否立即响应它而形成中断嵌套;2)如果一个
中断服务子程序执行完之后,发现已经有若干中断都提出了申请,那么应该先响应哪一个申
请。
在开放中断的条件下,用下述四个原则使用中断优先级结构:
(1)非中断服务子程序可以被任何一个中断申请所中断,而与优先级结构无关。
⑵如果若干中断同时提出申请,则CPU将选择优先级、优先权最高者予以响应。
(3)低优先级可以被高优先级的中断申请所中断。
换句话说,同级不能形成嵌套、高优先
级不能被低优先级嵌套,当禁止嵌套时,必须执行完当前中断服务子程序之后才考虑是否响
应另一个中断申请。
(4)同一个优先级里,优先权的顺序是由硬件决定而不能改变的。
但是用户可以通过改变
优先级的方法改变中断响应的顺序。
例如,8051单片机中串行口的优先权最低,但是可以在
中断优先级寄存器IP中写入10H,则只有串行口是最高优先级。
若同时有若干中断提出申请,
则一定会优先响应串行口的申请。
8051复位以后,特殊功能寄存器IP的内容为00H。
所以在初始化程序中要考虑到对其编程。
4.串行口控制寄存器(SCON)其寄存器字节地址为98H,位地址98H~9FH,或
SCON.0~SCON.7,寄存器的定义和位地址表示如下:
位地址
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
位符号
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
其中与中断有关的控制位共两位:
(1)TI-串行口中断请求标志位。
当发送完一帧串行数据后,由硬件中断置1,在转向中
断服务程序后,用软件清0。
(2)RI-串行口接收中断请求标志位。
当接收完一帧串行数据后,由硬件中断置1,在转
向中断服务程序后,用软件清0。
串行中断请求由TI和RI的逻辑或得到,即无论是发送标志还是接收标志都会产生串行中断请求。
8051单片机中断系统示意图如图6-3所示。
6.2.3中断响应过程
中断响应就是CPU对某一中断源所提出的中断请求的响应。
中断请求被CPU响应后,再
经过一系列的操作,然后才转向中断服务程序,完成中断所要求的处理任务,对8051的整个
中断响应过程,分为以下几个问题顺序进行说明。
1.对外中断请求的采样中断响应过程的第一步是中断请求采样。
所谓中断请求采样,
就是如何识别外部中断请求信号,并把它锁定在定时器控制寄存器(TCON)的相应标志位中,
只有两个外中断源才有采样问题。
8051单片机的每个机器周期的S5P2(第5状态第2节拍)对外中断请求引脚(P3.2和P3.3)进行采样。
如果有中断请求,则把IE0或IE1置位。
夕卜中断0(INT0)和外部中断1(INT1)是两套相同的中断系统,只是使用的管脚和特殊功能寄存器中的控制位不同。
了解INT0的工作原理,就可理解而的工作原理。
夕卜部中断0,使用了管脚P3.2的第二功能。
只要该引脚上得到了从外设送来的适当信号”
TH>'
IF寄存器
&■
E>
(X8052
包立的川断允忏
全局中断允许
I
-
O
a
th-
L—*接槪中
断诸求
图6-38051单片机中断系统示意图
就可以导致标志位IE0硬件置位。
其过程如下:
(1)外部中断的触发方式选择。
什么是外设的适当信号”呢?
首先要看特殊功能寄存器中
的一位TCON.0位,它被称为外部中断0的触发方式控制位IT0”当预置IT0=0时,被称为电平触发方式”即P3.2脚上的低电平可以向CPU申请中断。
而当IT0=1时,P3.2上每一个下降沿都触发一次中断。
这就是两种触发方式的选择。
为什么又增加了一种沿触发方式呢?
因为使用电平触发方式时,如果P3.2脚上申请中断的低电平持续时间很长,在执行完一遍中断
服务子程序之后,该低电平仍未撤销,那么还会引起下一次中断申请,甚至若干次中断申请,
直至P3.2脚上的电平变高时为止。
这种情况下可能产生操作错误,所以才引入了第二种触发方式:
每个下降沿引起一次中断申请,其后的低电平持续时间内不再会引起错误的中断申
请。
这就又引起了另一项规定:
凡是采用电平触发的情况下,在这次中断服务子程序执行完之前,P3.2脚上的低电平必须变成高电平。
正是由于这条规定,人们习惯于选择沿触发方
式”很少使用电平触发方式。
(2)中断标志位IE0—旦被置位,就认为中断申请己经提出,是否响应中断则应由特殊功
能寄存器IE和IP决定。
如果CPU响应了这个中断,则应该清除标志位IE0;对于边沿触
发方式,此时硬件能够自动清IE0,对于电平触发方式,只有外部中断申请信号变成高电平,才能够自动清除中断标志位。
如果CPU暂时不能够响应中断,则IE0始终为1,表示中断申
请有效。
(3)除外中断,其他中断源的中断请求都在单片机芯片的内部可以直接置位相应的中断请求标志位,因此,不存在中断请求标志位问题。
但仍然存在从中断请求信号的产生到中断请求标志位置位的过程。
图6-3左侧表示了中断请求标志位与中断请求信号的关系。
2.中断查询与响应采样是解决外中断请求的锁定问题,即把有效的外中断请求信号锁定在各个中断请求标志位中。
余下的问题就是CPU如何知道中断请求的发生,CPU是通过对
中断请求标志位的查询来确定中断的产生,一般把这个查询叫做中断查询。
因此,8051单片
机在每一个机器周期的最后一个状态(S6),按前述的优先级顺序对中断请求标志位进行查询。
如果查询到标志位为1,则表明有中断请求产生,因此,就紧跟着的下一个机器周期的S1状态进行中断响应。
中断响应过程如下:
(1)由硬件自动生成一个长调用指令LCALLaddrl6。
这里的地址就是中断程序入口地
址,详见表6-1。
(2)生成了LCALL指令后,CPU执行该指令,首先将程序计数器PC当前的内容压入堆栈,称为保护断点。
(3)再将中断入口地址装入PC,使程序执行,于是转向相应的中断入口地址。
但各个中断入口地址只相差8个字节单元,多数情况下难以存放一个完整的中断服务程序。
因此,一般是在这个中断入口地址处存放一条无条件转移指令(LJMPaddr16)指令,使程序转移到addr16处,在这里执行中断服务程序。
然而如果存在下列情况时,中断请求不予响应:
(1)CPU正处于一个同级的或更高级的中断服务中。
(2)当前指令是中断返回(RETI)或子程序返回(RET)、访问IE、IP的指令。
这些指令规定:
必须在完成这些指令后,还应接着执行一条后面的指令后才能够响应中断请求。
3.中断响应时间所谓中断响应时间是指从查询中断请求标志位到转向中断入口地址的时间。
8051单片机的最短响应时间为三个机器周期。
其中一个机器周期用于查询中断请求标志位的时间,而这个机器周期恰好是指令的最后一个机器周期,在这个机器结束后,中断请求即被响应,产生LCALL指令。
而执行这条长调用指令需要两个机器周期,所以总共需要三个机器周期。
但有时,中断响应时间多达8个机器周期之长。
例如,在中断查询时,正好是开始执行RET、RETI或访问IE、IP指令,则需把当前指令执行完再继续执行一条指令,才能进行中断响应。
执行RET、RETI等指令最长需要两个机器周期,但后面跟着的指令假如是MUL、DIV乘除指令,则又需要四个机器周期,从而形成了8个机器周期的最长响应时间。
一般情况下,中断响应时间在3〜8个机器周期之间。
通常用户不必考虑中断响应时间,只有在精确定时的应用场合才需要中断响应时间,以保证精确的定时控制。
4.中断请求的撤除一旦中断响应,中断请求标志位就应该及时撤除,否则就意味着中断请求继续存在,会引起中断的混乱。
下面按中断类型说明中断请求如何撤除。
(1)定时器中断请求—硬件自动撤除。
定时器中断被响应后,硬件自动把对应的中断请求标志位(TF0、TF1)清0,因此,其中断请求是自动撤除的。
(2)外部中断请求自动与强制撤除。
对于边沿触发方式的外部中断请求,一旦响应后通过硬件自动把中断请求标志位(IE1或IE0)清除,即中断请求的标志位也是自动撤除的。
但对于电平触发方式,情况则不同。
光靠清除中断标志位,并不能解决中断请求的撤除问题。
因为,这时中断标志位是撤除了,但中断请求的有效低电平仍然存在,在以后的中断请求采样时,又使IE0或IE1重新置1,为此想要彻底解决中断请求的撤除,还必须在中
为此,可加入图6-4的电路。
用D
Q送给引脚INTO或INT1。
SD,完成把Q强制成高电平。
外部中断请求信号
图6-4在电平方式下的外中断请求的撤除电路
断响应后强制地把中断请求输入引脚从低电平改为高电平。
触发器锁存外来的中断请求低电平信号,并通过触发器的输出端中断响应后,为撤除中断请求,利用D触发器的直接置位端
所以,在P1.O口线输出一个负脉冲就可以使D触发器置1,从而撤除了低电平的中断请求。
负脉冲指令如下:
ORLP1,#O1H;P1.O输出高电平
ANLP1,#OFEH;P1.O输出低电平
可见,在电平方式下的外中断请求的真正撤除,是在中断响应后转入中断服务程序中,通过软件方法实现的。
所以,由于增加了附加电路,这种电平方式很少应用,用户