第5第 中中中统
Dec 30, 2015
第 5 章 中断系统
5.1 微机的输入 / 输出方式 程序控制传送方式
1. 无条件传送方式
2.查询传送方式
中断传送方式
直接存储器存取方式 (DMA)
断点
响应中断请求
继续执行主程序
主程序
返回主程序
RETI
中断服务子程序
采用中断可提高 CPU 的工作效率 , 实现以下功能 :
1. 分时操作
2. 实时处理
3. 故障处理
5.2 中断的概念CPU 中止正在运行的程序,转向为外部设备服务的过程称为中断。当完成中断后, CPU 再回到原来的“断点”继续原来的程序。中断是由外部产生,具有随机性、不可知性。
一、中断系统结构8051 共有五个中断源 , 两个中断优先级
INT0----- 外部中断 0 请求,通过 P3.2 脚输入 INT1----- 外部中断 1 请求,通过 P3.3 脚输入 T0-------- 定时器 / 计数器 0 溢出中断请求 T1-------- 定时器 / 计数器 1 溢出中断请求 TX/RX --- 串行口中断请求 , 当串行口完成一帧数据的发
送或接收时 , 便请求中断 每个中断源都对应一个中断请求标志位 , 它
们分别设置在 TCON 和 SCON 中。
5.3 8051 的中断系统
中断控制器 8259A 方框图
IR0
IR7
::
中断请求寄存
器
IRR
优先权电路
在服务寄存器
ISR
中断屏蔽寄存器 IMR
控 制 逻 辑
数据总线缓冲
器
读 / 写逻辑
级连缓冲 /
比较器
INTA INTR
DB
RDWRA0
CS
CAS0CAS1CAS2
SP / EN 内部总线
MCS-51MCS-51 的中断系统结构图的中断系统结构图返回优先级结构
二、中断控制
定时器控制寄存器 TCON ( 用 6 位 ) 串行口控制寄存器 SCON ( 用 2 位 ) 中断允许寄存器 IE 中断优先级寄存器 IP
中断请求标志 TCON 中的中断标志位
SCON 中的中断标志位 TI RI
串行口发送中断请求标志位
串行口接收中断请求标志位
SCON 中的中断标志位
中断允许控制位 (IE)
EA :总允许位。 EA=0 :禁止一切中断; EA=1 中断开放。ES :串行口中断允许位。 ES=1 :允许 RI 、 TI 引发中断; ES=0 :禁止中断。ET1 、 ET0 :定时器 T1 、 T0 允许位。 ET=1 允许, =0 禁止。EX1 、 EX0 :外中断 / int1 、 /int0 允许位。 ET =1 允许, =0 禁止。
EA X X ES ET1 EX1 ET0 EX0
中断允许寄存器 IE( 0A8H )
中断优先级控制位 (IP)
PS :串行口中断优先级设定位; PT1 、 PT0 :定时器 T1 、 T0 中断优先级设定位; PX1 、 PX0 :外中断 int1 、 0 中断优先级设定位; =1 : 高优先级, =0 :为低优先级。
X X X PS PT1 PX1 PT0 PX0
中断优先级寄存器 IP( 0B8H )
表 同级内第二优先级次序
例如 , 某软件中对寄存器 IE 、 IP 设置如下 :
MOV IE, # 8FH
MOV IP, # 06H
则此时该系统中 :
· CPU 中断允许 ;
· 允许外部中断 0 、 外部中断 1 、 定时器 / 计数器 0 、 定时器 / 计数器 1 提出的中断申请 ;
· 允许中断源的中断优先次序为 :
定时器 / 计数器 0> 外部中断 1> 外部中断 0> 定时器 /
计数器 1 。
X X X PS PT1 PX1 PT0 PX0
EA X X ES ET1 EX1 ET0 EX0
1 0 0 0 1 1 1 1
0 0 0 0 0 1 1 0
优先级结构 由于 IP 寄存器的设定,将 5 个中断源分为两个级别。中断的
发生将遵循下面的 3 条基本原则:
1. 低级中断在响应执行中可被高级中断所中断,反之则不能。
2. 一个中断(不论是什么优先级)一旦得到响应,与它同级的中断则不能再中断它。
3. 当 CPU 同时收到几个同一级别的中断要求时, CPU 响应哪个中断源取决于硬件的查询顺序(见图)。
如何改变中断源的优先级顺序
从中断系统的结构图可以清楚地看出同一级别中 5 个中断源的查询顺序。很明显,要改变这种顺序只能通过 IP 的设置。
如:要想将串行口的级别设为最高时,将 IP 中的 PS 置 1 。 即使用指令: setb ps
或 mov 0b8h,#10h 完成对 IP 设置。
X X X PS PT1 PX1 PT0 PX0IP 寄存器
例 : 能否由高到低安排下列中断源的优先级结构?
定时器 0 串行口中断 外部中断 0 外部中断 1 定时器 1
解答:能。
设定时器 0 、串行口中断为高级别中断;设外部中断0 、外部中断 1 、定时器 1 为低级别中断。再由内部查询顺序即可得到。
三、中断查询与响应条件 在每一个机器周期中,所有的中断源都要按照其顺序检查
一遍。到 S6 状态时,就查找到所有被激活的中断申请并排好优先权。在下一个机器周期的 S1状态,只要不受阻断,就开始响应高级中断。
如果发生下列情况,中断将被阻止: 1 ,同级或高级中断正在执行时; 2 ,当前的机器周期不是指令的最后一个机器周期; 3 , CPU 正在执行的指令是 RETI 或访问 IE、 IP 寄存器
时, CPU 是不会响应中断,而且要等到该指令的下一条指令执行完后中断才能响应。
四、中断响应过程 CPU 查询到某一中断源后,使相应的
“优先级激活触发器”置位,用以阻断同级或低级中断。
在硬件控制下,将当前程序计数器 PC的内容——断点地址进栈 ,并将相应的中断矢量装入 PC,使 CPU 转向对应的中断服务程序,同时清除中断请求标志( TI 、 RI除外)。
中断服务程序最后一条指令是 RETI ,它将清除“优先级激活触发器”,从堆栈中弹出断点地址并装入 PC 中,使 CPU 回到原来的主程序继续运行。
矢量入口的指令应当是转移指令。
(上电启动地址)
( INT0 中断入口)
( T0 中断入口)
( INT1 中断入口)
( T1 中断入口)
(串口中断入口)
0000H
0003H
000BH
0013H
001BH
0023H
注意: 1 、上述过程只保护断点而不保护现场(如 PS
W 的内容)。 2 、不能清除 RI 、 TI 以及外部输入申请信号 /
INT0 和 /INT1 。 3 、中断服务子程序的最后一条指令应是 RET
I ,它将清除“优先级激活”触发器。
编程中应注意 :
(1 ) 在 0000H 放一条跳转到主程序的跳转指令 , 这是因为 MCS-51单片机复位后 , PC 的内容变为 0000H, 程序从 0000H 开始执行 , 紧接着 0003H 是中断程序入口地址 , 故在此中间只能插入一条转移指令 ;
(2 ) 响应中断时 , 先自动执行一条隐指令“ LCALL 001
3H”, 而 0013H至 001BH (定时器 1 溢出中断入口地址)之间可利用的存储单元不够 , 故放一条无条件转移指令。
(3 ) 在中断服务程序的末尾 , 必须安排一条中断返回指令 RETI, 使程序自动返回主程序。
五、 外部中断 在 MCS-51 引脚上有 /INT0 、 /INT1
两个外部的中断输入,作为外部事件的触发信号。
CPU 在每一个机器周期对它们进行一次检测。
系统设定了两种触发方式: 边沿触发(下降沿); 电平触发(低电平)。 具体由 TCON 中的 IT0 、 IT1 来确
定。
MCS-51
/INT0
/INT1
1. 边沿触发方式:在相邻的两个机器周期,如果第一次采集是高电平,第二次采集是低电平时,则 TCON中的标志 IE0 或 IE1 置位。所以,在边沿触发方式时:外部设备发出的边沿信号(高电平和低电平)的时间应大于一个机器周期,否则信号将可能漏检。
2.“ 电平”触发方式: CPU 采集到 /INT0 或 /INT1的引脚为低电平时将激活中断。所以在这种触发方式中,外部的低电平至少应保留一个机器周期。
如果外电路的信号不能满足要求,可使用触发器解决。
MCS-51单片机对 /INT信号的要求
六、中断请求的撤除
以外中断电平触发为例:当 CPU 响应该中断并进入到服务程序后,在执行 RETI返回主程序前,必须将外部的低电平撤掉,否则,当 CPU返回主程序后,会因为外部的低电平信号而再次进入中断,使主程序无法正常运行。
同理,其它中断源也存在类似的问题。所以在使用中断时必须清楚在响应某一中断时,其中断请求(标志)是否要撤除,如何撤除等问题。
MCS-51 的中断标志的撤除方法
中断源 中断标志 说 明 撤除方法INT0 、 INT1
IE0 、 IE1
外部边沿触发 自动清除标志
INT0 、 INT1 无 外部电平触发 电路、软件撤除
T0 、 T1TF0 、 TF
1定时计数器中断 自动清除标志
ES RI 、 TI 串行口中断 软件清除标志
注:此表指使用中断服务程序来处理中断事件时的情况。如果采用查询的方法来处理事件时,都需要软件来清除标志。
撤除外部电平请求信号的方案
MCS-51
INTX
P1 .0
D Q
CP S
外部设备
D型触发器CLR P1.0
SETB P1.0
中断服务程序
RETI
服务程序主体
外设 (CP)
触发器 Q
P1.0
七、中断响应时间(以外部中断 INTx为例) 每个机器周期的 S5P2 时刻, INTx 引脚的电平被锁
存到内部寄存器中,待下一个周期查询。 1 、最短时间:中断请求有效,查询后在下一个周期便开始
执行一条硬件的子程序的调用(时间是两个周期),然后开始执行服务程序的第一条指令。这样从锁存电平的周期到执行中断服务程序,中间相隔 3 个机器周期。
C5C4C3C2C1
电平锁存 中断查询 长调用 执行入口地址中的指令 保护断点,关闭 CPU 中断 转移到中断的入口地址
2 、最长时间:如果中断信号发生在前面所说的 3 种情况时,响应时间就要变长:
第 1 种情况:响应时间取决于正在执行的同级或高级中断的执行时间;
第 2 种情况:指当前 CPU 执行的指令是多周期指令,如乘除法指令
( 4 个周期),最坏情况,还要等 3 个周期。这样响应周期变为 3+3=6个周期;
第 3 种情况:CPU 当前执行的指令是 RETI 或访问 IE 、 IP 寄存器时,
本指令( 1 个周期)没有响应,且下一条指令执行完后才能响应,这样附加的等待时间最长不会超过 5 个周期( 1+4 )。整个响应为 5+3=8 个周期。若为单中断源系统,整个中断响应的时间范围应当是: 3~ 8 个机器周期。
5.4 中断应用程序举例
例 1:
将 P1 口的 P1.4~P1.7 作为输入口 ,P1.0~P1.3 作为输出口 , 要求利用 8031 将开关所设的数据读入单片机内 ,并依次通过 P1.0~P1.3 输出 ,驱动发光二极管 , 以检查 P1.4~P1.7 输入的电平情况 . 采用中断边沿触发方式 , 每次中断完成一次读 / 写操作 .
ORG 0000HAJMP MAINORG 0003HAJMP INSERORG 0030H
MAIN:SETB EX0SETB IT0SETB EA
HERE:SJMP HERE
INSER:MOV A,#0F0H ;P1.4~P1.7 为输入口MOV P1,AMOV A,P1SWAPAMOV P1,ARETIEND
例 2:
用中断电路实现系统的故障显示 , 当系统
的各部分正常工作时 ,四个故障源的输入均为低电平 , 显示灯不亮 , 当某个部分出现故障时 ,
则相应的低电平变为高电平 ,相应的灯亮。
ORG 0000HAJMP MAINORG 0003HAJMP INSERORG 0030H
MAIN: ANL P1,#55H SETB EX0
SETB IT0 SETB EA
HERE: SJMP HEREINSER: JNB P1.0,L1
SETB P1.1L1: JNB P1.2,L2
SETB P1.3L2: JNB P1.4,L3
SETB P1.5L3: JNB P1.6,L4
SETB P1.7L4: RETI
END
5.5 外部中断的扩展
5.5.1 利用定时器扩展外部中断源 当设定时器为计数方式 , 计数初值设置为满量程 FFH, 一旦外部信号从计数器引脚输入一个负跳变时 , 计数器加 1 产生溢出中断从而可实现外部中断。
5.5.2 中断加查询扩展中断源 利用 8051 的两根外部中断输入线 , 每个中断
输入线可以通过“线或”的关系连接多个外部中断源 , 同时利用输入端口线作为各中断源的识别线。
ORG 0003H LJMP INTRP ;INT0 中断服务程序入口
….INTRP: PUSH PSW
PUSH ACCJB P1.0,DV1JB P1.1,DV2JB P1.2,DV3JB P1.3,DV4
EXIT: POP ACCPOP PSWRETI
DV1: …;装置 1 中断服务程序AJMP EXIT
DV2: …;装置 2 中断服务程序AJMP EXIT
DV3: …;装置 3 中断服务程序AJMP EXIT
DV4: …;装置 4 中断服务程序AJMP EXIT
作业
P 95
2 、 9 、 12 、 13 ( 2 )、( 4 )