第 5章 MCS - 51单片机的中断第 5章 MCS - 51单片机的中断
5.1 中断的概述
5.2 MCS - 51中断系统
5.3 中断系统的应用第 5章 MCS - 51单片机的中断
5.1 中 断 的 概 述
1.
中断是指计算机在执行某一程序的过程中,由于计算机系统内,外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程 。
采用了中断技术后的计算机,可以解决 CPU与外设之间速度匹配的问题,使计算机可以及时处理系统中许多随机的参数和信息,同时,它也提高了计算机处理故障与应变的能力 。
第 5章 MCS - 51单片机的中断
2.
中断源是指在计算机系统中向 CPU发出中断请求的来源,中断可以人为设定,也可以是为响应突发性随机事件而设置 。 通常有 I/O设备,实时控制系统中的随机参数和信息故障源等 。
第 5章 MCS - 51单片机的中断
3,中断优先级中断优先级越高,则响应优先权就越高 。 当 CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,
这时 CPU就会暂停当前的中断服务转而处理高级中断申请,
待高级中断处理程序完毕再返回原中断程序断点处继续执行,这一过程称为中断嵌套 。
第 5章 MCS - 51单片机的中断
4,中断响应的过程
(1) 在每条指令结束后,系统都自动检测中断请求信号,如果有中断请求,且 CPU处于开中断状态下,则响应中断 。
(2) 保护现场,在保护现场前,一般要关中断,以防止现场被破坏 。 保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈 。
(3) 中断服务,即为相应的中断源服务 。
(4) 恢复现场,用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前要关中断,以防止现场被破坏 。 在恢复现场后应及时开中断 。
(5) 返回,此时 CPU将推入到堆栈的断点地址弹回到程序计数器,从而使 CPU继续执行刚才被中断的程序 。
第 5章 MCS - 51单片机的中断
5.2 MCS - 51中断系统图 5.1 MCS - 51中断系统结构框图第 5章 MCS - 51单片机的中断
5.2.1 中断源表 5.1 8051 中 断 源第 5章 MCS - 51单片机的中断
1,特殊功能寄存器 TCON中的标志
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
(MSB) (LSB)
图 5.2 TCON格式第 5章 MCS - 51单片机的中断
2,特殊功能寄存器 SCON
图 5.3 SCON格式
SM0 SM1 SM2 REN TB0 RB0 TI RI
(MSB) LSB
第 5章 MCS - 51单片机的中断
5.2.2 中断控制
1.
MCS - 51单片机有 5个 ( 8052有 6个 ) 中断源,为了使每个中断源都能独立地被允许或禁止,以便用户能灵活使用,它在每个中断信号的通道中设置了一个中断屏蔽触发器 。
只有该触发器无效,它所对应的中断请求信号才能进入
CPU,即此类型中断开放 。 否则,即使其对应的中断标志位置
1,CPU也不会响应中断,即此类型中断被屏蔽了 。 同时 CPU内还设置了一个中断允许触发器,它控制 CPU能否响应中断 。
第 5章 MCS - 51单片机的中断图 5.4 IE格式
EA X ET2 ES ET1 EX1 ET0 EX0
(MSB) (LSB)
第 5章 MCS - 51单片机的中断
2,中断优先级
X X PT2 PS PT1 PX1 PT0 PX0
(MSB) (LSB)
图 5.5 IP的格式第 5章 MCS - 51单片机的中断表 5.2 同级内第二优先级次序第 5章 MCS - 51单片机的中断例如,某软件中对寄存器 IE,IP设置如下,
MOV IE,# 8FH
MOV IP,# 06H
则此时该系统中,
· CPU中断允许 ;
· 允许外部中断 0,外部中断 1,定时器 /计数器 0、
定时器 /计数器 1提出的中断申请 ;
· 允许中断源的中断优先次序为,
定时器 /计数器 0>外部中断 1>外部中断 0>定时器 /计数器 1。
第 5章 MCS - 51单片机的中断
5.2.3 中断响应
1,中断响应的条件
(1) 同级或高优先级的中断已在进行中 ;
(2) 当前的机器周期还不是正在执行指令的最后一个机器周期 ( 换言之,正在执行的指令完成前,任何中断请求都得不到响应 ) ;
(3) 正在执行的是一条 RETI或者访问特殊功能寄存器
IE或 IP的指令 ( 换言之,在 RETI或读写 IE或 IP之后,不会马上响应中断请求,而至少执行一条其它指令之后才会响应)。
第 5章 MCS - 51单片机的中断
2.
单片机一旦响应中断请求,就由硬件完成以下功能,
(1) 根据响应的中断源的中断优先级,使相应的优先级状态触发器置 1;
(2) 执行硬件中断服务子程序调用,并把当前程序计数器
PC的内容压入堆栈 ;
(3) 清除相应的中断请求标志位 ( 串行口中断请求标志 RI和 TI除外 ) ;
(4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入 PC,从而转入相应的中断服务程序。
第 5章 MCS - 51单片机的中断表 5.3
第 5章 MCS - 51单片机的中断例如,现有外部中断 1 提出申请,且主程序中有 R0,R1、
DPTR,累加器 A需保护,则编制程序应为,
ORG 0000H
AJMP MAIN
ORG 0013H
LJMP INT1

ORG 0100H
MAIN,…;

ORG 1000H
第 5章 MCS - 51单片机的中断
INT1,PUSH ACC ;
PUSH DPH
PUSH DPL
PUSH 0
PUSH 1
POP 1
POP 0
POP DPL
POP DPH
POP ACC
RETI

第 5章 MCS - 51单片机的中断编程中应注意,
(1) 在 0000H放一条跳转到主程序的跳转指令,这是因为
MCS-51单片机复位后,PC的内容变为 0000H,程序从 0000H
开始执行,紧接着 0003H是中断程序入口地址,故在此中间只能插入一条转移指令 ;
(2) 响应中断时,先自动执行一条隐指令,LCALL
0013H”,而 0013H至 001BH( 定时器 1 溢出中断入口地址 ) 之间可利用的存储单元不够,故放一条无条件转移指令 。
(3) 在中断服务程序的末尾,必须安排一条中断返回指令
RETI,使程序自动返回主程序 。
第 5章 MCS - 51单片机的中断
5.3 中断系统的应用例 1 单步操作的中断实现 。
把一个外部中断 ( 设为 INT0]) 设置为电平激活方式 。
其中断服务程序的末尾写上如下几条指令,
JNB P3.2,$ ; 在 INT0变高前原地等待 (死循环 )
JB P3.2,$; 在 INT0变低前原地等待 (死循环 )
RETI ;
第 5章 MCS - 51单片机的中断现在,若 INT0保持低电平,且允许 INT0中断,则 CPU就进入外部中断 0 服务程序,由于有上述几条指令,它就会停在 JNB
处,原地等待 。 当 INT0 端出现一个正脉冲 ( 由低到高,再到低 ) 时,程序就会往下执行,执行 RETI后,将返回主程序,往下执行一条指令,然后又立即响应中断,以等待 INT0端出现的下一个正脉冲 。 这样在 INT0端每出现一个正脉冲,主程序就执行一条指令,实现了单步执行的目的,要注意的是,这个正脉冲的高电平持续时间不小于 3个周期,以确保 CPU能采集到高电平值 。
第 5章 MCS - 51单片机的中断例 2 多中断源 。
MCS - 51 单片机有两个外部中断输入端,当有 2 个以上中断源时,它的中断输入端就不够了 。 此时,可以采用中断与查询相结合的方法来实现 。 可以使每个中断源都接在同一个外部中断输入端上,同时利用输入口线作为多中断源情况下各中断源的识别线 。
第 5章 MCS - 51单片机的中断图 5.6 多中断源第 5章 MCS - 51单片机的中断
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

第 5章 MCS - 51单片机的中断
AJMP GOBACK
DV2,…; 装置 2

AJMP GOBACK
DV3,…; 装置 3

AJMP GOBACK
DV4,…; 装置 4

AJMP GOBACK