单片机 第5章 中断系统
2. CPU响应中断的过程
单片机一旦响应中断请求, 就由硬件完成以下功能: (1) 保留断点,执行硬件中断服务子程序调用, 并把当前 程序计数器PC的内容压入堆栈; (2) 自动清除相应的中断请求标志位(串行口中断请求标 志 RI和 TI除外);
(3) 把被响应的中断源所对应的中断服务程序的入口
5.1 中断的概述
日常中断的例子
5.1.1 什么是中断?
中断是指计算机在执行某段程序的过
程中, 由于计算机系统内、外的某种原因, 暂时中止原程序的执行, 转去执行相应的 处理程序, 并中断服务程序执行完后, 再回 来继续执行被中断的原程序的过程。
图5.1 中断过程示意图
5.1.2 中断的作用
例5-2 设有如下要求,将T0、外中断1设 为高优先级,其它为低优先级,求IP的值。
解:IP的首3位没用,可任意取值,设为000,后面 根据要求写就可以了。
位
符号
D7 X 0
D6 X 0
D5 X 0
D4 PS 0
D3 PT1 0
D2 PX1 1
D1 PT0 1
D0 PX0 0
值
IP的值就是06H。
最 高
最 低
MCS-51系列单片机中断响应原则:
(1)高级中断请求可以中断正在执行的低级中断。 (2)同级或低级中断请求不能中断正在执行的中断。 (3)多个中断源同时向CPU申请中断,首先响应优先级 别最高的中断请求;多个同级中断源同时向CPU申 请中断,CPU通过内部硬件查询,按自然优先级确 定优先响应哪一个中断请求。
4.中断优先级寄存器IP(单元地址B8H)
MCS-51单片机有两个中断优先级:高级中断和低级中断。
每一个中断源都可以通过编程确定为高优先级中断或低 优先级中断。
当有多个中断源提出中断请求时,CPU先响应高级中断, 然后再响应低级中断。
若CPU当前正在为低优先级中断服务,在开中断的条件 下,它能被另一个高优先级中断请求所中断,转去为高级中 断服务,再返回到被中断了的低级中断的服务程序,这即为 中断嵌套。
(MSB)AFH AEH ADH D7 D6 D5 位 符号 值 EA × × ACH ABH AAH A9H A8H(LSB) D4 D3 D2 D1 D0 ES ET1 EX1 ET0 EX0
1
0
0
0
1
1
0
0
(a)用字节操作指令实现 MOV IE,#8CH
或
MOV
A8H,#8CH
(b)用位操作指令实现 SETB EA ;使 EA=1,CPU开中断 SETB ET1 ;使ET1=1,定时/计数器1允许中断 SETB EX1 ;使EX1=1,外中断T1允许中断
2. 串行口控制寄存器SCON(单元地址98H)
(MSB)9FH 9EH 9DH 9CH 9BH 9AH 99H 98H(LSB)
D7
D6
D5
D4
D3
D2
D1
D0
SM0 SM1 SM2 REN TB0
RB0
TI
RI
TI (SCON.1)——串行发送中断标志。
RI (SCON.0)——串行接收中断标志。
中断管理和控制程序一般不独立编写,而是包 含在主程序中,根据需要通过几条指令来完成。
5.3.1 主程序
MCS-51系列单片机复位后, (PC)=0000H,而0003H~002BH分别为各中断源的入 口地址。所以编程时应在0000H处写一跳转指令(一般为 长跳转指令),使CPU在执行程序时,从0000H跳过各中 断源的入口地址。主程序则是以跳转的目标地址作为起 始地址开始编写,一般从0030H开始。 2.主程序的初始化内容 所谓初始化,是对将要用到 的MCS-51系列单片机内部部件或扩展芯片进行初始工作 状态设定。应对IE,IP进行初始化编程,以开放CPU中断 ,允许某些中断源中断和设置中断优先级等。
位地址 AFH D7 位序 位名 AEH D6 ADH ACH ABH AAH A9H A8H D5 D4 D3 D2 D1 D0
EA
×
×
ES
ET1 EX1 ET0 EX0
EA:CPU中断总允许位
=1 允许中断 =0 禁止中断
EX0:外部中断0中断允许位 ET0:定时/计数器0中断允许位 EX1:外部中断0中断允许位 ET1:定时/计数器0中断允许位 ES:串行口中断允许位
注意:在CPU响应发送器中断请求,转向执行中断服务程序时 并不清“0”TI或RI,TI或RI必须由用户在中断服务程序中清 注意:该寄存器可以位寻址。 “0”,即在中断服务程序中必须有CLR TI或ANL SCON, #0FDH等清“0”TI或RI的指令。
3. 中断允许寄存器IE(单元地址A8H)
3. 中断允许寄存器IE
中断允许寄存器IE对中断的开放和关闭实 行两级控制。所谓两级控制,就是有一个 总开、关中断控制位EA,当EA=0时,则 屏蔽所有的中断申请,即任何中断申请都 不接受;当EA=1时,CPU开放中断,但 五个中断源还要由IE的低5位的各对应控 制位的状态进行中断允许控制。
例5-1 如果我们要设置外中断1、定时器1中 断允许,其它不允许,请设置IE的相应值。
1. 中断源
(1)外部中断源:MCS-51系列单片机有2个外 中断源,称为外中断0和1,经由单片机上的P3.2、 P3.3这两个外部引脚引入,为 INT 0 INT 1 、 。 (2)内部中断源 1)定时器溢出中断源。定时器溢出中断源由内 部定时器/计数器产生,属于内部中断。 2)串行口中断源。串行口中断是由内部串行口 中断源产生。
CPU将封锁对中断的响应的情况:
(1)同级或高优先级的中断已在进行中; (2)当前的机器周期还不是正在执行指令的最后一个机
器周期(换言之, 正在执行的指令完成前, 任何中断请求都得
不到响应); (3)正在执行的是一条 RETI或者访问特殊功能寄存器 IE或 IP的指令(换言之, 在 RETI或读写 IE或 IP之后, 不会 马上响应中断请求, 而至少执行一条其它指令之后才会响应)。
1)CPU与外设并行工作。解决CPU速度快、外设 速度慢的矛盾。在外设需要时发出中断申请,CPU才 中断原有工作执行中断服务程序,与外设交换数据; 中断服务结束,CPU返回原程序继续执行。 2)实时处理。控制系统往往有许多数据需要采集 或输出。实时控制中有的数据难以估计何时需要交换。 中断可为实时控制提供支持。 3)故障处理。计算机系统的故障往往随机发生, 如电源断电、运算溢出、存储器出错等。采用中断技 术,系统故障一旦出现,就能及时处理。
D4
D3
D2
D1
D0
×
×
×
PS
PT1
PX1
PT0
PX0
专用寄存器IP为中断优先级寄存器,用户可用软件设定 相应位为1,对应的中断源被设置为高优先级,相应位 为0,对应的中断源被设置为低优先级
系统复位时,均为低优先级
该寄存器可以位寻址
自然优先权顺序
中 断 源 同级内优先权排列
外部中断0中断 定时器/计数器0中断 外部中断1中断 定时器/计数器1中断 串行接口中断
T1 TXD RXD 中断标 志位
中断源 允许
总允许
中断优 矢量 先级 地址
低 级 中 断 请 求
图
MCS-51的中断系统结构图
1. 定时器控制寄存器TCON(单元地址88H)
控制对象 定时/计数器T1 定时/计数器T0 外部中断1 外部中断0
位地址 位序 位名
8FH D7 TF1
8EH D6 TR1
8DH D5 TF0
8CH 8BH D4 TR0 D3 IE1
8AH D2 IT1
89H D1 IE0
88H D0 IT0
外部中断INT0中断标志 位(TCON.1) : IE0=1,外部中断1 向CPU申请中断
注意:该寄存器可以位寻 址。
外部中断INT0触发方 式控制位(TCON.0): IT0=0,电平触发方 式 IT0=1, 下降沿触发 方式
例5-3 在上例中,如果5个中断请求 同时发生,求中断响应的次序。
解:响应次序为 定时器0→外中断1→外中断0→实时器1→ 串行中断。
5.2.3 中断响应
1. 中断响应的时序与条件
一个完整的中断处理的基本过程应包括: 中断请求、中断响应、中断处理和中断返回。
(1)在每个机器周期的S5P2期间,各中断标志采样相 应的中断源。CPU则在下一机器周期的S6期间按优 先级的顺序查询各中断标志。若查询某中断标志为 1,则按优先级的高低进行处理,即响应中断。 (2) 响 应 中 断 后 , 执 行 硬 件 生 成 的 长 调 用 指 令 “LCALL”,将程序计数器PC的内容压入堆栈保护, 先低位地址,后高位地址,栈指针加2。 (3)将对应中断源的中断矢量地址装入程序计数器PC, 使程序转向该中断矢量地址,去执行中断服务程序。 (4)中断服务程序由中断矢量地址开始执行,直到遇 到RETI指令为止。 (5)执行RETI指令,撤销中断申请,弹出断点地址送 入PC,先弹出高位地址,后弹出低位地址,栈指 针减2,恢复原程序的执行。
地址(中断矢量)送入PC, 从而转入相应的中断服务程序。
注 意:
每个中断向量地 址只间隔了8个单元, 如 0003H ~ 000BH , 在如此少的空间中是 无法存储一个比较完 整的中断服务程序的, 需要作一个简单的技 术处理。就是在中断 入口处存储一条LJMP 或AJMP指令。
一个完整的主程序 看起来应该是这样 的:
1. 定时器控制寄存器TCON
7 TF1 6 5 TF0 4 3 IE1 2 IT1 1 IE0 0 IT0
TCON
T0溢出中断标志(TCON.5): T0启动计数后,计满溢出由硬件 置位TF0=1,向CPU请求中断,此标志 一直保持到CPU响应中断后,才由硬 件自动清0。也可用软件查询该标志, 并由软件清0。