第五章
80C51单片微机的
中断系统原理及应用
中断概念的出现,是计算机系统结构设计中的重大变革。
现代计算机中操作系统实现的管理调度,其物质基础就是丰富的
中断功能和完善的中断系统。一个 CPU资源要面向多个任务,出
现资源竞争,而中断技术实质上是一种资源共享技术。单片微机
的中断系统包括它的硬件和软件编程。
⒈ 中断系统的几个概念:
⑴ 中断:
程序执行过程中, 允许外部或内部事件通过硬件打断
程序的执行, 使其转向为处理外部或内部事件的中断服务程
序中去;完成中断服务程序后, CPU继续原来被打断的程序,
这样的过程称为中断响应过程, 如 图 5- 1所示 。
⑵ 中断源:
能产生中断的外部和内部事件 。
5.1 中断系统概述
5.1.1单片微机的中断系统需要解决的问题
⑶ 中断优先级:
当有几个中断源同时申请中断时, 或者 CPU正在处理某
中断源服务程序时, 又有另一中断源申请中断, 那么 CPU必须
要确定优先去处理谁的能力, 称为中断优先级 。
⑷ 中断嵌套:
优先级高的事件可以中断 CPU正在处理的低级的中断服
务程序, 待完成了高级中断服务程序之后, 再继续被打断的低
级中断服务程序 。 这是中断嵌套问题 。
⒉ 单片微机的中断系统需要解决的问题
需要解决的问题主要有三点:
⑴ 当单片微机内部或外部有中断申请时, CPU能及时响
应中断, 停下正在执行的任务, 转去处理中断服务子程序, 中断
服务处理后能回到原断点处继续处理原先的任务;
⑵ 当有多个中断源同时申请中断时, 应能先响应优先级高
的中断源, 实现中断优先级的控制;
⑶ 当低优先级中断源正在享用中断服务时,若这时优先级
比它高的中断源也申请中断,要求能停下低优先级中断源的服务
程序转去执行更高优先级中断源的服务程序,实现中断嵌套,并
能逐级正确返回原断点处。
⒈ 实现 CPU与外部设备的速度配合
由于应用系统的许多外部设备速度较慢,可以通过中断的方
法来协调快速 CPU与慢速外部设备之间的工作。
⒉ 实现实时控制
在单片微机中,依靠中断技术能实现实时控制。实时控制要
求计算机能及时完成被控对象随机提出的分析和计算任务。在自动
控制系统中,要求各控制参量随机地在任何时刻可向计算机发出请
求,CPU必须作出快速响应、及时处理。
5.1.2 中断的主要功能
⒊ 实现故障的及时发现及处理
单片微机应用中由于外界的干扰、硬件或软件设计中
存在问题等因素,在实际运行中会出现硬件故障、运算错误、
程序运行故障等,有了中断技术,计算机就能及时发现故障
并自动处理。
⒋ 实现人机联系
比如通过键盘向单片微机发出中断请求,可以实时干
预计算机的工作。
80C51的中断系统包括中断源、中断允许寄存器 IE、中
断优先级寄存器 IP、中断矢量等。
在 80C51中, 只有两级中断优先级 。 图 5–2是 80C51的中
断系统结构示意图 。
5.2 80C51 的中断系统
80C51中有 5个中断源; 80C52中增加了一个中断源 ——定时
器/计数器 T2,即有 6个中断源 。 每一个中断源都能被程控为高优
先级或低优先级 。 80C51五个中断源中包括两个外部中断源和三个
内部中断源 。
两个外部中断源 INT0和 INT1,外部设备的中断请求信号, 掉
电等故障信号都可以从 INT0或 INT1引脚输入 。
三个内部中断源为 T0和 T1的定时 /计数谥出中断源和串行口
发送或接收中断源 。
5.2.1 中断源
1,外部中断
外部中断是由外部信号引起的, 共有两个外部中断, 它们的
中断请求信号分别从引脚 INT0 (P3.2) 和 INT1 (P3.3) 上引入 。
外部中断请求有两种信号触发方式, 即电平有效方式和跳变
有效方式, 可通过设置有关控制位进行定义 。
当设定为电平有效方式时, 若 INT0或 INT1引脚上采样到有效
的低电平, 则向 CPU提出中断请求;当设定为跳变有效方式时, 若
INT0或 INT1引脚上采样到有效负跳变, 则向 CPU提出中断请求 。
⑴ ( P3,2) —外部中断 0。
当 IT0( TCON,0) = 0 时, 低电平有效;当
IT0( TCON,0) = 1 时, 下降沿有效 。
⑵ ( P3,3) ——外部中断 1。
当 IT1( TCON,2) = 0 时, 低电平有效;当
IT1( TCON,2) =1 时, 下降沿有效 。
⒉ 定时中断
为满足定时或计数的需要而设置的 。 当计数器发生计数
溢出时, 表明设定的定时时间到或计数值已满, 这时可以向
CPU申请中断 。 由于定时器 /计数器在单片微机芯片内部, 所以
定时中断属于内部中断 。 80C51有两个源, 即:
⑴ TF0——T0溢出中断 。
⑵ TF1——T1溢出中断。
⒊ 串行中断
每当串行口发送或接收一组串行数据时, 就产生一个中
断请求 。
RXD,TXD——串行中断 。
当 CPU响应中断时, 由硬件直接产生一个固定的地址, 即
矢量地址, 由矢量地址指出每个中断源设备的中断服务程序的
入口, 这种方法通常称为矢量中断 。 很显然, 每个中断源分别
有自已的中断服务程序, 而每个中断服务程序又有自已的矢量
地址 。 当 CPU识别出某个中断源时, 由硬件直接给出一个与该中
断源相对应的矢量地址, 从而转入各自中断服务程序 。 中断矢
量地址见 表 5- 1。
5.2.2 中断矢量
INT0,INT1,T0 及 T1的中断标志存放在 TCON(定时器/计
数器控制)寄存器中;串行口的中断标志存放在 SCON(串行口控
制)寄存器中。
定时器/计数器控制寄存器 TCON字节地址为 88H,其格式如下,
IT1( TCON,2),IT0( TCON,0)分别为 T0,T1的中断申请
触发方式控制位。
5.3 中断的控制
5.3.1中断标志
TF1( TCON,7) —T1计数溢出,由硬件置位,响应中断时由硬
件复位。不用中断时用软件清 0。
TF0( TCON,5) —T0计数溢出, 由硬件置位, 响应中断时由硬
件复位 。 不用中断时用软件清 0。
IE1( TCON,3) —IE1= 1时, 外部中断 1向 CPU申请中断 。
IE0( TCON,l) —IE0= 1时, 外部中断 0向 CPU申请中断 。
串行口控制寄存器 SCON字节地址为 98H,其格式如下:
低两位锁存接收中断源 RI和发送中断源 TI。
TI( SCON,1),串行口发送中断源 。
发送完一帧, 由硬件置位 。 响应中断后, 必须用软件清 0。
RI( SCON,0),串行口接收中断源 。
接收完一帧, 由硬件置位 。 响应中断后, 必须用软件清 0。
中断允许和禁止由中断允许寄存器 IE控制 。
中断允许寄存器 IE的格式如下:
5.3.2 中断允许控制
IE寄存器中各位设置:为 0时, 禁止中断;为 1时, 允许中
断 。
系统复位后 IE寄存器中各位均为 0,此时禁止所有中断 。
与中断有关的控制位共 6位, 即:
⑴ EX0( IE,0) ——外部中断 0中断允许位 。
⑵ ET0( IE,1) ——T0中断允许位 。
⑶ EX1( IE,2) ——外部中断 1中断允许位 。
⑷ ET1( IE,3) —— T1中断允许位 。
⑸ ES( IE,4) ——串行口中断允许位 。
⑹ EA( IE,7) ——CPU中断允许位。当 EA= 1,允许
所有中断开放,总允许后,各中断的允许或禁止由各中断源的
中断允许控制位进行设置;当 EA= 0时,屏蔽所有中断。
80C51通过中断允许控制寄存器对中断的允许 (开放 ) 。
实行两级控制,即以 EA位作为总控制位,以各中断源的
中断允许位作为分控制位。只有当总控制位 EA有效时,即开放
中断系统,这时各分控制位才能对相应中断源分别进行开放或
禁止。
在 80C51中有高, 低两个中断优先级, 通过中断优先级
寄存器 IP来设定 。
中断优先级寄存器 IP的格式如下:
IP寄存器中各位设置:为 0时, 为低中断优先级;为 1时, 设为高
中断优先级 。
系统复位后 IP寄存器中各位均为 0,即此时全部设定为低中断优
先级。
5.3.3 中断优先 级
中断优先级控制, 除了中断优先级控制寄存器之外, 还
有两个不可寻址的优先级状态触发器, 其中一个用于指示某一
高优先级中断正在进行服务, 而屏蔽其它高优先级中断;另一
个用于指示某一低优先级中断正在进行服务, 从而屏蔽其它低
优先级中断, 但不能屏蔽高优先级中断 。
在中断执行过程中, 高中断优先级可以中断低中断优先
级的中断过程 。 但是若在中断服务程序中, 关掉所有中断
( CLR EA) 或关掉部分中断时除外 。
当 CPU同时接收到两个不同优先级的中断请求时,先响
应高优先级的中断,如果 CPU同时接收到的是几个同一优先级
的中断请求时,则由内部的硬件查询序列确定它们的优先服务
次序,
在同一优先级内有一个由内部查询序列确定的笫二个优
先级结构 。 其排列如下:
中断源 中断优先级
⒈ 外部中断 0 最高
⒉ 定时器 T0中断
⒊ 外部中断 1
⒋ 定时器 T1中断
⒌ 串行口中断
⒍ 定时器 T2中断 最低
80C51是一个两级中断系统。但是通过软件可以模仿第三
优先级。
INT0,INT1的中断触发方式有两种:
电平触发方式, 低电平有效;跳变触发方式, 电平发生由高到低
的跳变时触发 。
这两种触发方式可由设置 TCON寄存器中的 IT1( TCON,2), IT0
( TCON,0) 中断申请触发方式控制位来选择:设置 IT1,IT0= 0,
选择电平触发方式;设置 IT1,IT0= l,选择跳变触发方式, 即
当 INT0,INT1引脚检测到前一个机器周期为高电平, 后一个机器
周期为低电平时, 则置位 IE0,IE1且向 CPU申请中断 。
5.3.4 外部中断触发方式
由于 CPU每个机器周期采样 INTO,INT1引脚信号一
次, 为确保中断请求被采样到, 外部中断源送 INTO,INT1
引脚的中断请求信号应至少保持一个机器周期 。 如果是跳
变触发方式, 外部中断源送 INT0,INT1引脚的中断请求信
号高, 低电平应至少各保持一个机器周期, 才能确保 CPU采
集到电平的跳变;如果是电平触发方式, 则外部中断源送
INT0,INT1引脚请求中断的低电平有效信号, 应一直保持
到 CPU响应中断为止 。
CPU响应中断请求,转向中断服务程序执行,在其执行中
断返回指令( RETI)之前,中断请求信号必须撤除,否则将会
再一次引起中断而出错。
中断请求撤除的方式有三种:
1,由单片微机内部硬件自动复位 。
对于 T0,T1 的溢出中断和采用跳变触发方式的外部中断
请求, 在 CPU响应中断后, 由内部硬件自动清除 中断标志 TF0和
TF1,IE0和 IE1,而自动撤除中断请求 。
5.3.5 中断请求的撤除
2,应用软件清除相应标志 。
对于串行接收/发送中断请求和 80C52中的 T2的溢出和捕
获中断请求, 在 CPU响应中断后, 必须在中断服务程序中应用软
件清除 RI,TI,TF2和 EXF2这些中断标志, 才能撤除中断 。
3.采用外加 硬件结合软件清除中断请求。
对于采用电平触发方式的外部中断请求, 中断标志的撤
消是自动的, 但中断请求信号的低电平可能继续存在, 在以后
机器周期采样时又会把已清, 0”的 IE0,IE1标志重新置, 1”,
再次申请中断 。
保证在中断响应后把中断请求信号从低电平强制改变为
高电平 。 可在系统中加入如 图 5-3 所示电路 。
从图 5-3 中可看到, 用 D触发器锁存外部中断请求低电平, 并通
过触发器输出端 Q送 /INT0或 /INT1,所以 D触发器对外部中断请求
没有影响 。 但在中断响应后, 为了撤消低电平引起的中断请求,
可利用 D触发器的直接置位端 SD来实现 。 采用 80C51的一根 I/O口
线来控制 SD端 。 只要在 SD端输入一个负脉冲即可使 D触发器置
,1”,从而撤消了低电平的中断请求信号 。
所需负脉冲可以通过在中断服务程序中增加以下两条指令
得到:
ANL P1,#0FEH ; Q置 1(SD为直接置位端, 低电平有效 )
ORL P1,#01H ; SD无效
使 P1.0输出一个负脉冲, 其持续时间 为两个机器周期, 足以使 D
触发器置位, 撤除低电平中断请求 。 第二条指令是必要的, 否则
D触发器的 Q端始终输出, 1”,无法再接受外部中断请求 。
从中断请求发生直到被响应去执行中断服务程序, 这是一
个很复杂的过程 。 而整个过程均在 CPU的控制下有规律的进行 。
中断响应过程的时序如 图 5- 4所示 。
⒈ 中断采样
中断采样是针对外部中断请求信号进行的,而内部中断
请求都发生在芯片内部,可以直接置位 TCON或 SCON中的中断请
求标志。在每个机器周期的 S5P2(笫五状态的第二节拍 )期间,
各中断标志采样相应的中断源,并置入相应标志。
5.4 中断响应过程和响应时间
5.4.1中断的响应过程
⒉ 中断查询
若查询到某中断标志为 1,则按优先级的高低进行处理, 即
响应中断 。
80C51的中断请求都汇集在 TCON和 SCON两个特殊功能寄存器中 。
而 CPU则在下一机器周期的 S6期间按优先级的顺序查询各中断标志 。
先查询高级中断, 再查询低级中断 。 同级中断按内部中断优先级序
列查询 。 如果查询到有中断标志位为, 1”, 则表明有中断请求发生,
接着从相邻的下一个机器周期的 S1状态开始进行中断响应 。
⒊ 中断响应
响应中断后, 由硬件自动生成长调用指令, LCALL”,其格
式为 LCALL addr16,而 addr16就是各中断源的中断矢量地址 (参
见 表 5-1)。
⒊ 中断响应
响应中断后, 由硬件自动生成长调用指令, LCALL”,其格
式为 LCALL addr16,而 addr16就是各中断源的中断矢量地址 (参
见 表 5-1)。
先将程序计数器 PC的内容压入堆栈进行保护, 先低位地址, 后高
位地址, 同时堆栈指针 SP加 2。
将对应中断源的中断矢量地址装入 PC,去执行中断服务程
序 。 由于各中断矢量区仅 8个字节, 在中断矢量区中安排一条无条
件转移指令, 使程序执行转向在其它地址中存放的中断服务程序 。
中断服务程序由中断矢量地址开始执行, 直至遇到 RETI为
止 。 执行 RETI,一是撤销中断申请, 弹出断点地址进入 PC,先弹
出高位地址, 后弹出低位地址, 同时堆栈指针 SP减 2,恢复原程序
的断点地址执行;二是恢复中断触发器原先状态 。
中断响应是有条件的, 在接受中断申请时, 如遇下列情况
之一时, 硬件生成的长调用指令, LCALL”将被封锁:
⑴ CPU正在执行同级或高一级的中断服务程序中 。 因为
当一个中断被响应时, 其对应的中断优先级触发器被置, 1”,封
锁了同级和低级中断;
⑵ 查询中断请求的机器周期不是执行当前指令的最后一个
周期 。 目的在于使当前指令执行完毕后, 才能进行中断响应, 以
确保当前指令的完整执行;
⑶ 当前正在执行 RETI指令或执行对 IE,IP的读/写操作
指令 。 80C51中断系统的特性规定, 在执行完这些指令之后, 必
须再继续执行一条指令, 然后才能响应中断 。
中断的执行过程与调用子程序有许多相似点:
⑴ 都是中断当前正在执行的程序, 转去执行子程序或
中断服务程序 。
⑵ 都是由硬件自动地把断点地址压入堆栈, 然后通过
软件完成现场保护 。
⑶ 执行完子程序或中断服务程序后, 都要通过软件完
成现场恢复, 并通过执行返回指令, 重新返回到断点处, 继
续往下执行程序 。
⑷ 二者都可以实现嵌套, 如中断嵌套和子程序嵌套 。
中断的执行与调用子程序也有一些大的差别, 比如:
⑴ 中断请求信号可以由外部设备发出, 是随机的, 比如
故障产生的中断请求, 比如按键中断等;子程序调用却是由软
件编排好的 。
⑵ 中断响应后由固定的矢量地址转入中断服务程序, 而
子程序地址由软件设定 。
⑶ 中断响应是受控的,其响应时间会受一些因素影响;
子程序响应时间是固定的。
一般来说, 在单级中断系统中, 中断的响应时间最短为 3
个机器周期, 最长为 8个机器周期 。
当中断请求标志位查询占 1个机器周期,而这个机器周期
又恰好是指令的最后一个机器周期,在这个机器周期结束后,
CPU即响应中断,产生硬件长调用 LCALL指令,执行这条长调
用指令需要 2个机器周期,这样,中断响应时间为 3个机器周期。
5.4.2 中断响应时间
中断响应时间最长为 8个机器周期 。 如果 CPU正在执
行的是 RETI指令或访问 IP,IE指令, 则等待时间不会多于 2
个机器周期, 而中断系统规定把这几条指令执行完必须再继
续执行一条指令后才能响应中断, 如这条指令恰好是 4个机器
周期长的指令 (比如乘法指令 MUL或除法指令 DIV), 再加上
执行长调用指令 LCALL所需 2个机器周期, 总共需要 8个机器
周期 。
如果中断请求被前面所列三个条件之一所阻止, 不能
产生硬件长调用 LCALL指令, 那么所需的响应时间就更长些 。
如果正在处理同级或优先级更高的中断, 那么中断响应的时
间还需取决于处理中的中断服务程序的执行时间 。
在 80C51系列单片微机中, 一般只有两个外部中断请求
输入端 INT0,INT1 。 当某个系统需要多个外部中断源时, 可
以通过增加, OC门, 结合软件来扩展;当定时器 /计数器在系
统中有空余时, 也可以通过对计数器计数长度的巧妙设置, 使
定时器 /计数器的外部输入脚 (T0或 T1) 成为外部中断请求输入
端 。
5.5 外部中断源的扩展
引入芯片本身的外部中断请求输入端 ( INT0,INT1)
就可很方便地扩展多个外部中断源 。 图 5–5 就是占用一个 80C51
的 INT0( 或 INT1) 扩展 4个外部中断源的电路 。
4个扩展外部中断源中有一个或几个出现高电平, 反相器
输出为 0,引起 INT0低电平触发中断, 所以这些中断源都是电
平触发方式 。 当满足外部中断请求条件时, 则 CPU响应中断,
转入 0003H单元开始执行中断服务程序 。
5.5.1 采用,OC门”经“线或”后实现
在中断服务程序中, 由软件设定的顺序查询外中断哪一
位是高电平, 然后进入该中断处理程序 。 查询的顺序就是外部
扩展中断源的中断优先级顺序 。 外部中断源查询的流程图示于
图 5- 6。
INT0的中断服务程序如下:
PINTO,PUSH PSW ;保护现场
PUSH ACC
JB P1.0,LOOP1 ;转向中断服务程序 1
JB P1.l,LOOP2 ;转向中断服务程序 2
JB P1.2,LOOP3 ;转向中断服务程序 3
JB P1.3,LOOP4 ;转向中断服务程序 4
INTEND,POP ACC ;恢复现场
POP PSW
RETI
LOOP1,… ;中断服务程序 1
AJMP INTEND
LOOP2,… ;中断服务程序 2
AJMP INTEND
LOOP3,… ;中断服务程序 3
AJMP INTEND
LOOP4,… ;中断服务程序 4
AJMP INTEND
利用 T0或 T1的外部事件输入引脚 T0,T1作为边沿触发
的外部中断源。这时应设置定时器 /计数器为计数器方式,而计
数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器
加 1后即溢出,向 CPU申请中断。
如果以 T0,T1的计数脉冲输入作为外部中断请求输入,
T0,T1的中断矢量用做第三、笫四个扩展的外部中断矢量,T0、
T1的中断服务程序入口地址作为扩展的外部中断服务入口地址,
即实现了外部中断的扩展。
当 T2用做波特率发生器时, 若 EXEN2置 1,则 T2EX端的
信号产生负跳变时, EXF2将置 1,但不会发生重装载或捕获操
作 。 这时, T2EX可以作为一个附加的外部中断源 。
5.5.2 通过片内定时器 /计数器来实现
例,把外部中断请求信号 2连到 T1引脚上,T1设为方式 2,即 8
位自动重装载方式,时间常数设为满刻度值 FFH
外部中断的服务程序入口地址存放在 T1的中断矢量区中。其初始
化程序段如下:
ORG 0000H
AJMP MAIN
ORG 001BH ; T1中断矢量用作外部中断 2;的中断矢量
LJMP INT2
ORG 0030H
MAIN,MOV TMOD,#60H ;设 T1计数器方式 2
MOV TL1,#0FFH;置 T1计数常数
MOV TH1,#0FFH
SETB EA ;开中断
SETB ET1 ;允许计数器 1中断
SETB TR1 ;启动计数
------
INT2,------ ;外部中断 2服务程序
80C51的中断系统中,允许用户单步运行程序。一般是
设置一个单步键 (STEP),用以产生脉冲,按一次 STEP键就执
行一条指令,通过检查结果来检查每条指令执行的正确与否。
80C51中断结构有一个重要特性,即执行中断返回指令
RETI后,必须至少执行一条其它指令后,才能响应新的中断。
典型方法是使用外部中断,并将其设为电平触发方式。
硬件上,把按键产生的脉冲连到 INT0(P3.2)引脚,作为
外部中断 0的中断请求信号,并把电路设计为不按键时为低电平,
按一次键产生一个正脉冲。
5.6 80C51的单步操作
软件上,需编制外部中断 0的中断服务程序,在中断服务程序的
末尾为 ∶
JNB P3.2,$ ; INT0 =0,则等待
JB P3.2,$ ; INT0=1,则等待
RETI ;中断返回
在没有按键时,INT0=0,中断请求有效,响应中断后
执行中断服务程序,在执行到 JNB P3.2,$指令时等待。当按
下单步键后产生一个正脉冲,执行中断返回,再执行一条指令
后,由于已为低电平,所以单片微机再次响应中断,并进入中
断服务程序等待。从而实现了按一次键执行一条指令的功能。
80C51共有 5个中断源,由 4个特殊功能寄存器 TCON、
SCON,IE和 IP进行管理和控制。对于 80C52/ 80C32单片微机,
增加了一个 16位的定时器/计数器 T2中断请求。
在 80C51中, 需要用软件对以下 5个内容进行设置:
⑴ 中断服务程序入口地址的设定 。
⑵ 某一中断源中断请求的允许与禁止 。
⑶ 对于外部中断请求, 还需进行触发方式的设定 。
⑷ 各中断源优先级别的设定 。
⑸ CPU开中断与关中断 。
5.7 中断服务程序的设计
中断程序一般包含中断控制程序和中断服务程序两部分。
中断控制程序即中断初始化程序, 一般不独立编写, 而是包
含在主程序中, 根据上述的 5点通过编写几条指令来实现 。
例, 试编写设置外部中断 INT0和串行接口中断为高优先级,
外部中断 INT1为低优先级 。 屏蔽 T0 和 T1中断请求的初始化程
序段 。
根据题目要求, 只要能将中断请求优先级寄存器 IP的第 0,4
位置, l”。 其余位置, 0”,将中断请求允许寄存器的第 0,2、
4,7位置, l”,其余位置, 0”就可以了 。
编程如下,ORG 0000H
SJMP MAIN
ORG 0003H
LJMP INT0INT ;设外部中断 /INT0中断矢量
ORG 0013H
LJMP INT1INT ;设外部中断 /INT1中断矢量
ORG 0023H
LJMP SIOINT ;设串行口中断矢量
ORG 0030H
MAIN,…
MOV IP,#00010001B ;设外部中断 INT0和;串行口中断为高优先级
MOV IE,#10010101B;允许 INT0,INT1、;串行口中断, 开 CPU中断
中断响应很突出的一点是它的随机性。
⑴ 保护断点和现场、恢复断点和现场
中断服务程序在调用和返回时, 也有一个保护断点和现场,
恢复断点和现场的问题 。
在中断响应过程中, 断点的保护主要由硬件电路自动实现 。
它将断点压入堆栈, 再将中断服务程序的入口地址送入程序计数
器 PC,使程序转向中断服务程序, 即为中断源的请求服务 。
所谓现场是指中断发生时单片微机中存储单元, 寄存器, 特
殊功能寄存器中的数据或标志位等 。 在 80C51中, 现场一般包括累
加器 A,工作寄存器 R0~ R7以及程序状态字 PSW等 。
保护的方法可以有以下几种:
① 通过堆栈操作指令 PUSH direct;
② 通过工作寄存器区的切换;
③ 通过单片微机内部存储器单元暂存 。
现场保护一定要位于中断服务程序的前面 。
在结束中断服务程序返回断点处之前要恢复现场, 与保护现
场的方法相对应 。 而恢复断点也是由硬件电路自动实现的, 中断服
务程序的最后一条指令必须是 RETI指令 。
⑵ 对中断的控制
80C51单片微机具有多级中断功能 ( 即多重中断嵌套 ),
为了不至于在保护现场或恢复现场时, 由于 CPU响应其它中断请
求, 而使现场破坏 。 一般规定, 在保护和恢复现场时, CPU不响
应外界的中断请求, 即关中断 。 因此, 在编写程序时, 应在保护
现场和恢复现场之前, 关闭 CPU中断;在保护现场和恢复现场之
后, 再根据需要使 CPU开中断 。
对于重要中断, 不允许被其它中断所嵌套 。 除了设置中断
优先级外, 还可以采用关中断的方法, 彻底屏蔽其它中断请求,
待中断处理完之后再打开中断系统 。
END
图 5–1中断响应过程
图 5–2 80C51的中断系统结构示意图
图 5–3 电平方式外部中断请求的撤消电路
图 5–4 中断响应过程的时序
图 5–5 外部中断源的扩展电路
图 5–6 外部中断源查询流程图
中断源 中断矢量地址
外部中断 0( /INT0) 0003H
定时器 /计数器 0( T0) 000BH
外部中断 1( /INT1) 0013H
定时器 /计数器 1( T1) 001BH
串行口( RI,TI) 0023H
定时器 /计数器 2 002BH
表 5-1 中断矢量地址