1.中断概念
在前面章节,我们通过介绍 51 单片机 IO 口学习了很多相关的实验。从最简
单的 LED 到数码管动态扫描再到 LED 点阵以及电机控制,无不体现学习 51 单片
机 IO 口操作的重要性。在前面章节,我们还提到了学习 51 单片机的重点及难点
主要有中断、定时器、串口等内容,这部分内容大家一定要认真掌握,这部分没
有学好就不能说学会了51单片机。因此专门用一章来介绍51单片机的中断系统,
为后面学习外部中断、定时器中断、串口中断做好铺垫。
举例: 你打开火, 烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。
对于单片机来讲,中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B, 请求 CPU 迅速去处理(中断发生);CPU 暂时停止当前的工作(中断响应), 转去 处理事件 B(中断服务);待 CPU 将事件 B 处理完毕后,再回到原来事件 A 被 中断的地方继续处理事件 A(中断返回),这一过程称为中断。
单片机在执行程序时其程序流程图如下:
引起 CPU 中断的根源称为中断源。中断源向 CPU 提出中断请求,CPU 暂时
中断原来的事务 A,转去处理事件 B,对事件 B 处理完毕后,再回到原来被中断
的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断
机构)。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生 了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的 服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中 断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没 有中断嵌套功能的中断系统称为单级中断系统。
2 中断结构及相关寄存器
(1) 中断结构
STC89C5X 系列单片机提供了 8 个中断请求源,它们分别是:外部中断
O(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定时器 0
中断、定时器 1 中断、定时器 2 中断、串口(UART)中断。( 注意:51 系列单片
机一定有基本的 5 个中断,但不全有 8 个中断,需要查看芯片手册,通常我
们使用的都是基本的 5 个中断:INT0、INT1、定时器 0/1,串口中断 )。所有的
中断都具有四个中断优先级(基本型只有两个)。
①INT0 对应的是 P3.2 口的附加功能,可由 IT0(TCON.0)选择其为低电平有 效还是下降沿有效。当 CPU 检测到 P3.2 引脚上出现有效的中断信号时,中断标 志 IE0(TCON.1)置 1,向 CPU 申请中断。
②INT1 对应的是 P3.3 口的附加功能,可由 IT1(TCON.2)选择其为低电平有 效还是下降沿有效。当 CPU 检测到 P3.3 引脚上出现有效的中断信号时,中断标 志 IE1(TCON.3)置 1,向 CPU 申请中断。
③T0 对应的是 P3.4 口的附加功能,TF0(TCON.5),片内定时/计数器 T0 溢 出中断请求标志。当定时/计数器 T0 发生溢出时,置位 TF0,并向 CPU 申请中断。
④T1 对应的是 P3.5 口的附加功能,TF1(TCON.7),片内定时/计数器 T1 溢出中断请求标志。当定时/计数器 T1 发生溢出时,置位 TF1,并向 CPU 申请中
断。
⑤RXD 和 TXD 对应的是 P3.0 和 P3.1 口的附加功能,RI(SCON.0)或 TI (SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位 RI 或 当串行口发送完一帧串行数据时置位 TI,向 CPU 申请中断。
2.2 中断相关寄存器
( 1)中断允许控制
CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器
IE 控制的。
EX0(IE.0),外部中断 0 允许位;
ET0(IE.1),定时/计数器 T0 中断允许位;
EX1(IE.2),外部中断 0 允许位;
ET1(IE.3),定时/计数器 T1 中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU 中断允许(总允许)位。
( 2)中断请求标志 TCON
IT0(TCON.0),外部中断 0 触发方式控制位。
当 IT0=0 时,为电平触发方式。
当 IT0=1 时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断 0 中断请求标志位。
IT1(TCON.2),外部中断 1 触发方式控制位。
IE1(TCON.3),外部中断 1 中断请求标志位。219
TF0(TCON.5),定时/计数器 T0 溢出中断请求标志位。
TF1(TCON.7),定时/计数器 T1 溢出中断请求标志位。
( 3)中断优先级
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先
级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
( 4)中断号
( 5)中断响应条件
主程序中需要有以下代码:
EA=1;//打开总中断开关
EX0=1;//开外部中断 0
IT0=0/1;//设置外部中断的触发方式
中断服务函数:
void int0() interrupt 0 using 1 { //编写用户所需的功能代码 }
在中断函数中 int0 是函数名,可自定义,但必须符合 C 语言标识符定义规
则,interrupt 是一个关键字,表示 51 单片机中断。后面的“0”是中断号,外
部中断 0 中断号为 0,这个可参考前面的内容。后面的 using 1 可省略不写。