中断系统
本文主要涉及8051单片机的中断系统的讲解与使用
其中包括中断相关寄存器的介绍与使用以及外部中断初始化的代码分析。
文章目录
- 中断系统
- 一、 中断的介绍
- 二、 中断结构及相关寄存器
- 2.1 中断源
- 2.2 中断请求控制器
- 2.2.1 TCON寄存器
- 2.2.2 SCON寄存器
- 2.2.3 中断允许寄存器IE
- 2.2.4 中断优先级寄存器IP
- 三、 外部中断代码
- 3.1 中断的初始化
- 3.2 中断服务函数
一、 中断的介绍
对于单片机来讲,中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B,请求 CPU 迅速去处理(中断发生);CPU 暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务);待 CPU 将事件 B 处理完毕后,再回到原来事件 A 被中断的地方继续处理事件 A(中断返回),这一过程称为中断。
中断的定义
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求CPU 暂停当前的工作
,转而去处理这个紧急事件,处理完以后,再回到
原来被中断的地方,继续原来的工作,这样的过程称为中断。
引起 CPU 中断的根源称为中断源
。中断源向 CPU 提出中断请求,CPU 暂时中断原来的事务 A,转去处理事件 B,对事件 B 处理完毕后,再回到原来被中断的地方(即断点),称为中断返回
。实现上述中断功能的部件称为中断系统
(中断机构)。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套
。这样的中断系统称为多级中断系统
,没有中断嵌套功能的中断系统称为单级中断系统。
为什么要设置中断?
-
- 提高CPU工作效率
-
- 具有实时处理功能
-
- 具有故障处理能力
-
- 实现分时操作
二、 中断结构及相关寄存器
2.1 中断源
51单片机总共有5个中断源,其中2个为外部中断源,3个为内部中断源。
(1)INT0*
—外部中断请求0,中断请求信号由引脚输入,中断请求标志为IE0
。
(2)INT1*
—外部中断请求1,中断请求信号由引脚输入,中断请求标志为IE1
。
(3)定时器/计数器T0
-计数溢出发出的中断请求,中断请求标志为TF0
。
(4)定时器/计数器T1
-计数溢出发出的中断请求,中断请求标志为TF1
。
(5)串行口中断请求
,中断请求标志为发送中断TI
或接收中断RI
。
2.2 中断请求控制器
80C51涉及的中断请求控制寄存器有2个。定时和外中断用TCON,串行中断用SCON。
2.2.1 TCON寄存器
字节地址为88H
,可位寻址
该寄存器中既包括:
- T0和T1的溢出
中断请求标志位
TF0和TF1, - 两个
外部中断请求的标志位
IE1与IE0, - 两个外部中断请求源的
中断触发方式选择位
2.2.2 SCON寄存器
SCON为串行口控制寄存器,字节地址为98H,可位寻址
请求标志TI和RI,其格式如图5-4所示。
SCON中各标志位的功能如下:
(1)TI—串行口的发送中断请求
标志位。CPU将一个字节的数据写入串行口的发送缓冲器SBUF时,就启动一帧串行数据的发送,每发送完一帧串行数据后,硬件使TI自动置“1”。
注:CPU响应串行口发送中断时,并不清除TI中断请求标志,TI标志必须在中断服务程序中用指令对其清“0”。
(2)RI—串行口接收中断请求
标志位。在串行口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。
注:CPU在响应串行口接收中断时,RI标志并不清“0”,必须在中断服务程序中用指令对RI清“0”。
2.2.3 中断允许寄存器IE
IE控制CPU对各中断源的开放或屏蔽
,的字节地址为A8H,可进行位寻址,其格式如图5-5所示。
(1)EA—中断总允许开关控制位。
EA=0,所有中断被屏蔽。
EA=1,所有中断被开放。
只要有中断被允许,EA=1
(2)ES—串行口中断允许位。
ES=0,禁止串行口中断。
ES=1,允许串行口中断。
(3)ET1—定时器/计数器T1的溢出中断允许位。
ET1=0,禁止T1溢出中断。
ET1=1,允许T1溢出中断。
(4)EX1—外部中断1中断允许位。
EX1=0,禁止外部中断1中断。
EX1=1,允许外部中断1中断
(4)EX1—外部中断1中断允许位。
EX1=0,禁止外部中断1中断。
EX1=1,允许外部中断1中断。
(5)ET0—定时器/计数器T0的溢出中断允许位。
ET0=0,禁止T0溢出中断。
ET0=1,允许T0溢出中断。
(6)EX0—外部中断0中断允许位。
EX0=0,禁止外部中断0中断。
EX0=1,允许外部中断0中断。
复位以后,IE被清“0”,所有的中断请求被禁止。
2.2.4 中断优先级寄存器IP
中断请求源有两个中断优先级,每一中断请求源可由软件设置为高优先级中断或低优先级中断。
中断嵌套,就是单片机正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。
关于各中断源的中断优先级关系,可归纳为下面两条基本规则:
(1)低优先级可被高优先级中断,高优先级不能低优先级中断。
(2)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断源所中断。
中断优先级寄存器IP,其字节地址为B8H,可位寻址。IP寄存器的格式如图5-7所示。
中断优先级寄存器IP各位的含义如下:
(1)PS—串行口中断优先级控制位
PS=1,串行口中断为高优先级
PS=0,串行口中断为低优先级
(2)PT1—定时器T1中断优先级控制位
PT1=1,定时器T1中断为高优先级
PT1=0,定时器T1中断为低优先级
(3)PX1—外部中断1中断优先级控制位
PX1=1,外部中断1中断为高优先级
PX1=0,外部中断1中断为低优先级
(4)PT0—定时器T0中断优先级控制位
PT0=1,定时器T0中断为高优先级
PT0=0,定时器T0中断为低优先级
(5)PX0—外部中断0中断优先级控制位
PX0=1,外部中断0中断为高优先级
PX0=0,外部中断0中断为低优先级
复位以后,IP的内容为0,各个中断源均为低优先级中断.
在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序如表5-1所示。
由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断的优先权最低。
三、 外部中断代码
3.1 中断的初始化
void init_exit0()
{EA=1;//打开总中断开关EX0=1;//开外部中断 0IT0=1;//设置外部中断的触发方式0-电平触发 1-边沿触发
}
void init_exit1()
{EA=1;//打开总中断开关EX1=1;//开外部中断 0IT1=0;//设置外部中断的触发方式
}
3.2 中断服务函数
中断号
void exit0() interrupt 0 //外部中断0的中断服务函数
{//中断响应后要做的事情}void exit1() interrupt 2 //外部中断1的中断服务函数
{//中断1响应后需要做的事情
}
原理图中 K3 键是连接在单片机 P3.2 口(外部中断 0),K4 按键是连接在 P3.3 口(外部中断 1)。
所以中断的触发是通过这两个按键来实现的,使用中断时需要注意。