认识单片机的中断系统
电路一点通 2024-12-18

前言

本篇文章是参考《单片机原理及应用(c语言版)第2版》杨居义·编著教材编写的笔记

由彭煜轩、马梅,李军,余文兵,杜国祥同学共同完成此篇文章,其中马梅同学负责新建项目内容,李军,余文兵负责新建源程序文件内容,杜国祥负责编译程序内容,彭煜轩负责Proteus软件仿真内容

认识单片机的中断系统

中断的概念

CPU在执行程序的过程中,由于外界的原因,无法尽快终止CPU当前的程序执行,而去执行相应的处理程序,待处理结束后,在回来继续执行开始被终止的程序,这种陈旭在执行过程中由于外界的原因被中间打断的情况被称为“中断“。

中断的作用可以实现CPU与外部设备的并行工作,提高CPU利用效率可以实现CPU对外部事件的实时处理,进行实时控制实现多项任务的实时切换

单片机的中断系统的基本组成

中断源:中断源是出发中断亲求的硬件或者软件事件,常见的中断源:外部中断:来自外部设备的信号(例如按键输入,外部传感器,外部硬件事件等),内部中断:来自单片机内部的事件,如定时器溢出,看门狗定时器溢出,串口接收数据等。

中断请求(IRQ):当中断源触发时,它会向单片机发出中断请求信号,要求暂停当前程序的执行并转去处理中断。

中断向量:每种终端源都有一种对应的中断向量号,指向该中断源的服务程序入口地址,中断向量通常保存自强中断向量表中。中断向量是一个指针表,每一个中断源有一个唯一的入口地址,处理器通过查找向量表来找到对应的服务程序。

中断控制寄存器:中断控制寄存器用于控制中断的启用、禁止、优先级等。它可以使得程序选择性地启用或禁用某些中断,设置中断的优先级,并且在发生中断时,确定是否触发中断响应。
中断服务程序(ISR, Interrupt Service Routine):每个中断源都对应一个中断服务程序。中断服务程序用于处理该中断源引发的事件,如读取外部数据、清除中断标志等。中断服务程序是由程序员预先编写的特定代码,通常会执行一系列操作来处理中断事件。

80C51 中断系统具有五个中断源,它们是:
外部中断 0(INT0):该中断源是通过外部引脚 P3.2 触发的,可以由外部信号(如按键、传感器等)触发。外部中断 0 可以响应低电平触发或下降沿触发,具体取决于相应控制寄存器(如 TCON)的配置。
外部中断 1(INT1):该中断源是通过外部引脚 P3.3 触发的,类似于外部中断 0。外部中断 1 也可以响应低电平触发或下降沿触发,具体同样由控制寄存器(如 TCON)决定。
定时器 0 中断(Timer0):该中断源是由定时器 0(T0)溢出引发的。定时器 0 工作在定时器或计数器模式下,当定时器溢出时,会触发该中断。它常用于周期性任务的执行。
定时器 1 中断(Timer1):该中断源是由定时器 1(T1)溢出引发的。定时器 1 也有类似定时器 0 的功能,通常用于更复杂的时间控制或计数任务。
串行通信中断(Serial Interrupt):该中断源是由串行通信的接收或发送事件触发的。当串行接收到数据或完成发送时,会触发串行中断。这个中断通常用于串行数据通信的处理。


80C51 中断系统具有两个优先级,它们是:高优先级和低优先级。

这两个优先级通过中断优先级控制寄存器 IP 和 IE(中断使能寄存器)进行设置和管理。

高优先级(High Priority)
高优先级的中断源会在低优先级的中断源未响应时被立即响应。即使低优先级中断正在处理中,高优先级中断会抢占并立即处理中断请求。高优先级的中断包括外部中断 0、定时器 0 中断、外部中断 1 和定时器 1 中断。

低优先级(Low Priority)
低优先级的中断会在高优先级中断未处理完之前被挂起,直到高优先级中断处理完毕才会响应低优先级中断。串行通信中断(Serial Interrupt)通常是一个低优先级的中断。

80C51 中断系统具有四个寄存器,它们是:

TCON(定时器控制寄存器)
TCON 寄存器控制定时器和外部中断的启动、停止及相关状态。它包含了溢出标志位、启动控制位和外部中断触发方式等。

TCON 的位说明:
TF0:定时器 0 溢出标志位
TF1:定时器 1 溢出标志位
TR0:定时器 0 启动控制位
TR1:定时器 1 启动控制位
IE0:外部中断 0 标志位
IE1:外部中断 1 标志位
IT0:外部中断 0 触发方式
IT1:外部中断 1 触发方式

SCON(串行控制寄存器)
SCON 是 80C51 单片机用于控制串行通信的寄存器。它包含了控制串行通信的相关配置位,包括波特率、数据格式、启用串行口等功能。


SCON 的位说明:
TI(发送中断标志):该位为 1 时,表示串行口发送完成,可以准备下一次发送。如果该位为 0,则表示串行口正在发送数据。
RI(接收中断标志):该位为 1 时,表示串行口接收到数据,可以读取接收到的字符。如果该位为 0,则表示串行口未接收到数据。

80C51 中断系统具有四个寄存器,它们是:

IE(中断使能寄存器)
该寄存器用于控制各个中断源的使能状态。通过设置相应的位,可以启用或禁用外部中断、定时器中断、串行中断等。

IE 的位说明:
EA:全局中断使能位(1 为启用所有中断,0 为禁用所有中断)
ES:串行通信中断使能
ET1:定时器 1 中断使能
EX1:外部中断 1 使能
ET0:定时器 0 中断使能
EX0:外部中断 0 使能


IP(中断优先级寄存器)
该寄存器用于设置中断源的优先级。80C51 单片机具有两级中断优先级,可以通过此寄存器设定哪些中断为高优先级,哪些为低优先级。

IP 的位说明:
IP0:外部中断 0 优先级
IP1:定时器 0 中断优先级
IP2:外部中断 1 优先级
IP3:定时器 1 中断优先级
IP4:串行通信中断优先级

实践案例

使用定时器T1中断方式控制P3口的8位LED灯闪烁


任务描述:使用定时器/计数器T1工作于方式1,采用中断方式控制P3口LED的闪烁,闪烁周期为100ms即亮50sm,熄灭50ms电路图如下所示代码图如下所示:



效果图如下所示:

TCON— 定时器 / 计数器控制寄存器

D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

D7到D4为定时器
IT1 / IT0:外中断 1/0 触发方式控制位。当 ITi = 0 时,外部中断 1/0 为电平触发方式。当 ITi = 1 时,外部中断 1/0 为脉冲触发方式。
IE1 / IE0:外部中断 1/0 标志。I Ei = 1,外部中断 1/0 向 CPU 申请中断。SCON— 串行口控制寄存器
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI

D7到D2为通信TI:串行发送中断标志 CPU 将数据写入发送缓冲器 SBUF 时,就启动发送,每发送完一个串行帧,硬件将使 TI 置位。
RI:串行接收中断标志 在串行口允许接收时,每接收完一个串行帧,硬件将使 RI 置位。80C51 中断入口地址分配
MCS-51 单片机中断源的自然优先级、入口地址及中断编号
中断源 自然优先级 中断入口地址 C51 编译器对中断的编号
外部中断 0 0003H 0
定时器 T0 溢出中断
000BH 1
外部中断 1
0013H 2
定时器 T1 溢出中断
001BH 3
串行通信中断 RI 或 TI 0023H 4

C 语言编写中断服务函数的格式如下:
函数类型 函数名 (形式参数列表) [interrupt n] [using m]
其中,interrupt 后面的 n 是中断编号,取值为 0~4;using 中的 m 表示使用的工作寄存器组号(如不声明,则默认用第 0 组)。

例如,定时器 T0 的中断服务函数可以用如下方法编写:
Void Time0 (Void) interrupt 1 using 0
// 定时器 T0 的中断服务函数,T0 的中断编号为 1,使用
第 0 组工作寄存器
{
…… // 中断服务程序
}

80C51 外部中断扩展
单片机仅有两个外部中断输入端。
可用两种方法扩展:

定时器 T0、T1。(工作在计数方式下)

中断和查询结合。

用定时器作外部中断源

例:将定时器 T0 扩展为外部中断源。

解:将定时器 T0 设定为方式 2(自动恢复计数初值),
TH0 和 TF0 的初值均设置为 FFH,允许 T0 中断,CPU 开放中断,
源程序如下:
TMOD=0x06;
TH0=0xff;
TL0=0xff;
TR0=1;
ET0=1;
EA=1;

T0 引脚每输入一个负跳变,TF0 都会置 1,向 CPU 请求中断,T0 引脚相当于边沿触发的外部中断源输入线。

中断和查询相结合

图:一个外中断扩展城多个外中断的原理图Void int_1 () interrupt 2 // 外部中断 1 中断类型号为 2
{
unsigned char i;
P1 = 0xff; // 读 P1 口引脚前先全部置 1
i = P1; // 在 P1 口引脚状态读入变量 i
i &= 0x0f; // 采用与操作屏蔽掉 i 的高 4 位
Switch (i)
}
{
case 0x01: exint0(); break; /调用函数 exint0 (),EXINTT0 中断服务,此处省略/
case 0x02: exint1(); break; /调用函数 exint1 (),EXINTT1 中断服务,此处省略/
case 0x04: exint2(); break; /调用函数 exint2 (),EXINTT2 中断服务,此处省略/
case 0x08: exint3(); break; /调用函数 exint3 (),EXINTT3 中断服务,此处省略/
Default: break;

}

中断系统的应用

中断系统的初始化实质上是针对 4 个与中断有关的特殊功能寄存器 TCON、SCON、IE 和 IP 进行控制和管理,具体步骤如下所示。(1) 开 CPU 中断总开关(EA)。(2) 设置中断允许寄存器 IE 中相应的位,确定各个中断源是否允许中断。(3) 对多级中断设置中断优先级寄存器 IP 中相应的位,确定各中断源的优先级别。(4) 设置定时器控制寄存器 TCON 中相应的位,确定外部中断是边沿触发还是电平触发的触发方式。

实践案例

用外中断控制 P2 口 8 个 LED 亮灭任务描述:P3.3 引脚(/INT1)上接按键 S,使用外中断控制 P2 口 8 个 LED 亮灭。当第一次按下按键 S 时,P2 口 8 位 LED 就亮,再次按下 S 按键,P2 口 8 个 LED 就灭,如此循环,就可看见 LED 灯亮灭两种状态,电路图如图所示。代码如图所示


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 电源
  • DC
  • AC
  • 稳压
下载排行榜
更多
评测报告
更多
广告