单片机的中断系统

作者简介

彭煜轩,男,银川科技学院计算机与人工智能学院,2022级计算机与科学技术8班本科生,单片机原理及应用课程第3组。

指导老师:王兴泽

电子邮件:[email protected]

前言

本篇文章是参考《单片机原理及应用(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 灯亮灭两种状态,

电路图如图所示。

代码如图所示

相关推荐
AgilityBaby1 小时前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby1 小时前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
想搞嵌入式的小白1 小时前
STM32外设问题总结
单片机·嵌入式硬件
木子单片机3 小时前
基于STM32语音识别柔光台灯
stm32·单片机·嵌入式硬件·proteus·语音识别·keil
广药门徒3 小时前
澄清 STM32 NVIC 中断优先级
单片机·嵌入式硬件
小禾苗_4 小时前
32单片机——窗口看门狗
单片机·嵌入式硬件
小灰灰搞电子4 小时前
单片机0-10V电压输出电路分享
单片机·嵌入式硬件
冷凌爱4 小时前
总结HTML中的文本标签
前端·笔记·html
保持学习ing5 小时前
黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+LinkedList)
java·笔记·算法·面试
Moonnnn.5 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习