学习笔记|外部中断|INT0|中断列表|STC32G单片机视频开发教程(冲哥)|第十五集:中断系统和外部中断

news2024/12/24 10:11:51

文章目录

  • 1.中断和中断系统
    • 1.1什么是中断?
    • 1.2什么是中断系统
    • 1.3中断系统的优点
    • 1.4 中断系统包含哪些中断源
    • 1.5.中断次序
  • 2.什么是外部中断
  • 3.外部中断的用法
  • 4.外部中断的用法
    • 完整代码
  • 总结
  • 课后练习:

上节课我们学完了GPIO的矩阵按键,已经把这个GPIO的一个外设全都已经学完了
今天开始我们要学习这个单片机新的一些外设

1.中断和中断系统

首先看到这个中断,.我们能想到什么?
想到之前一节课我们学过一个定时器中断,定时一定的时间我们周期性的产生中断.
不断的去刷新我们的数码管和LED。
使用了STC-ISP软件上的定时器计算功能(需勾选使能定时器中断):
在这里插入图片描述

主函数在运行时,产生一个中断信号以后他会先去执行这个中断函数里的一个功能,再返回到主函数继续执行。

1.1什么是中断?

在这里插入图片描述

12 中断系统
中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。

1.2什么是中断系统

实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。

1.3中断系统的优点

优点1:CPU总是先响应优先级别最高的中断请求。
当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,
优点2:转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。
这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请,
优点3:每一个中断源可以用软件独立地控制为开中断或关中断状态,
优点4:部分中断的优先级别均可用软件设置。
高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。
不是所有的中断的优先级都可以设置,只有部分可设置。

1.4 中断系统包含哪些中断源

在这里插入图片描述
在这里插入图片描述

今天主要关注INT0和INT1。
用之前应该关注所用单片机的型号,然后再去对应一下他左边的一个功能,对照过来看一下功能有没有。去看一下哪个系列他有哪个中断。

1.5.中断次序

哪个优先级高哪个优先级低,这个次序(中断号)的数字越小,那么说明他的优先级越高。
INT开头的都是外部中断:
在这里插入图片描述

2.什么是外部中断

外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获这个变化,单片机内部自主运行的程序就会被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原来的程序。
总的来说就是引脚上的电平变化,然后他就会进入中断。然后中断完子以后再去执行原来的程序。
什么引脚能作为外部中断口?‘
在这里插入图片描述

中断是只能在这些有标注的这个脚上才能使用。
翻看STC32G用户手册,查看INT的详细说明。引脚带INTx标识的是外部中断。

3.外部中断的用法

在这里插入图片描述
根据图示,操作顺序为:
外部中断0:
IT0:中断请求的不同触发条件设置,可选择上升下降沿或者下降沿。
IE0:置位
EX0:中断单独控制开关
EA:中断总开关
外部中断1:
IT1
IE1
EX1
EA
同理再来推理一下INT2,INT3,INT4,他们这边过来只有一条线,只有一个下降沿的符号,且不可以被切换
外部中断x:x=2-4
INTxIF
EXn
EA
寄存器的一个位都已经在这里写好了,我们后面就可以查手册,专门去找这几个位的一个定义

4.外部中断的用法

我们这些中断需要用到这些位
在这里插入图片描述
14.2 定时器0/1
14.2.1定时器0/1控制寄存器(TCON)
IT1:外部中断源1触发控制位。IT1=0,上升沿或下降沿均可触发外部中断1。IT1=1,外部中断1程控为
下降沿触发方式。
IT0:外部中断源o触发控制位。ITO=0,上升沿或下降沿均可触发外部中断0。选择这种方式,会在上升沿或者下降沿各触发一次。
IT0=1,外部中断0程控为下降沿触发方式,下降沿才会处理(按键按下的一瞬间),和IT0差不多。

TF1:T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件将TF1位置“1”,
并向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由查询软件清“0”)。
TF0:T0溢出中断标志。TO被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置“1”TFO,
向CPU请求中断,一直保持CPU响应该中断时,才由硬件清o(也可由查询软件清0)。
IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该中断时由
硬件清“0”IE1。
IE0:与TF0成对出现,上电的时候最好给TF0手动清0,因为防止他上电以后直接进中断。外部中断O请求源(INTO/P3.2)标志。IEO=1外部中断0向CPU请求中断,当CPU响应外部中断时,
由硬件清“0”IE0(边沿触发方式)。

EX0:外部中断0中断允许位。
0:禁止INT0中断
1:允许INT0中断
手册里关于INT0的中断例程如下:
在这里插入图片描述

IT0和IT1功能是一样的,只是控制的这个中断不一样,使用了一个下降沿。使能了一个INT0的中断
复制上节课的程序,重命名为11.外部中断,在HARDWARE子目录下新建EXIT文件夹,存在外部中断相关代码。
新建exit.c和exit.h,添加include路径,并在demo.c和exit.c中引用。
在exit.h中新建函数声明:

//------------------------函数声明-----------------------//
void INT0_Init(void);						//外部中断0

在exit.c中实现函数并编写服务函数模板:

void INT0_Init(void)		//外部中断0的初始化
{
	IT0 = 1; 				//1:下降沿中断,0:上升或下降沿中断
	EX0 = 1;				//允许中断
	IE0 = 0;				//清除中断标志位
}

/*			//复制这个文件的时候,记得把这个中断函数复制到主程序
			//这个是属于用户型的一个文件(用户需要在里面编写自己的功能),建议将其放在主程序main函数之后,方便更好的引用
void INT0_Isr(void) interrupt 0		//中断号为0
{
	//编写用户程序,放在这里仅做提醒
}
*/

在demo.c中调用:INT0_Init(); //外部中断0初始化
删除之前的功能,并在中断服务函数中增加执行代码:

void INT0_Isr(void) interrupt 0		//中断号为0
{
	LED0 = !LED0;
}

构造新的业务场景,比如说在main函数中执行以下操作:

			for(i=0;i<8;i++)
			{
				LED = ~(1<<i);		//循环8次,第几次就点亮第几个LED
				delay_ms(500);
			}
			if(P33==0)
			{
				SEG1 += 1;
			}

void INT0_Isr(void) interrupt 0		//中断号为0
{
	SEG0 += 1;
}

延时也好,切换数码管也罢,只要按键按下,这个数码管直接会变化。

//数码管初始化,显示0-7
	SEG0 = 0;		//INT0中断测试初始值显示0
	SEG1 = 0;		//INT0中断测试初始值显示0

执行代码,看一下普通按键和中断按键有什么区别。
正常运行时,灯500ms点亮一个,左移,一个结束时4s。
然后有按下他就数码管加1(分析下为什么这企按键没有写延时消科?),然后再回来执行这个。也就是说在这个灯从第0第一颗亮到第8颗中间,怎么按都没有用。
但作为外部中断,按键一旦按下,立刻就能增加。外部中断可以及时响应。

完整代码

请参考:《STC单片机原理-教学视频配套附件-20230731.zip

总结

1.熟悉外部中断的作用和使用方式

课后练习:

1.课后自己尝试一下外部中断1的程序的编写
2.可以试着编写一下外部中断2-4的程序
3.思考下什么时候需要使用到外部中断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最小二乘法的实现与线性回归的应用

1. 简介 简单线性回归中&#xff0c;您有一个因变量y和一个自变量X。该模型可以表示为&#xff1a; y m x b ymxb ymxb 其中 x x x: 自变量 y y y: 因变量 m m m: 斜率 b b b: 截距 最小二乘法是回归分析中用于估计线性回归模型参数的标准方法。它可以最小化误差的平方和&…

SpringBoot课堂笔记20230913

本篇文章为SpringBoot学习笔记&#xff0c;方便自己再复习。 Maven&#xff1a;jar包管理工具 注解&#xff1a; Controller:处理http请求&#xff0c;返回的视图 RestController: 相当于ResponseBody和Controller一起用&#xff0c;返回的是json ResponseBody:返回响应内容 …

客户关系管理的定义及三种常见的CRM系统

CRM旨在加强企业与客户的关系&#xff0c;建立以客户为中心的经营策略。随着技术的迅速发展&#xff0c;CRM的实施变得更加普遍&#xff0c;不仅能帮助企业与客户建立紧密联系&#xff0c;还能实现客户细分开展个性化的营销活动。客户关系管理是什么&#xff0c;CRM怎么分&…

【MySQL】数据库的操作

目录 前言 创建数据库 编码集和校验集 不同校验集的区别 删除数据库 确认当前数据库 查看数据库属性 修改数据库属性 备份与还原 数据库和表的备份 还原 创建表 查看列结构 查看表属性 修改表的列 修改表名称 修改列名称 删除表 前言 在上一篇文章中&#…

什么是生成对抗网络 (GAN)?

什么是生成对抗网络 &#xff08;GAN&#xff09;&#xff1f; 钦吉兹赛义德贝利 一、说明 GAN&#xff08;Generative Adversarial Network&#xff09;网络是一种深度学习模型&#xff0c;由两个神经网络——生成器和判别器组成。生成器负责生成虚假的数据&#xff0c;而判别…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题&#xff5c;构建打包不存在模版文件(templates等) 准备文件&#xff0c;这里我放在resource下的templates路径 在pom中配置构建打包的资源&#xff0c;更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

Windows+Pycharm 如何创建虚拟环境

当我们开发一个别人的项目的时候,因为项目里有很多特有的包,比如 Pyqt5.我们不想破坏电脑上原来的包版本,这个时候,新建一个虚拟环境,专门针对这个项目就很有必要了. 简略步骤: 1.新建虚拟环境 1.打开 pycharm 终端(Terminal)安装虚拟环境工具: pip install virtualenv2.创…

基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1图像指数对比度增强概述 4.2基于FPGA的图像指数对比度增强 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns…

Redis——渐进式遍历和数据库管理命令

介绍 如果使用keys * 这样的操作&#xff0c;将Redis中所有的key都获取到&#xff0c;由于Redis是单线程工作&#xff0c;这个操作本身又要消耗很多时间&#xff0c;那么就会导致Redis服务器阻塞&#xff0c;后续的操作无法正常执行 而渐进式遍历&#xff0c;通过多次执行遍历…

虹科展会丨9月19号工博会启航:虹科五大团队携20+产品,双展台+两场演讲等您来!

2023年9月19-23日&#xff0c;第23届中国国际工业博览会即将在上海国家会展中心拉开帷幕。本届工博会以“碳循新工业、数聚新经济”为主题&#xff0c;展览面积30万平方米&#xff0c;吸引了来自全球27个国家和地区超2600家企业参展&#xff0c;共设置九大专业展区&#xff0c;…

电子游戏冷知识

电子游戏一直在试图用技术还原一个真实或虚幻的世界&#xff0c;并在其中演绎和倾诉人类种种的情感和欲望。 对信息技术发展的贡献 游戏推动了芯片、网络、VR/AR等领域的技术进步和创新。根据中科院的研究报告&#xff0c;游戏技术对芯片产业的科技进步贡献率是14.9%&#xff…

清华大学LightGrad-TTS,且流式实现

论文链接&#xff1a; https://arxiv.org/abs/2308.16569 代码地址&#xff1a; https://github.com/thuhcsi/LightGrad 数据支持&#xff1a; 针对BZNSYP和LJSpeech提供训练脚本 针对Grad-TTS提出两个问题&#xff1a; DPMs are not lightweight enough for resource-con…

真空腔体的设计要点

真空腔体是保持内部为真空状态的容器&#xff0c;真空腔体设计制作要考虑容积、材质和形状。 1、根据应用需求选择腔体形状。几种代表性的真空腔体包括垂直真空腔体、水平真空腔体、立方真空腔体和球形真空腔体。 2、根据获得真空度选择腔体材质。钛用于极高真空&#xff1b;…

轻松学习 Spring 事务

文章目录 一. Spring事务简介二. Spring事务使用1. 编程式事务2. 声明式事务 三. Transactional的使用1. 参数作用2. 事务失效的场景3. Transactional工作原理 四. Spring 事务的隔离级别五. Spring事务传播机制 一. Spring事务简介 在之前的博客已经介绍了在 Spring 环境中整…

《向量数据库指南》——Milvus Cloud是如何从 0 到 1 做一款向量数据库的?经过了哪些升级和迭代?

这实际上是一个颇具曲折性和难得性的故事。由于我自己是在公司中间加入的&#xff0c;从 2.0 版本开始参与了 Milvus 的构建&#xff0c;而我们公司在向量数据库领域已经有大约 5 年的历史了。 最初&#xff0c;我们看到了这个机会&#xff0c;并意识到有诸如 Faiss 等引擎在处…

文件属性操作函数

1.access函数 #include <unistd.h> int access(const char *pathname, int mode); 作用&#xff1a;判断某个文件是否有某个权限&#xff0c;或者判断文件是否存在 参数: -pathname:判断的文件路径 -mode: R_OK&#xff1a;判断是否有读权限 W_OK X_OK F_OK&#xff1a;…

vue实现鼠标拖拽div左右移动的功能

直接代码&#xff1a; <template><div class"demo"><div class"third-part" id"发展历程"><div class"title">发展历程</div><div class"content" id"nav" v-if"dataList…

马斯克回应盖茨;谷歌反垄断案开庭;苹果发布 3nm 芯片的 iPhone 15丨RTE开发者日报 Vol.48

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

液压切管机配套用液压泵站比例阀放大器

液压切管机配套用液压泵站是液压系统的动力源&#xff0c;可按机械设备工况需要提供一定压力、流量和清洁度的工作介质。它由泵组、油箱组件、控温组件、滤油器组件及蓄能器组件等组合而成&#xff0c;液压泵站主要服务于大型管道工程。

L1-020 帅到没朋友 C++解法【全网最全】

一、题目再现 当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&#xff0c;是已知朋友圈的个数&#xff1b;随后N行…