中断系统
- 1、中断介绍
- 2、中断结构及相关寄存器
- 中断满足的条件以及使用
- 3、外部中断实验
- 外部中断介绍
- 外部中断配置
- 硬件设计
- 软件设计
1、中断介绍
我们先来举一个生活事例: 你打开火,烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。
对于单片机来讲,中断是指CPU在处理某一事件A时,发生了另一件事B,请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应),转去处理事件B(中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程中称为中断。
中段请求:
中断响应:
中断返回:
中断执行顺序是中断优先级。
单片机在执行程序时其程序流程图:
中断嵌套:类似递归。
优点:
分时操作:CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用
实时响应:CPU 能够及时处理应用系统的随机事件,系统的实时性大大增
强
可靠性高:CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统
可靠性提高。
2、中断结构及相关寄存器
STC89C5X 系列单片机提供了 8 个中断请求源,它们分别是:外部中断0(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定时器 0中断、定时器 1 中断、定时器 2 中断、串口(UART)中断。(注意:51 系列单片机一定有基本的 5 个中断,但不全有 8 个中断,需要查看芯片手册,通常我们使用的都是基本的 5 个中断:INT0、INT1、定时器 0/1,串口中断)
学会查看芯片手册查看中断数量以及类型
学会查看中断数量类型以及中断优先级
中断连接的端口
内部结构框图:
IE:Interrupt enable
IP:Interrupt priority
EA:Enable all
EX:Enable exterior
ES:Enable serial
从该图中看出什么?
1、外部中断0 通过TCON寄存器中IT0控制位,采取下降沿中断(1)还是低电平中断(0)出现有效中断信号时,IE0请求标志位置1。IE寄存器中总中断EA打开,EX0外部中断允许位打开。PX0打开,传入CPU中断队列中。
2、定时器中断T0 通过TCON寄存器TF0,片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,IE寄存器中总中断打开ET0定时器中断允许打开。PX0打开,传入CPU中断队列。
3、RI或TI,串行口中断请求标志。当串行口接受完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位Ti,向CPU请求中断。
中断寄存器
IE:中断允许寄存器
TCON:中断请求标志寄存器
中断满足的条件以及使用
中断响应条件:
1、CPU中断(总中断EA)打开
2、有效中断请求信号
3、此处中断源的中断允许位为1
使用中断我们需要做什么?
1、你想使用的中断是哪个?选择相应的中断号 (有多个中断时,根据任务的优先级/根据中断做什么,选择中断号)
2、你所希望的触发条件是什么?
3、中断之后做什么
//以外部中断0为例子
EA = 1 //总中断打开
EX0 = 1 //外部中断0允许位打开
ITO = 0/1 //设置外部中断的触发方式,选择中断请求的是低电平还是下降沿中断
//中断服务函数
void int0() interrupt 0
{
//编写用户所需的功能代码
}
3、外部中断实验
实现功能:使用独立按键K3控制LED亮灭,K3连接外部中断0(p3.2)管教。
外部中断介绍
外部中断0和外部中断1
中断号
外部中断配置
//初始化
void exti_init()
{
EA = 1; //总中断打开
EX0 = 1; //外部中断0开关打开
IT0 = 1; //设置外部中断0的触发方式
}
void int0()interrupt 0
{
if (KEY3 == 1)
{
LED1 = !LED1;
}
}