单片机的中断系统

发布时间:2024-12-17 11:20:29  

前言

本篇文章是参考《单片机原理及应用(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 灯亮灭两种状态,
电路图如图所示。
图片
代码如图所示
图片
作者:银科院-计算机与人工智能

文章来源于:电路一点通    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    MAX9258A数据手册和产品信息;MAX9257A串行器与MAX9258A解串器配对形成完整的数字视频串行链路。MAX9257A/MAX9258A具有可编程并行数据宽度、并行时钟频率范围、扩频......
    反复擦除和下载程序。 擦除和编程的方法 并行编程器ISP (在系统编程:In-System Program)直接调用单片机BOOTROM区的IAP 函数IAP (在应用编程:In-ApplICation......
    等将单片机连接到计算机或其他设备,通过调试软件实现远程调试、数据监视和实时调试等功能。 3. **ISP/ICP调试**:通过串行编程接口(ISP)或者并行编程接口(ICP)实现对程序的下载和调试。 4......
    AT89S51中P1.5,P1.6,P1.7具有第二功能,即这3个引脚的第二功能组成了串行ISP编程的接口。 2.编程功能:AT89C51仅支持并行编程,而AT89S51不但支持并行编程还支持ISP再线编程......
    测试的速度提高到同类产 品的二到四倍 ·吉时利2600A系列提供宽动态范围:1fA到10A,1μV到200V ·TSP-Link主/从控制架构将多台2600A数字源表无缝地整合成一个系统,将其作为一台独立的仪器进行编程......
    使用PlatformIO对Arduino UNO和STM32板进行编程;  使用简单的用户界面,在 Arduino 和 Arduino IDE 中进行开发总是简单而有趣。Arduino IDE 是开......
    控制范围的数字 IF VGA。每个通道的 IF 增益通过 SPI 以 0.5dB 步进进行编程。 通过 SPI 或并行控制线实现的可编程 RF 输入调谐使该器件很受宽带无线电应用的青睐。此外,该器......
    错误 FLASH的编程错误又分为写保护错误和编程错误。 写保护错误是尝试在写保护区域执行编程或擦除操作时,WRPERR位由硬件置1。 编程错误又分为好几种,一种是编程并行位数错误,当访......
    )转换为Structured Text(ST)   LAD和ST之间的转换可能会导致代码不同,需要注意语言的结构和语法。   例如,LAD使用电气符号进行编程,而ST使用几乎类似于C语言的表达式进行编程......
    方舟编译器也成为了华为鸿蒙OS系统发展中非常重要的一环。 方舟编译器平台的IDE(集成开发环境)具有以下主要功能: 代码编辑:方舟编译器平台的IDE支持各种编程语言的代码编辑,包括Java、CC++等。它还......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>