第5章 中断系统 5.1 中断的概述 5.2 AT89C51中断系统 5.3 中断系统的应用
5.1 中 断 的 概 述 1. 中断 中断是指计算机在执行某一程序的过程中, 由于计算机系统内、外的某种原因, 而必须中止原程序的执行, 转去执行相应的处理程序, 待处理结束之后, 再回来继续执行被中止的原程序的过程。 采用了中断技术后的计算机, 可以解决CPU与外设之间速度匹配的问题, 使计算机可以及时处理系统中许多随机的参数和信息, 同时, 它也提高了计算机处理故障与应变的能力。
2. 中断源 中断源是指在计算机系统中向CPU发出中断请求的来源, 中断可以人为设定, 也可以是为响应突发性随机事件而设置。通常有I/O设备、实时控制系统中的随机参数和信息故障源等。
3. 中断优先级 中断优先级越高, 则响应优先权就越高。当CPU正在执行中断服务程序时, 又有中断优先级更高的中断申请产生, 这时CPU就会暂停当前的中断服务转而处理高级中断申请, 待高级中断处理程序完毕再返回原中断程序断点处继续执行, 这一过程称为中断嵌套。
5.2 AT89C51中断系统 5.2.1 中断源及中断向量地址 5.2.2 中断标志与控制 5.2.3 中断系统结构 5.2.4 中断的响应
5.2.1 中断源及中断向量地址
表 5.1 中断服务程序入口地址表 ORG 0003H LJMP 1000H
5.2.2 中断标志与控制 中断标志:标志中断的请求 中断控制:对中断响应的管理控制(允许、 优先级等)
1、定时器控制寄存器TCON (MSB) (LSB) 定时/计数器 外部中断 复位值: 00H TFi:定时器中断溢出标志位(硬件自动) TR1 TF0 TR0 IE1 IT1 IE0 IT0 定时/计数器 外部中断 复位值: 00H TFi:定时器中断溢出标志位(硬件自动) TRi:定时器启停控制位(软件) IEi:外部中断请求标志(硬件自动) ITi:外部中断触发类型选择(软件)1:下降沿 0:低电平
2、串行口控制寄存器SCON 关注复位状态 (MSB) LSB 串行口中断标志 TI:发送中断标志(硬件设置,软件清除) SM0 SM1 SM2 REN TB0 RB0 TI RI 串行口中断标志 TI:发送中断标志(硬件设置,软件清除) RI:接收中断标志(硬件设置,软件清除)
3、中断允许控制寄存器IE AT89C51中断的开放和关闭采用两级控制。 第一级用于控制单片机的能否响应中断。——“总开关” 第二级则用于对单片机的5个(8052有 6个)中断源独立地进行允许或禁止以便用户能灵活使用。
EA:总允许位 ET:定时/计数器溢出中断允许 EX:外部中断允许 ES:串行口中断允许 (MSB) (LSB) IE AFH ADH ACH ABH AAH A9H A8H EA:总允许位 ET:定时/计数器溢出中断允许 EX:外部中断允许 ES:串行口中断允许 所有中断复位状态均为关闭。即:IE=00H 所有允许位均由软件控制,‘1’开中断,‘0’关中断。
复位状态为禁止中断。因此,在中断的主程序中应该有“开中断”的操作。即由软件指令设置相应的中断允许位的数值。设置方法: 1、直接改变IE整个字节值。 如MOV IE,# 84H;1000 0100B开外部1中断 2、直接设置对应的控制位(位地址、位名称、寄存器.位号)。如SETB EX1(IE.2或AAH) 还应注意两级中断打开 SETB EA。
5个中断源共高、低两个优先级,各中断源通过IP的相应位设置优先级。CPU可以实现两级中断嵌套。 PX0 PT0 PX1 PT1 PS PT2 X (MSB) (LSB) BDH BCH BBH BAH B9H B8H ‘1’为高优先级,‘0’为低优先级。 低优先级的中断会因为高优先级的中断请求而再次中断。
如果同样优先级的请求,则按照CPU查询中断请求的顺序响应中断。查询的顺序决定了辅助优先结构。 与位地址对应,由低位到高位查询
例如, 某软件中对寄存器IE、 IP设置如下: MOV IE, # 8FH;1000 1111B MOV IP, # 06H ;0000 0110B 则此时该系统中: · CPU中断允许; · 允许外部中断 0、 外部中断 1、 定时器 /计数器 0、 定时器 /计数器1提出的中断申请; · 允许中断源的中断优先次序为: 定时器 /计数器 0>外部中断 1>外部中断 0>定时器/计数器 1。
5.2.3 中断系统结构
5.2.4 中断的响应 (1) 在每条指令结束后, 系统都自动检测中断请求信号, 如果有中断请求,且CPU处于开中断状态下, 则响应中断。 (2) 保护现场, 在保护现场前, 一般要关中断, 以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。 (3) 中断服务, 即为相应的中断源服务。 (4) 恢复现场, 用堆栈指令将保护在堆栈中的数据弹出来。在恢复现场后应及时开中断。 (5) 返回, 此时 CPU将推入到堆栈的断点地址弹回到程序计数器, 从而使CPU继续执行刚才被中断的程序。
1、中断响应的条件 以下条件不能响应中断: (1) 同级或高优先级的中断已在进行中; (2) 当前的机器周期还不是正在执行指令的最后一个机器周期(换言之, 正在执行的指令完成前, 任何中断请求都得不到响应); (3) 正在执行的是一条RETI或者访问特殊功能寄存器 IE或 IP的指令(换言之, 在RETI或读写IE或IP之后, 不会马上响应中断请求, 而至少执行一条其它指令之后才会响应)。
单片机一旦响应中断请求, 就由硬件完成以下功能: 2、中断响应过程 单片机一旦响应中断请求, 就由硬件完成以下功能: (1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置 1; (2) 执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈; (3) 清除相应的中断请求标志位(串行口中断请求标志 RI和 TI除外); (4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC,从而转入相应的中断服务程序。
例如, 现有外部中断 1 提出申请, 且主程序中有R0、 R1、 DPTR、累加器A需保护, 则编制程序应为: ORG 0000H AJMP MAIN ORG 0013H LJMP INT1 … ORG 0100H MAIN: …; 主程序 ORG 1000H
INT1: PUSH ACC ; 中断服务程序 PUSH DPH PUSH DPL PUSH R0 PUSH R1 POP R1 POP R0 POP DPL POP DPH POP ACC RETI …
编程中应注意: (1) 在 0000H放一条跳转到主程序的跳转指令, 这是因为 MCS-51单片机复位后, PC的内容变为 0000H, 程序从0000H 开始执行, 紧接着 0003H是中断程序入口地址, 故在此中间只能插入一条转移指令; (2) 响应中断时, 先自动执行一条隐指令“LCALL 0013H”, 而 0013H至 001BH(定时器 1 溢出中断入口地址)之间可利用的存储单元不够, 故放一条无条件转移指令。 (3) 在中断服务程序的末尾, 必须安排一条中断返回指令RETI, 使程序自动返回主程序。
(1)定时器中断标志位TF0、TF1:硬件自动撤除 3、中断请求的撤除 (1)定时器中断标志位TF0、TF1:硬件自动撤除 (2)串行中断TI、RI:软件撤除 CLR TI CLR RI (3)外部中断 负边沿请求方式:不会重复请求。 低电平请求方式:外部低电平持续作用,会产生重复的中断请求。必须强制撤除。
1 1、中断请求 2、中断撤除 ANL P1,#0FEH ;清除外部电平 ORL P1,#01H;允许再次中断 CLR IE0;清除中断位
4、中断的返回 RETI指令,返回原程序
5.3 中断系统的应用 把一个外部中断(设为INT0)设置为低电平触发请求中断方式。其中断服务程序的末尾写上如下几条指令: JNB P3.2, $ ; 在INT0变高前原地等待(死循环) JB P3.2, $ ; 在 INT0变低前原地等待(死循环) RETI ; 返回并执行一条指令 例 1 单步操作的中断实现。
JNB P3.2, $ JB P3.2, $ RETI
现在,若INT0保持低电平, 且允许INT0中断, 则CPU就进入外部中断 0 服务程序, 由于有上述几条指令, 它就会停在 JNB处, 原地等待。当INT0 端出现一个正脉冲(由低到高, 再到低)时, 程序就会往下执行, 执行RETI后, 将返回主程序, 往下执行一条指令, 然后又立即响应中断,以等待INT0端出现的下一个正脉冲。 这样在INT0端每出现一个正脉冲, 主程序就执行一条指令, 实现了单步执行的目的, 要注意的是, 这个正脉冲的高电平持续时间不小于3个周期, 以确保CPU能采集到高电平值。
MCS - 51 单片机有两个外部中断输入端, 当有 2 个以上中断源时, 它的中断输入端就不够了。此时, 可以采用中断与查询相结合的方法来实现。 可以使每个中断源都接在同一个外部中断输入端上, 同时利用输入口线作为多中断源情况下各中断源的识别线。 例 2 多中断源。
图 5.6 多中断源
ORG 0003H LJMP INT0 … INT0: PUSH PSW PUSH ACC JB P0.7, DV1 JB P0.6, DV2 JB P0.5, DV3 JB P0.4, DV4 GOBACK: POP ACC POP PSW RETI DV1: … ; 装置1中断服务程序 …
AJMP GOBACK DV2: … ; 装置2中断服务程序 … DV3: … ; 装置3中断服务程序 DV4: … ; 装置4中断服务程序 AJMP GOBACK