新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > MCS-51单片机的中断系统(2)

MCS-51单片机的中断系统(2)

作者:时间:2016-11-23来源:网络收藏

中断响应过程

中断响应过程为,中断源发出中断请求→对中断请求进行响应→执行中断服务程序→返回主程序。这个过程可分为三个阶段来完成。
1. 中断采样
对于外部中断请求,中断请求信号来自于单片机外部,计算机要想知道有没有中断请求发生,必须对信号进行采样。
① 电平触发方式的外中断请求(IT0/IT1=0)采样到高电平时,表明没有中断请求,IE0或IE1继续为“0”。采样到低电平时,IE0/IE1由硬件自动置“1”,表明有外中断请求发生。
② 脉冲触发式的外中断请求(IT0/IT1=1)在相邻的机器周期采样到的电平由高电平变为低电平时,则IE0/IE1由硬件自动置“1”,否则为“0”。
2. 中断查询
由CPU测试TCON和SCON中的各个中断标志位的状态,确定有那个中断源发生请求,查询时按优先级顺序进行查询,即先查询高优先级再查询低优先级。如果同级,按以下顺序查询:
#INT0→T0→#INT1→T1→ S
如果查询到有标志位为“1”,表明有中断请求发生,接着就从相邻的下一机器周期开始进行中断响应。
3. 中断响应
当CPU查询到中断请求时,由硬件自动产生一条LCALL指令,LCALL指令执行时,首先将PC内容压入堆栈进行断点保护,再把中断入口地址装入PC,使程序转向相应的中断区入口地址。LCALL指令的形式如下:
LCALL addr16 ;addr16:中断入口地址
入口地址已由系统设定,如下:
中断源入口地址
0003H
T0000BH
0013H
T1001BH
S0023H
从表中可以看出,每个中断区只有8个单元,很难安排下一个中断程序,一般是在中断入口地址处加一条跳转指令,跳转到用户的服务程序入口。编写中断服务程序的格式一般如下:
ORG 0000H
SJMP MAIN
ORG 0003H
AJMP 1NJERRVP
MAIN: ···
HERE: SJMP HERE
1NJERRVP: ··· ;中断响应程序
RETI
并不是所有的请求都被响应,当遇到下列情况之一时不响应这些中断请求:
(1)CPU正在处理一个同级或者高级的中断服务
(2)当前指令还没有执行完毕
(3)当前指令是RET、RETI或者是访问IP、IE的指令,执行完这些指令后,还必须再执行一条指令,才响应中断请求。
注意:MCS-51单片机对中断查询结果不作记忆,当有新的查询结果出现时,因为以上原因而被拖延的查询结果将不复存在,其中断请求也就不能再被响应了。

中断请求的撤销

中断响应后,TCON和SCON的中断请求标志位应及时撤销。否则意味着中断请求仍然存在,有可能造成中断的重复查询和响应,因此需要在中断响应完成后,撤销其中断标志。
1. 定时中断请求的撤销
硬件自动把TF0(TF1)清0,不需要用户参与。
2. 串行中断请求的撤销
需要软件清零。
3. 外部中断请求的撤销
(1)脉冲触发方式的外中断请求撤销
中断标志位的清零是自动的,脉冲信号过后就不存在了,因此其撤销是自动的。
(2)电平触发方式的外中断请求撤销
中断标志位的清零是自动的,但是如果低电平持续存在,在以后的机器周期采样时,又会把中断请求标志位(IE 0/IE 1)置位。为此,需要外加电路,把中断请求信号从低电平强制为高电平。

电平触发方式的外中断请求撤销
通过直接置位端#Sd使中断请求信号强制从低电平变为高电平,要实现此功能需要在中断入口地址处加入如下两条指令:
ORL P1, #01H
ANL P1,#0FEH


评论


相关推荐

技术专区

关闭