8.1 80C51的中断系统
一、中断的概念
计算机具有实时处理能力,能对外界发生的事件进行及时处理,这是依靠它们的中断系统来实现的。
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:
二、80C51中断系统的结构
80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套 。
与中断系统工作有关的特殊功能寄存器有中断允许控制寄存器 IE,中断优先级控制寄存器IP以及定时器/计数器控制寄存器TCON等.
8.2、 80C51的中断源
一、中断源
1、外部中断0、1
输入/输出设备的中断请求,掉电、设备故障的中断请求等都可以作为外部中断,从和
引脚输入。有两种触发方式:电平触发(TCON 的IT0和IT1=0)和跳变触发(TCON 的IT0和IT1=1)。
(P3.2)。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。引脚上的高电平与低电平至少应各自保持1个机器周期。
(P3.3)。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
2、 定时器/计数器0、1溢出中断
TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置1位TF0,并向CPU申请中断。 CPU响应中断后,由硬件自动清除TF0或TF1。
TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置1位TF1,并向CPU申请中断。
3、串行接口中断
RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI=1或当串行口发送完一帧串行数据时置位TI=1,向CPU申请中断。
二、中断请求标志(书上没有)
1、TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
2、SCON的中断标志
8.3 80C51中断的控制
一、中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
1:允许 0:禁止
二、中断优先权选择
1、硬件优先
硬件优先——单片机内部有一个默认的中断优先级顺序(6个优先级)
2、软件控制优先
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。
1:优先 0:滞后
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
80C51单片机的中断优先级有三条原则:
8.4 80C51单片机中断处理过程
一、中断响应条件
CPU响应中断的条件是:
同时满足时,CPU才有可能响应中断。
CPU执行程序过程中,在每个机器周期的S5P2期间,中断系统对各个中断源进行采样。这些采样值在下一个机器周期内按优先级和内部顺序被依次查询。
如果某个中断标志在上一个机器周期的S5P2时被置成了1,那么它将于现在的查询周期中及时被发现。接着CPU便执行一条由中断系统提供的硬件LCALL指令,转向被称作中断向量的特定地址单元,进入相应的中断服务程序。
但即使当MCS-51的CPU在每个机器周期的S5P2期间顺序采样各中断请求标志位,如有置位,且下列三种情况都不存在,那么,在下一周期的S1期间响应中断。否则,采样的结果被取消,不产生LCALL指令。
CPU响应中断后,由硬件执行如下功能:
(1)根据中断请求源的优先级高低,使相应的优先级状态触发器置1,
(2)保留断点,即把程序计数器PC的内容推入堆栈保存。
(3)清相应的中断请求标志位IE0、IE1、TF0或TF1。
(4)把被响应的中断服务程序的入口地址送入PC,从而转入相应的中断服务程序。
中断服务程序的最后一条指令必须是中断返回指令RETI。
三、中断响应
中断地址入口:
中断返回 :
RETI指令的具体功能是:
注意,不能用RET指令代替RETI指令。在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点 。
四、中断请求的撤除
CPU响应中断请求后,在中断返回(执行RETI)前,必须撤除请求,否则会错误地再一次引起中断过程。
(1)对于定时器/计数器0、1的中断请求及跳变触发方式的外部中断0、1,CPU在响应中断后用硬件清除了相应的中断请求标志TF0、TF1、IE0、IE1,即自动撤除了中断请求。
(2)对于串行接口中断及定时器/计数器2中断,CPU响应中必须由用户编制的中断服务程序来清除相应的中断标志(软件清除)。
(3)对于电平触发的外部中断,需要外接电路来撤除中断请求信号。
电平触发方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况。例如,并行接口芯片8255的中断请求线在接受读或写操作后即被复位,因此,以其去请求电平触发方式的中断比较方便。