- 单片机原理
- 张志霞 张楠楠 王永刚 杨萍主编
- 4700字
- 2024-11-28 18:10:15
第六节 中断系统
一、中断概念
现代的计算机都具有实时处理功能,能对外界异步发生的事件作出及时的处理,这是依靠它们的中断来实现的。所谓中断是指中央处理器CPU正在处理某件事情的时候,外部发生了某一事件(如定时器计数溢出),请求CPU迅速去处理,CPU暂时中断当前的工作,转入处理所发生的事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
引入中断技术能实现主要功能如下。1.并行处理
有了中断技术,可以解决快速的CPU与慢速外设之间的速度匹配问题。CPU在启动外设后,便继续执行主程序;而外设被启动后,开始进行准备工作。当外设准备就绪时,就向CPU发出中断请求,CPU响应该中断请求并为其服务完毕后,返回到原来的断点处继续执行主程序。外设在得到服务后,也继续进行自己的工作。CPU和外设并行工作,由于CPU与外设速度的悬殊差异,CPU可以使多个外设同时工作,并分时为多台外设提供服务。
2.实时处理
在实时控制中,请求CPU提供服务是随机发生的。有了中断系统,CPU就可以立即响应并进行相应的处理。从而实现了实时处理。
3.故障处理
计算机系统工作时会出现一些突发故障,如电源断电、存储器出错、运算溢出等。有了中断系统,当出现故障时,CPU可及时转去执行故障处理程序,自行处理故障而不必停机。
总之,随着计算机软硬件技术的发展,中断技术也在不断发展之中,其功能也会更加丰富。中断已成为评价计算机整体性能的一项重要指标。
二、中断系统
MCS-51中不同型号单片机的中断源数量是不同的,最典型的8051单片机有5个中断源,具有2个中断优先级,可以实现二级中断服务程序嵌套。每一个中断源可以编程为高优先级或低优先级中断,允许或禁止向CPU请求中断。与中断系统有关的特殊功能寄存器有中断允许寄存器IE、中断优先级控制寄存器IP、中断源寄存器(TCON,SCON中有关位)。MCS-51基本的中断系统结构如图2-23所示。
1.中断源
MCS-51中典型的8051单片机有5个中断源:两个是INT0,INT1(P3.2,P3.3)
上输入的外部中断源;3个内部的中断源,它们是定时器/计数器T0、T1的溢出中断源和串行口的发送接收中断源,8052等单片机增加了一个定时器T2的中断。这些中断源分别
锁存在TCON,SCON,T2CON的相应位中。32
图2-23 MCS-51中断系统结构
(1)外部中断源。INT0,INT1上输入的两个外部中断源和它们的触发方式控制位锁存在特殊功能寄存器TCON的低4位,TCON的高4位为T0、T1的运行控制位和溢出标志位,其格式如下:
TF1
TF0
IE1
IT1
IE0
IT0
IE1:外部中断1(INT1,P3.3)的中断请求标志。当检测到外部中断引脚P3.3上存在有效的中断请求信号时,由硬件使IE1置1,当CPU响应该中断请求时,由硬件使
IE1清“0”。
IT1:外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当
INT1(P3.3)输入低电平时,置位IE1。CPU在每一个机器周期的S5P2采样INT1
(P3.3)的输入电平,当采样到低电平时,置“1”IE1,采样到高电平时清“0”IE1。采用电平触发方式时,外部中断源(输入到INT1)必须保持低电平有效,直到该中断被CPU响应,同时在该中断服务程序执行完之前,外部中断源必须被清除,否则将产生另一次中断;IT1=1,外部中断1程控为边沿触发方式,CPU在每一个机器周期的S5P2采样INT1(P3.3)的输入电平。如果相继的两次采样,一个周期中采样到INT1为高电平,接着的下个周期中采样到INT1为低电平,则置“1”IE1。IE1为1,表示外部中断1正在向CPU申请中断,直到该中断被CPU响应时,才由硬件清“0”。因为每个机器周期采样一次外部中断输入电平,因此,采用边沿触发方式时,外部中断源输入的高电平和低电平时间必须保持12个振荡周期以上,才能保证CPU检测到高到低的负跳变。
IE0:外部中断0(INT0,P3.2)的中断请求标志。其含义与IE1同。
IT0:外部中断源0触发方式控制位。其功能与IT1相同。
(2)内部中断源。定时器/计数器T0的溢出中断TF0(TCON.5):T0被允许计数以后,从初值开始加1计数,当产生溢出时置“1”TF0,向CPU请求中断,一直保持到CPU响应该中断时才由内部硬件清“0”(也可以由查询程序清“0”)。
定时器/计数器T1的溢出中断TF1(TCON.7):T1被允许计数以后,从初值开始加1计数,当产生溢出时置“1”TF1,向CPU请求中断,一直保持到CPU响应该中断时才由内部硬件清“0”(也可以由查询程序清“0”)。
串行口中断:串行口的接收中断RI(SCON.0)和发送中断TI(SCON.1)逻辑或以后作为内部的一个中断源。当串行口发送完一个字符由内部硬件置位发送中断标志TI,接收到一个字符后也由内部硬件置位接收中断标志RI。应该注意,CPU响应串行口的中
断时,并不清“0”TI和RI中断标志,TI和RI必须由软件清“0”。
定时器/计数器T2中断:8052等单片机内的T2有2个中断标志TF2(T2CON.7)
和EXF2(T2CON.6)。这两个中断标志逻辑或以后作为内部的一个中断源。这两个中断标志由内部硬件置“1”,也必须由软件清“0”,因为CPU响应T2的中断请求时并不清
“0”TF2和EXF2。
2.中断控制
(1)中断使能控制。MCS-51CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断,是由内部的中断允许寄存器IE(IE为特殊功能寄存器,它的字节地址为A8H)控制的,其格式如下:
EA
—
ET2
ES
ET1
EX1
ET0
EX0
EA:CPU的中断开放标志。EA=1,CPU开放中断;EA=0,CPU屏蔽所有的中
断申请。
ES:串行口中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
ET1:定时器/计数器T1的溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁
止T1中断。
EX1:外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
ET0:T0的溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。EX0:外部中断0中断允许位。EX0=1,允许中断;EX0=0,禁止中断。
ET2:定时器/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁
止T2中断。对于8051等内部没有T2的单片机,是没有IE.5位的。
(2)中断优先级控制。MCS-51有两个中断优先级,每一中断请求源可编程为高优先级中断或低优先级中断,实现二级中断嵌套。一个正在被执行的低优先级中断服务程序能被高优先级中断所中断,但不能被另一个同级的或低优先级中断源所中断。若CPU正在执行高优先级的中断服务程序,则不能被任何中断源所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令才能响应新的中断源申请。为了实现上述功能,MCS-51的中断系统有两个不可寻址的优先级状态触发器,一个指出CPU是否正在执行高优先级中断服务程序,另一个指出CPU是否正在执行低级中断服务程序。这两个触发器的1状态分别屏蔽所有的中断申请和同一优先级的其他中断源申请。另外,MCS-51的片内有一个中断优先级寄存器IP(IP为特殊功能寄存器,它的字节地址为B8H),其格式如下:
—
—
PT2
PS
PT1
PX1
PT0
PX0
PS:串行口中断优先级控制位。PS=1,串行口中断定义为高优先级中断;PS=0,串行口中断定义为低优先级中断。
PT1:定时器T1中断优先级控制位。PT1=1,定时器T1定义为高优先级中断;PT1=0,定时器T1中断定义为低优先级中断。
PX1:外部中断1中断优先级控制位。PX1=1,外部中断1定义为高优先级中断;PX1=0,外部中断1中断为低优先级中断。
PT0:定时器T0中断优先级控制位。PT0=1,定时器T0中断定义为高优先级中断;PT0=0,定时器T0中断定义为低优先级中断。
PX0:外部中断0中断优先级控制位。PX0=1,外部中断0定义为高优先级中断;PX0=0,外部中断0中断为低优先级中断。
PT2:定时器/计数器T2的中断优先级控制位。PT2=1,T2中断为高优先级中断;PT2=0,T2为低优先级中断。对于8051等内部没有T2的单片机,IP.5是没有的。
在CPU接收到同样优先级的几个中断请求源时,一个内部的硬件查询序列确定优先服务于哪一个中断申请,这样在同一个优先级里,由查询顺序确定了优先级结构,其优先级别排列如下:
中断源
中断优先级最高
外部中断0定时器T0中断外部中断1定时器T1中断串行口中断
T2中断
最低
MCS-51复位以后,特殊功能寄存器IE、IP的内容均为0,由初始化程序对IE、IP编程,以开放中央处理器CPU中断、允许某些中断源中断和改变中断的优先级。
3.中断响应过程
MCS-51的CPU在每一个机器周期顺序检查每一个中断源。在机器周期的S6采样并按优先级处理所有被激活的中断请求,如果没有被下述条件所阻止,将在下一个机器周期的状态S1响应激活最高级中断请求。
(1)CPU正在处理相同的或更高优先级的中断。
(2)现行的机器周期不是所执行指令的最后一个机器周期。
(3)正在执行的指令是中断返回指令(RETI)或者是对IE、IP的写操作指令(执行这些指令后至少再执行一条指令后才会响应中断)。
如果上述条件中有一个存在,CPU将丢弃中断查询的结果;若一个条件也不存在,将在紧接着的下一个机器周期执行中断查询的结果。
CPU响应中断时,先置位相应的优先级状态触发器(该触发器指出CPU开始处理的中断优先级别),然后执行一条硬件子程序调用,使控制转移到相应的入口,清“0”中断请求源申请标志(TI和RI除外)。接着把程序计数器的内容压入堆栈(但不保护PSW),将被响应的中断服务程序的入口地址送程序计数器PC,各中断源服务程序的入口地址为:中断源
入口地址
外部中断0
0003H
定时器T0
000BH
外部中断1
0013H
定时器T1
001BH
串行口中断
0023H
定时器T2
002BH
通常在中断入口,安排一条相应的跳转指令,以跳到用户设计的中断处理程序入口。CPU执行中断处理程序一直到RETI指令为止。RETI指令是表示中断服务程序的结
束,CPU执行完这条指令后,清“0”响应中断时所置位的优先级状态触发器,然后从堆栈中弹出顶上的两个字节到程序计数器PC,CPU从原来被打断处重新执行被中断的程序。由此可见,用户的中断服务程序末尾必须安排一条返回指令RETI,CPU现场的保护和恢复必须由用户的中断服务程序实现。
4.外部中断响应时间
INT0和INT1电平在每一个机器周期的S5P2被采样并锁存到IE0,IE1中,这个新置入的IE0,IE1状态等到下一个机器周期才被查询电路查询到。如果中断被激活,并且满足响应条件,CPU接着执行一条硬件子程序调用指令以转到相应的服务程序入口,该调用指令本身需两个机器周期。这样,在产生外部中断请求到开始执行中断服务程序的第一条指令之间,最少需要三个完整的机器周期。
如果中断请求被前面列出的三个条件之一所阻止,则需要更长的响应时间。如果已经在处理同级或更高级中断,额外的等待时间明显地取决于别的中断服务程序的处理过程。如果正在处理的指令没有执行到最后的机器周期,所需的额外等待时间不会多于3个机器周期,因为最长的指令(乘法指令MUL和除法指令DIV)也只有4个机器周期,如果正在执行的指令为RETI或访问IE,IP的指令,额外的等待时间不会多于5个机器周期,最多需一个周期完成正在处理的指令,完成下一条指令(设MUL或DIV)的4个机器周期。这样,在一个单一中断的系统里,外部中断响应时间总是在3~8个机器周期。
三、多外部中断源设计
MCS-51一般为用户提供两个外部中断请求输入线,在有些应用系统中,外部的中断请求源不止于两个,因此有必要对外部中断进行扩展。
1.定时器中断作为外部中断
MCS-51的定时器/计数器T0、T1工作于计数器工作方式,而P3.4(T0)或P3.5
(T1)上发生负跳变时T0或T1加1。利用这个特性,我们可以把P3.4,P3.5作为外部中断请求输入线,而定时器的溢出标志TF0、TF1当作外部中断请求标志。
以T0为例,说明这种方法的设计。将T0编程为方式2(自动恢复常数的8位计数器),外部事件计数方式,TH0、TL0的初值设置为0FFH,并允许T0中断。当连接在P3.4上的外部中断请求输入线电平发生负跳变时,TL0加1计数并产生溢出,置“1”
TF0向CPU请求中断,同时将TH0中的常数0FFH送TL0。这样,P3.4上电平每次发
生负跳变时,都会置“1”TF0向CPU请求中断,P3.4就相当于边沿触发的外部中断请求输入线。
2.多个外部中断源逻辑或输入
这是一种中断和软件查询结合方法,如图2-24所示。四个外部中断源通过一个或非门电路产生对8032单片机的中断请求信号INT0。无论哪个外部中断源提出中断请求,都会使INT0引脚变低,从而向8032单片机申请中断。然而,究竟是哪个外部中断源引起的中断,可在进入0003H中断服务程序入口后通过软件查询P1.7~P1.4引脚上电平获知。
图2-24 多外部中断源扩展