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

文章目录

  • 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触发控制位。IT0=0,上升沿或下降沿均可触发外部中断0。选择这种方式,会在上升沿或者下降沿各触发一次。
IT0=1,外部中断0程控为下降沿触发方式,下降沿才会处理(按键按下的一瞬间),和IT0差不多。

TF1:T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件将TF1位置“1”,
并向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由查询软件清“0”)。
TF0:T0溢出中断标志。TO被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置“1”TF0,
向CPU请求中断,一直保持CPU响应该中断时,才由硬件清o(也可由查询软件清0)。
IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该中断时由
硬件清“0”IE1。
IE0:与TF0成对出现,上电的时候最好给TF0手动清0,因为防止他上电以后直接进中断。外部中断0请求源(INT0/P3.2)标志。IE0=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;				//允许中断,请求源(INT0/P3.2)标志。IE0 = 0;				//清除中断标志位
}/*			//复制这个文件的时候,记得把这个中断函数复制到主程序//这个是属于用户型的一个文件(用户需要在里面编写自己的功能),建议将其放在主程序main函数之后,方便更好的引用
void INT0_Isr(void) interrupt 0		//中断号为0,请求源(INT0/P3.2)标志。
{//编写用户程序,放在这里仅做提醒
}
*/

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

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

编译测试,按动按键P32,可以实现LED亮灭。

新的测试场景

更进一步,构造新的业务场景,比如说在main函数中执行以下操作(main函数开头需增加定义循环变量:u8 i;):

			for(i=0;i<8;i++){LED = ~(1<<i);		//循环8次,第几次就点亮第几个LEDdelay_ms(500);}if(P33==0){SEG1 += 1;if(SEG1 == 9) 		//从0-9变化,防止越界SEG1 = 0;}void INT0_Isr(void) interrupt 0		//中断号为0
{SEG0 += 1;if(SEG0 == 9) 		//从0-9变化,防止越界SEG0 =0;
}

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

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

执行代码,看一下普通按键和中断按键有什么区别。
上电正常运行时,SEG0、SEG1数码管显示0,LED灯500ms点亮一个,左移一个,到LED7点亮结束总用时4s。
板载LED灯从第0第一颗亮到第8颗中间,怎么按P33都没有用。必须等到LED7点亮直到熄灭的瞬间,再按下P33,执行到其后面的if判断语句,SEG1数码管加1(分析下为什么这里按键没有写延时消科?),然后再回来重复执行。长按P33,执行到if语句也可以实现增加1的效果。
P32但作为外部中断(INT0),按键一旦按下,立刻就能增加。说明外部中断可以及时响应。并且按动P32期间,LED左移亮灭正常进行,无影响。

完整代码

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

总结

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

课后练习:

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

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

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

相关文章

视频讲解|1033含sop的配电网重构(含风光可多时段拓展)

目录 1 主要内容 程序特点 讲解重点 2 视频链接 1 主要内容 该视频为含sop的配电网重构matlab代码讲解&#xff0c;对应资源下载链接为含sop的配电网重构&#xff08;含风光|可多时段拓展&#xff09;&#xff0c;程序主要内容是&#xff1a;针对含sop的配电网重构模型&…

基于Java的公务员考试资料共享平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

【Linux基础】第28讲 Linux Vi编辑器

在Linux下一班使用Vi编辑器来编辑文件vi既可以查看文件也可以编辑文件而vim是vi的升级版本&#xff0c;具备更多的功能。vi如果目标文件不存在&#xff0c;会创建新的文件。但如果新文件没做编辑&#xff0c;退出后还会消失。 VI的三种模式介绍 三种模式&#xff08;状态&…

UML基础与应用之面向对象

UML&#xff08;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中&#xff0c;UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的…

网络爬虫-----爬虫的分类及原理

目录 爬虫的分类 1.通用网络爬虫&#xff1a;搜索引擎的爬虫 2.聚焦网络爬虫&#xff1a;针对特定网页的爬虫 3.增量式网络爬虫 4.深层网络爬虫 通用爬虫与聚焦爬虫的原理 通用爬虫&#xff1a; 聚焦爬虫&#xff1a; 爬虫的分类 网络爬虫按照系统结构和实现技术&#…

Linux——IO

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;是不是只有C/C有文件操作呢&#xff1f;python&#xff0c;java&…

长尾关键词挖掘软件-免费的百度搜索关键词挖掘

嗨&#xff0c;大家好&#xff01;今天&#xff0c;我想和大家聊一聊长尾关键词挖掘工具。作为一个在网络世界里摸爬滚打多年的人&#xff0c;我对这个话题有着一些个人的感悟和见解&#xff0c;希望能与大家分享。 首先&#xff0c;让我坦白一点&#xff0c;长尾关键词挖掘工具…

《计算机视觉中的多视图几何》笔记(3)

3 Projective Geometry and Transformations of 3D 这章主要讲的是3D的射影几何&#xff0c;与2D的射影几何差不多。主要区别是&#xff1a; 3D射影几何对偶的是点和平面&#xff0c;直线是自对偶的。3D空间中直线有4个自由度&#xff0c;这一现象并不是那么容易直接得出。一…

2023最新安装微信小程序开发软件安装教程

一&#xff0c;安装开发者工具 我们在开发小程序之前&#xff0c;首先需要安装小程序开发者工具&#xff0c;今天就来教大家安装小程序开发者工具。 微信开放文档 (qq.com)https://developers.weixin.qq.com/miniprogram/dev/framework/ 官网工具下载地址&#xff1a; 微信…

在windows下持续ping ip,将返回结果及时间记录到文件中

在纯英文路径下创建文件ping.txt 在txt中写入 Dim args, flag, unsuccOut args"" otherout"" flag0If WScript.Arguments.count 0 Then WScript.Echo "Usage: cscript tping.vbs [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]" WScr…

NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133)

一、介绍 在 Android 添加 NDK ndk 的时候&#xff0c;出现 Unity requires NDK r19 (64-bit)(19.0.05232133)。 二、环境 1、Unity 2020.3.48f1c1 2、Android NDK 配置 三、报错信息 NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133) 四、解决方法 1、下…

uniapp 在父组件中使用ref属性调用子组件中的方法 报错undefined

项目背景&#xff1a; 项目是自定义底部tabBar&#xff0c;所以这个页面是index(首页的一个子组件ref"pageC") 现在要求是不管页面滚动到第几页数据&#xff0c;或者每次从详情页以及其他页面回到这个页面时&#xff08;子组件pageC)内容都要回到顶部 所以我在index的…

华为OD机试 - 求最多可以派出多少支团队 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

【 Tkinter界面-练习05】 event和bind

一、说明 事件和动作有关&#xff1b;所有的界面都与运动有关&#xff0c;本篇将对事件、事件触发、绑定回调函数等&#xff0c;其实是一系列部件配合的复杂的过程&#xff0c;这些过程牵扯到系统如何设计&#xff0c;线程、消息队列循环等。本篇将详细介绍各种因素的关系。 二…

vue3创建的官网提示方法

创建: npm create vuelatest 或许会出现提示: 根据官网提示: 意味着我们需要安装或者更新create-vue的版本 后面就可以跟随提示了

【2023年11月第四版教材】第13章《资源管理》(第三部分)

第13章《资源管理》&#xff08;第部分&#xff09; 4 规划资源管理4.1 数据表现★★★4.2 资源管理计划★★★4.2 团队章程★★★ 5 估算活动资源 4 规划资源管理 组过程输入工具和技术输出规划1.规划资源管理1.项目章程2.项目管理计划&#xff08;质量管理计划、范围基准&am…

VOP —— Noise

目录 Turbulent Noise —— 计算1D/3D类型的Noise Anti-Aliased Flow Noise —— 生成抗锯齿噪波 Anti-Aliased Noise —— 生成抗锯齿噪波 Curl Noise —— 创建divergence-free 3D噪波 Curl Noise 2D —— 创建divergence-free 2D噪波 Flow Noise —— 生成1D/3D Perli…

下载安装nvm教程(附带下载切换node.js版本实操)

目录 一、介绍 二、下载 三、安装步骤 四、配置淘宝源 五、测试 六、常用的nvm命令 七、下载切换node版本实操 node版本参考 一、介绍 node版本管理&#xff1a;nvm就是可以切换你的node版本&#xff0c;特别是当node版本过高或者过低时候&#xff0c;就可以用nvm进行…

036:vue导出页面生成pdf文件

第036个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

GIF动图怎么变成jpg动图?一键分解GIF动画

GIF格式图片怎么转换成jpg格式图片&#xff1f;在日常生活中jpg、png转GIF格式非常的常见&#xff0c;那么gif转换成jpg格式应该怎么操作呢&#xff1f;很简单&#xff0c;给大家分享一款gif动态图片制作&#xff08;https://www.gif.cn/giffenjie&#xff09;工具&#xff0c;…