第 5章 MCS-51的中断系统实时测控,单片机 能及时地响应和处理单片机外部事件或内部事件所提出的中断请求 。
5.1 中断的概念
CPU正在执行程序时,单片机外部或内部发生的某一 事件,请求 CPU迅速去处理。
CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。
处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为 中断 。 CPU处理事件的过程,
称为 CPU的 中断响应过程。
图 5-1所示。对事件的整个处理过程,称为 中断处理 ( 或中断服务 ) 。
能够实现中断处理功能的部件称为 中断系统 ;产生中断的请求源称为 中断请求源 。
中断源向 CPU提出的处理请求,称为 中断请求 (或 中断申请 )。
进入中断 → 保护现场 → 中断处理恢复现场
→ 中断返回中断方式优点,大大地提高了 CPU的工作效率 。
5.2 MCS-51中断系统的结构有 5个中断请求源,两个中断优先级,可两级嵌套 。
中断系统结构示意图 如下图所示 。
5.3 中断请求源五个中断请求源,
( 1) INT0*— 外部中断请求 0,由引脚 INT0*输入,中断请求标志为 IE0。
( 2) INT1*— 外部中断请求 1,由引脚 INT1*输入,中断请求标志为 IE1。
( 3) 定时器 /计数器 T0溢出中断请求,中断请求标志为 TF0。
( 4) 定时器 /计数器 T1溢出中断请求,中断请求标志为 TF1。
( 5) 串行口中断请求,中断请求标志为 TI或 RI。
标志位分别由特殊功能寄存器 TCON和 SCON的相应位锁存。
TCON为定时器 /计数器的控制寄存器,字节地址为 88H。
包含:
( 1) T0和 T1的溢出中断请求标志位 TF1和 TF0
( 2) 外部中断请求标志位 IE1与 IE0。 格式如下所示:
各标志位的功能:
( 1) IT0— 选择外部中断请求 0为跳沿触发方式还是电平触发方式:
IT0=0,为 电平触发 方式 。
IT0=1,为 跳沿触发 方式。
可由软件置,1” 或清,0” 。
( 2) IE0— 外部中断请求 0的中断请求标志位 。
IE0=0,无中断请求 。
IE0=1,外部中断 0有中断请求 。 当 CPU响应该中断,
转向中断服务程序时,由硬件清,0” IE0。
( 3) IT1— 外部中断请求 1为跳沿触发方式还是电平触发方式,意义与 IT0类似 。
( 4) IE1— 外部中断请求 1的中断请求标志位,意义与 IE0类似 。
( 5) TF0— T0溢出中断请求标志位 。
T0计数后,当最高位产生溢出时,由硬件置,1” TF0,
向 CPU申请中断,CPU响应 TF0中断时,清,0” TF0,
TF0也可由软件清 0。
( 6) TF1— T1的溢出中断请求标志位,功能和 TF0类似 。
TR1,TR0 2个位与中断无关 。
当 MCS-51复位后,TCON被清 0,则 CPU关中断,所有中断请求被禁止。
SCON为串行口控制寄存器,字节地址为 98H。串行口的发送中断 和 接收中断 的中断请求标志 TI和 RI,格式如下:
各标志位的功能:
( 1) TI— 发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置,1” TI。 必须在中断服务程序中用软件对 TI标志清,0” 。
( 2) RI— 接收中断请求标志位。串口接收完一个数据帧,硬件自动置,1” RI标志。 必须在中断服务程序中用软件对 RI标志清,0” 。
5.4 中断控制
5.4.1 中断允许寄存器 IE
CPU对中断源的开放或屏蔽,由片内的 中断允许寄存器
IE控制。字节地址为 A8H,可位寻址。格式如下:
IE对中断的开放和关闭为两级控制总的开关中断控制位 EA( IE.7位),
EA=0,所有中断请求被屏蔽。
EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由 IE中对应的 5个中断请求允许控制位的状态来决定。
IE中各位的功能如下:
( 1) EA,中断允许总控制位
0,CPU屏蔽所有的中断请求 (CPU关中断 );
1,CPU开放所有中断 (CPU开中断 )。
( 2) ES,串行口中断允许位
0,禁止串行口中断;
1,允许串行口中断。
( 3) ET1,定时器 /计数器 T1的溢出中断允许位
0,禁止 T1溢出中断;
1,允许 T1溢出中断 。
( 4) EX1,外部中断 1中断允许位
0,禁止外部中断 1中断;
1,允许外部中断 1中断 。
( 5) ET0,定时器 /计数器 T0的溢出中断允许位
0,禁止 T0溢出中断;
1,允许 T0溢出中断 。
( 6) EX0,外部中断 0中断允许位 。
0,禁止外部中断 0中断;
1,允许外部中断 0中断 。
MCS-51复位后,IE清 0,所有中断请求被禁止。
若使某一个中断源被允许中断,除了 IE相应的位的被置,1”,还必须使 EA位 =1。
改变 IE的内容,可由位操作指令来实现,即:
SETB bit; CLR bit。
例 5-1 若允许片内 2个定时器 /计数器中断,禁止其它中断源的中断请求 。 编写设置 IE的相应程序段
( 1) 用位操作指令来编写如下程序段,
CLR ES ;禁止串行口中断
CLR EX1 ; 禁止外部中断 1中断
CLR EX0 ; 禁止外部中断 0中断
SETB ET0 ; 允许定时器 /计数器 T0中断
SETB ET1 ; 允许定时器 /计数器 T1中断
SETB EA ; CPU开中断
( 2) 用字节操作指令来编写,
MOV IE,#8AH
或者用:
MOV 0A8H,#8AH ; A8H为 IE寄存器字节地址
5.4.2 中断优先级寄存器 IP
两个中断优先级,可实现两级中断嵌套 。 如下图示 。
一个正在执行的 低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。 若 CPU正在执行高优先级的中断,则不能被任何中断源所中断 。
可归纳为下面两条基本规则:
( 1) 低优先级可被高优先级中断,反之则不能 。
( 2)同级中断不会被它的同级中断源所中断。
某一中断源被设置为高优先级中断,则不能被任何其它的中断源的中断请求所中断。
中断优先级寄存器 IP,其字节地址为 B8H。
IP各个位的含义:
( 1) PS—— 串行口中断优先级控制位
1,高优先级中断;
0,低优先级中断。
( 2) PT1—— 定时器 T1中断优先级控制位
1,高优先级中断;
0,低优先级中断 。
( 3) PX1—— 外部中断 1中断优先级控制位
1,高优先级中断;
0,低优先级中断 。
( 4) PT0—— 定时器 T0中断优先级控制位
1,高优先级中断;
0,低优先级中断 。
( 5) PX0—— 外部中断 0中断优先级控制位
1,高优先级中断;
0,低优先级中断。
由软件可改变各中断源的中断优先级。
MCS-51的中断系统 有两个不可寻址的,优先级激活触发器,。 用来指示某高优先级的中断正在执行,所有后来的中断均被阻止。另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,
但不阻断高优先级的中断请求。
在同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的查询顺序。 查询顺序 如下:
中断源 中断级别外部中断 0 最高
T0溢出中断外部中断 1
T1溢出中断串行口中断 最低例 5-2 设置 IP寄存器的初始值,使 2个外中断请求为高优先级,其它中断请求为低优先级 。
( 1) 用位操作指令
SETB PX0 ; 2个外中断为高优先级
SETB PX1
CLR PS ; 串行口,2个定时器 /计数器为低优先级中断
CLR PT0
CLR PT1
( 2) 用字节操作指令
MOV IP,#05H
或:
MOV 0B8H,#05H ; B8H为 IP寄存器的字节地址
5.5 响应中断请求的条件一个中断请求被响应,需满足以下必要条件:
( 1) IE寄存器中的中断总允许位 EA=1。
( 2) 该中断源发出中断请求,即该中断源对应的中断请求标志为,1” 。
( 3) 该中断源的中断允许位 =1,即该中断没有被屏蔽 。
( 4) 无同级或更高级中断正在被服务 。
中断响应的主要过程:
首先由硬件自动生成一条长调用指令,
LCALL addr16。
接着就由 CPU执行该指令,将 PC的内容压入堆栈以保护断点,再将中断入口地址装入 PC。各中断源服务程序的入口地址是固定的,如下所示:
中断源 入口地址外部中断 0 0003H
定时器 /计数器 T0 000BH
外部中断 1 0013H
定时器 /计数器 T1 001BH
串行口中断 0023H
中断响应是有条件的,遇到下列三种情况之一时,中断响应被封锁:
( 1) CPU正在处理同级的或更高优先级的中断 。
( 2) 所查询的机器周期不是所当前正在执行指令的最后一个机器周期 。 只有在当前指令执行完毕后,
才能进行中断响应 。
( 3)正在执行的指令是 RETI或是访问 IE或 IP的指令。
需要再去执行完一条指令,才能响应新的中断请求。
如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能对中断进行响应。
5.6 外部中断的响应时间外部中断的最短的响应时间为 3个机器周期,
( 1)中断请求标志位查询占 1个机器周期 。
( 2)子程序调用指令 LCALL转到相应的中断服务程序入口,需 2个机器周期 。
外部中断响应的最长时间为 8个机器周期,
发生在 CPU进行中断标志查询时,刚好是开始执行
RETI或是访问 IE或 IP的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,最长需 2个机器周期。接着再执行一条指令,按最长指令(乘法指令 MUL和除法指令 DIV) 来算,也只有 4个机器周期。加上硬件子程序调用指令 LCALL的执行,需要 2
个机器周期。所以,外部中断响应最长时间为 8个机器周期 。
如果已在处理同级或更高级中断,响应时间无法计算。
在一个单一中断的系统里,MCS-51单片机 对外部中断请求的响应的时间总是在 3~ 8个机器周期之间。
5.7 外部中断的触发方式选择两种触发方式,电平触发 方式和 跳沿触发 方式。
5.7.1 电平触发方式
CPU在每个机器周期采样到的外部中断输入线的电平。
在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),否则 CPU返回主程序后会再次响应中断。
适于外中断以低电平输入且中断服务程序能清除外部中断请求(即外部中断输入电平又变为高电平)
的情况。
5.7.2 跳沿触发方式连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置,1” 中断请求标志,直到 CPU响应此中断时,该标志才清 0。这样不会丢失中断,但 输入的负脉冲宽度至少保持 1个机器周期 。
5.8 中断请求的撤消
1,定时器 /计数器中断请求的撤消中断请求被响应后 。 硬件会 自动清 TF0或 TF1。
2,外部中断请求的撤消
( 1) 跳沿方式外部中断请求的撤消是自动撤消的 。
( 2) 电平方式外部中断请求的撤消 。
除了标志位清,0” 之外,还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平,如下图所示 。
只要 P1.0端输出一个负脉冲就可以使 D触发器置,1”,
从而撤消了低电平的中断请求信号 。 所需的负脉冲可增加如下两条指令得到:
ORL P1,#01H ; P1.0为,1”
ANL P1,#0FEH ; P1.0为,0”
电平方式的外部中断请求信号的完全撤消,是通过软硬件相结合的方法来实现的 。
3,串行口中断请求的撤消响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除 。 所以 串行口中断请求的撤消只能使用软件的方法
CLR TI ; 清 TI标志位
CLR RI ; 清 RI标志位
5.9 中断服务程序的设计一,中断服务程序设计的任务基本任务:
( 1) 设置中断允许控制寄存器 IE。
( 2) 设置中断优先级寄存器 IP。
( 3) 对外中断源,是采用电平触发还是跳沿触发 。
( 4) 编写中断服务程序,处理中断请求 。
前 3条一般放在主程序的初始化程序段中 。
例 5-3 假设允许外部中断 0中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式 。
在主程序中编写如下程序段:
SETB EA ; CPU开中断
SETB ET0 ; 允许外中断 0产生中断
SETB PX0 ; 外中断 0为高级中断
SETB IT0 ; 外中断 0为跳沿触发方式二、采用中断时的主程序结构常用的 主程序结构 如下:
ORG 0000H
LJMP MAIN
ORG 中断入口地址
LJMP INT
ORG XXXXH
MAIN,主 程 序
INT,中断服务程序三,中断服务程序的流程例 5-4 根据图 5-9的中断服务程序流程,编出中断服务程序 。 假设,现场保护只需将 PSW和 A的内容压入堆栈中保护 。
典型的中断服务程序如下:
INT,CLR EA ; CPU关中断
PUSH PSW ; 现场保护
PUSH ACC ;
SETB EA ; CPU开中断中断处理程序段
CLR EA ; CPU关中断
POP ACC ; 现场恢复
POP PSW
SETB EA ; CPU开中断
RETI ; 中断返回,恢复断点几点说明:
( 1)现场保护仅涉及到 PSW和 A的内容,如还有其它需保护的内容,只需要在相应的位置再加几条 PUSH
和 POP指令即可。
( 2),中断处理程序段,,应根据任务的具体要求,
来编写。
( 3)如果本中断服务程序不允许被其它的中断所中断。可将,中断处理程序段,前后的,SETB EA”和
,CLR EA”两条指令去掉。
( 4)中断服务程序的最后一条指令必须是返回指令
RETI。
5.10 多外部中断源系统设计实际系统中,两个外部中断请求源往往不够用
5.10.1 定时器 /计数器作为外部中断源的使用方法定时器 /计数器选为计数器工作模式,T0 ( 或 T1)
引脚上发生负跳变时,T0( 或 T1) 计数器加 1,利用这个特性,可以把 T0( 或 T1) 引脚作为外部中断请求输入引脚,而定时器 /计数器的溢出中断
TF0( 或 TF1) 作为外部中断请求标志。
ORG 0000H
AJMP IINI ; 跳到初始化程序
………………
IINI,MOV TMOD,#06H; 设置 T0的工作方式
MOV TL0,#0FFH; 设置计数器初值
MOV TH0,#0FFH
SETB TR0 ; 启动 T0,开始计数
SETB ET0 ; 允许 T0中断
SETB EA ; CPU开中断当连接在 P3.4( T0引脚)的电平发生负跳变时,TL0加
1,产生溢出,置,1” TF0,向 CPU发出中断请求,
同时 TH0的内容 0FFH送 TL0,即 TL0恢复初值 0FFH。
5.10.2 中断和查询结合的方法最高级别中断请求源 IR0接 INT0*输入端,其余的外部中断请求源 IR1~ IR4用,线或,的办法连到 MCS-51
的另一个外中断源输入端,同时还连到 P1口 。
5个外部中断源的排队顺序依此为,IR0~ IR4。
ORG 0013H ; INT1的中断入口
LJMP INT1 ;

INT1,PUSH PSW ; 保护现场
PUSH ACC
JB P1.0,IR1 ; P1.0高,IR1有请求
JB P1.1,IR2 ; P1.1高,IR2有请求
JB P1.2,IR3 ; P1.2高,IR3有请求
JB P1.3,IR4 ; P1.3高,IR4有请求
INTIR,POP ACC ; 恢复现场
POP PSW
RETI ; 中断返回
IR1,IR1的中断处理程序
AJMP INTIR ;
IR2,IR2的中断处理程序
AJMP INTIR ;
IR3,IR3的中断处理程序
AJMP INTIR ;
IR4,IR4的中断处理程序
AJMP INTIR ;