单片机原理及利用 – 中断零碎
中断就是对 紧急事件 的实时处理 能力,中断响应和处理过程:
- 中断请求源 收回中断请求
- 如果中断请求被容许,单片机 暂停停止以后正在执行的主程序保留状态
- 转向中断服务处理程序 解决中断服务申请
- 解决完中断请求后,回到原来被停止程序之处 (断点), 继续执行 被中断的程序
硬件主动生成一条 长调用指令 LCALL addr16;
,addr16 就是程序存储区中的 中断入口地址,而后 CPU 执行该指令,首先将 PC 的内容压入堆栈爱护断点,再将中断入口地址装入 PC,使程序转向响应中断请求的中断入口地址,通常中断入口地址处寄存的是无条件转移指令,使得程序执行转向到中断服务程序入口
劣势 : 没有中断 时须要定时查问是否有服务申请产生,应用中断 时能够缩小定时查问工夫,进步了 工作效率 和实时性
每个 中断源 都能够用软件独立地管制为容许中断或关中断,每一个中断源的 中断优先级 均可用软件设置
中断请求源
中断名 | 英文 | 中断入口地址 |
---|---|---|
内部中断请求 0 | INT0* | 0003H |
定时器 / 计数器 T0 | T0 | 000BH |
内部中断请求 1 | INT1* | 0013H |
定时器 / 计数器 T1 | T1 | 001BH |
串口中断请求 | TX/RX | 0023H |
中断请求标记寄存器
TCON 寄存器
TCON 为定时器 / 计数器的管制寄存器,用于管制 T0 T1 的启动和进行计数,同时蕴含了 T0 T1 的状态,字节地址为 88H,可位寻址
- TF1:定时器 / 计数器 T1 的溢出中断请求标记位
- TR1: 计数运行管制位
- TF0:定时器 / 计数器 T0 的溢出中断请求标记位
- TR0:计数运行管制位
- IE1:内部中断请求 1 的中断请求标记位
- IT1:抉择内部中断请求 1 的中断请求标记位
- IE0:内部中断请求 0 中断请求标记位
- IT0:抉择内部中断请求 0 中断请求标记位
溢出中断请求标记位:当启动 T1/T0 计数后从初值开始加 1 计数,当最高位产生溢出后由硬件使 TF1/TF0 置 1,而后向 CPU 申请中断请求,CPU 响应中断使得 TF1/TF0 标记由硬件主动清 0,TF1/TF0 也可由软件清 0
计数运行管制位 :TR1/TR0 = 1
启动 定时器 / 计数器工作的必要条件,TR1/TR0 = 0
进行 定时器 / 计数器工作
IT0/IT1 = 0,电平触发 ,加到引脚 INT0* 的内部中断请求输出信号为 低电平 无效,并把 IE1 置为 1,转向中断服务程序时,硬件主动把 IE1 清 0
IT0/IT1 = 1,跳沿触发 ,加到引脚 INT0* 的内部中断请求输出信号 电平从高到低的负跳变 无效,并把 IE1 置为 1,转向中断服务程序时,硬件主动把 IE1 清 0
SCON 寄存器
SCON 为串行口管制寄存器,字节地址为 98H,可位寻址,低 2 位锁存串行口的 发送中断 和接管中断 的中断请求标记 TI 和 RI
- TI:串行口的发送中断请求标记位,
- RI:串行口的承受中断请求标记位,
TMOD 寄存器
TMOD 寄存器用于抉择定时器 / 计数器 T0 T1 的 工作模式 和工作办法
- GATE:门控位,0 时仅由运行管制位 TRx 来管制定时器 / 计数器运行,1 时用外中断引脚(INT0* 和 INT1*)上的电平和运行管制位 TRx 独特管制定时器 / 计数器运行
- C/T* :计数器模式和定时器模式抉择位,0 为定时器工作模式,1 为计数器工作模式
- M1 M0:工作形式抉择位
中断请求与中断优先级管制
中断容许寄存器 IE
- EA:中断容许总开关管制位,1 开,0 闭
- ES:串行口中断管制位,
- ET1:定时器 / 计数器 T1 的溢出中断容许位
- EX1:内部中断 1 中断容许位
- ET0:定时器 / 计数器 T0 的溢出中断容许位
- EX0:内部中断 0 中断容许位
单片机复位后,IE 被清 0,所有中断请求被禁止,能够应用指令 SETB bit; CLR bit;
关上或敞开中断请求,也能够用 字节操作 指令实现
中断优先级寄存器 IP
AT89S51 的中断请求源有 两个中断优先级 ,每一个中断请求源可由软件设置为 高优先级中断 或低优先级中断,也可实现两级中断嵌套
两级中断嵌套:AT89S51 正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序
AT89S51 复位后 IP 内容为 0,各个中断源均为 低优先级 中断
各中断源的中断优先级两个根本规定:
- 低优先级可被高优先级中断,高优先级不能被低优先级
- 任何中断一旦失去响应,不会再被它的同级中断源所中断
- PS:串行口中断优先级管制位
- PT1:定时器 T1 中断优先级管制位
- PX1:内部中断 1 中断优先级管制位
- PT0:定时器 T0 中断优先级管制位
- PX0:内部中断 0 中断优先级管制位
响应中断请求的条件
中断请求被容许的条件:
- 总中断容许,即 IE 寄存器中的
EA = 1
- 该中断源 收回中断请求 ,即
对应中断请求标记 = 1
- 该
中断源中断容许位 = 1
,即该 中断被容许 - 无 同级 或更高级 中断正在被服务
中断请求被封闭的条件:
- CPU 正在 解决同级或更高级中断
- 所查问的机器周期 不是正在执行指令的最初一个机器周期,确保指令执行完整性
- 正在执行 RETI 或是拜访 IE 或 IP 的指令
内部中断触发形式
电平触发
内部中断申请触发器的状态随着 CPU 在每个机器周期采样到的 内部中断输出引脚的电平 变动而变动,能进步 CPU 对外部中断请求的响应速度
跳沿触发
内部中断申请触发器能 锁存 内部中断输出线上的 负跳变 ,即使 CPU 临时不能响应,中断请求标记也不会失落,适宜以 负脉冲模式输出 的内部中断请求
中断请求的撤销
定时器 / 计数器中断请求的撤销
定时器 / 计数器中断的中断请求被响应后,硬件会主动把 中断请求标记位(TF0 或 TF1)清 0,定时器 / 计数器中断请求是主动撤销的
内部中断请求的撤销
- 跳沿形式 内部中断请求的撤销:包含 中断标记位清 0和 外中断信号的撤销 , 中断标记位清 0 是在中断响应后由硬件主动实现的,外中断请求信号的撤销 因为跳沿信号过后主动隐没了,因而也是主动撤销的
- 电平形式 内部中断请求的撤销:中断请求标记的撤销是主动的,但中断请求信号的低电平可能持续存在,须要利用电路在中断响应后把中断请求信号输出引脚从 低电平 强制改成 高电平
- 串行口 中断请求的撤销:只能够应用软件形式
CLR TI; CLR RI;
分明中断标记位
定时器 / 计数器构造
定时器 / 计数器 T0 和 T1 别离由 TH0 TL0 和 TH1 TL1 组成
定时器 / 计数器 4 种工作形式
形式 0 和形式 1 在计数溢出后 计数器会变为 0,从新开始计数
形式 2 和形式 3 在计数溢出后会 主动复原初值
形式 0
M1 M0 为 00 时,定时器 / 计数器被设置为工作形式 0,此时为 13 位 定时器 / 计数器,由 TLx 低 5 位 和 THx 高 8 位 形成,TLx 低 5 位溢出则向 THx 进位,THx 溢出则把 TCON 中溢出标记位 TFx 置 1
形式 1
M1 M0 为 01 时,定时器 / 计数器被设置为工作形式 1,此时为 16 位 定时器 / 计数器,由 THx 高 8 位 和 TLx 低 8 位 形成,TLx 低 8 位溢出则向 THx 进位,THx 溢出则把 TCON 中溢出标记位 TFx 置 1
形式 2
M1 M0 为 10 时,定时器 / 计数器被设置为工作形式 2,此时为 主动复原初值的 8 位 定时器 / 计数器,TLx 作为 常数缓冲器,当 TLx 计数溢出时,溢出标记 TFx 置 1 的同时,主动将 THx 的初值送至 TLx,使得 TLx 从新计数
形式 3
M1 M0 为 11 时,定时器 / 计数器被设置为工作形式 3,此时 减少了一个附加的 8 位定时器 / 计数器,使得 AT89S51 具备 3 个定时器 / 计数器