中断(全网最细!)

news/2024/10/18 12:21:47/

什么是中断?

中断是让单片机具有处理外部和内部随机发生事件实时处理的能力;

中断提高了单片机处理外部或内部的能力;

芯片在处理某一个A事件,发生了一件B事件,请求芯片(中断发生)去处理B事件,暂停原来做的A事件,转去处理B事件(中断服务),芯片处理完B事件,在回到事件A中断的地方在继续处理A事件(中断返回),这个过程叫中断。


中断的结构

有多少个中断?

基于51单片机一般提供八个中断

外部中断0 、 外部中断1 、 外部中断2 、 外部中断3 、

定时器0、定时器1、定时器2、串口 八个中断请求源

一般STC增强型 有八个

但一般单片机都有5个中断  ,这是基础的

重点学习这5个中断,后面多的都大差不差


中断里有什么?

TCON寄存器,控制外部中断是下降沿触发,还是低电平触发,触发之后中断标志位IE0自动化置为1,;

IE外部中断寄存器设置,EX0中断的选择位

EA 全局中断控制使能位

IP设置中断的优先级

中断寄存器

(1) 中断允许控制 就是 IE 寄存器的某一位

(2)中断请求标志 就是 TCON寄存器 8位的寄存器


中断优先级?

外部中断0---->定时器0---->外部中断1---->定时器1---->串口

中断号

中断响应条件?

①中断源有中断请求;
②此中断源的中断允许位为 1;
③CPU 开中断(即 EA=1)。

若果设置的中断有问题,可以从这三个方面去查看


中断配置

中断的操作流程

1、先要在外部中断设置是下降沿触发、还是低电压触发 在TCON寄存器中、触发之后中断标志IE0 自动置1

2、外部中断允许位要打开

3、EA总中断要开发

4、设置中断优先级

5、中断才会流入MCU

中断0 初始化

// 外部中断0配置初始化
void exit0_init(void)
{IT0 = 1; // 下降沿触发EX0 =1;          // 中断允许位打开EA=1;          // 总中断打开}

中断0服务函数

// 外部中断0服务函数           没有返回值
void exit0() interrupt 0          // 0 是中断号
{deplay_time(1000); // 消抖if(KEY3==0){LED1=!LED1;}        
}

void exit0()  interrupt 0    中断服务函数  0 是哪个中断号

中断优点

分时操作、实时响应、可靠性高

分时操作: CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率

实时响应:CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强

可靠性高:CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高


实验需求:

用K3、K4按键使用中断,LED1灯按灭

硬件图:

编程设计:

#include "reg52.h"  // 头文件
// char/int 重命名
typedef unsigned char u8;
typedef unsigned int u16;
// 按键管脚
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
sbit LED1 = P2^0;// 外部中断0配置初始化
void exit0_init(void)
{IT0 = 1; // 下降沿触发EX0 =1;          // 中断允许位打开EA=1;          // 总中断打开}
// 外部中断1配置初始化
void exit1_init(void)
{IT1 = 1; // 下降沿触发EX1 =1;          // 中断允许位打开EA=1;          // 总中断打开}// 外部中断0服务函数           没有返回值
void exit0() interrupt 0          // 0 是中断号
{deplay_time(1000); // 消抖if(KEY3==0){LED1=!LED1;}        
}// 外部中断1服务函数1           没有返回值
void exit1() interrupt 2          // 0 是中断号
{deplay_time(1000); // 消抖if(KEY4==0){LED1=!LED1;}        
}


http://www.ppmy.cn/news/1103765.html

相关文章

2020年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:数组指定部分逆序重放 将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。 时间限制:1000 内存限制:65536 输入 输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n…

stm32f4_奇怪的bug_串口数据错乱,一个串口收到另一个串口的数据

1、开发环境简介 芯片型号&#xff1a;stm32f407igt6 官方库函数&#xff1a;HAL库 2、bug现象描述和原因推测 使用了2个串口&#xff0c;一个是串口5-波特率115200&#xff0c;一个是串口4-波特率9600&#xff0c;但是串口4时不时会收到上一次发给串口5的数据。不是同一个串…

C语言经典100例题(45)--学习使用register定义变量的方法

目录 题目 问题分析 代码 运行结果 题目 学习使用register定义变量的方法 问题分析 register是做声明的&#xff0c;为了提高效率。 register变量不能做取地址运算符&操作。 声明变量具有register储类型就要求编译器把变量存储在寄存器中&#xff0c;而不是像其他变量…

ResNet 09

一、发展 1989年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet。 1998年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet-5 AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Sca…

Unity 之 Material (材质)渲染3D对象的重要组件

文章目录 介绍一些代码例子 介绍 在Unity中&#xff0c;Material&#xff08;材质&#xff09;是一种用于渲染3D对象的重要组件。Material定义了对象的外观&#xff0c;包括其颜色、纹理、光照属性和反射等。以下是关于Material的详细介绍&#xff1a; 创建Material&#xff1…

易优cms小程序插件升级到2.1版本

eyou小程序升级到2.1&#xff0c;主要新增一键获取手机号&#xff0c;统一返回格式等 升级内容&#xff1a; &#xff08;1&#xff09;对全部接口的返回格式做统一化设置 &#xff08;2&#xff09;新增一键获取手机号功能 &#xff08;3&#xff09;新增footprint足迹接口 &…

mp4视频太大怎么发送?这样压缩视频就对了

随着科技的发展&#xff0c;视频格式多种多样&#xff0c;其中mp4格式因为其通用性而广受欢迎。然而&#xff0c;有时候我们会遇到一个问题&#xff1a;mp4视频文件太大&#xff0c;导致发送变得困难。那么&#xff0c;如何解决这个问题呢&#xff1f;下面就给大家分享几个实用…

深入浅出PyTorch函数torch.rand与torch.randn

torch.rand 和 torch.randn 都是PyTorch中用于生成随机张量的函数&#xff0c;但它们生成随机数的方式有所不同。 一、torch.rand torch.rand 生成在区间 [0, 1) 内均匀分布的随机数。 size 参数是一个表示所需张量形状的元组或整数。可以生成任何形状的随机张量。 二、torch.…