零基础学习8051单片机(十六)

继续学习8051单片机,本次通过观看视频在此学习8051单片机的中断系统

要掌握单片机中断系统的硬件结构和工作原理

掌握:中断系统的初始化编程以及中断服务子程序设计。

一、中断的基本过程图:

 

中断的响应和处理过程:

当中断提出中断请求的时候,要打断正常执行的主程序,那么正在执行的这条指令的下一条指令的地址,要压到堆栈里面去,当执行完中断服务程序时,断点地址在弹出来,就继续执行主程序

实时监测没有中断实现不了

二、中断系统结构

 注:这些位都可以用位指令来将其置1或者清0,用软件人为的置1,就是人为制造1个中断源

当人为制造中断源是,两个定时器的中断请求标志位是自动清的,串行口是用软件清0,对于外中断是响应之后,自动清的

(1 INT0*——外部中断请求0,中断请求信号由INT0*引脚输入,请求标志为IE0

2 INT1*——外部中断请求1,中断请求信号由INT1*引脚输入,请求标志为IE1

3定时器/计数器T0计数溢出发出的中断请求,请求标志为TF0

4定时器/计数器T1计数溢出发出的中断请求,请求标志为TF1

5串行口中断请求,请求标志为发送中断TI或接收中断RI

外中断的触发方式有两种:

1.电平触发——低电平有效,高电平不会发出中断请求,低电平发出中断请求

2.跳沿触发——外设加到引脚上,成为负跳变,就等于发出了一个中断请求,负跳变有效

注:一个中断源的中断响应还要看是否允许它:EX0是控制外部中断零是否允许外部中断零申请中断的控制位

定时器的触发:当定时器/计数器计满的时候,就会把中断请求标志置为1

串口中断有两种:接受和发送,他们共用一个中断入口

注:中断中的每一位都是特殊功能寄存器中的某一个,可以用指令对其置1或清0,当单片机复位的时候,相应的这几个位都为0,

EA是总的中断允许位,EA写0开关断开,EA写1开关闭合此时允许CPU开中断至于到底要那一位中断,还要看5个中断源的5个标志位

注意:一个中断源是否允许中断,要看对应的中断标志位,都是特殊功能寄存器中的某一位,都可以用软件置为1或清0,IE中断允许寄存器,IP中断优先级寄存器,如果让他为高优先级则置为1

三、特殊功能寄存器

注:串行口发送或接受数据是以帧为单位的,这一帧信息发完之后,发送中断有效,然后进入中断服务程序,把下一次要发的哪一个字节数据送到发送缓冲器,同理还有一个接受中断,当接受完的信息在接受缓冲器里面,单片机CPU应当把接受缓冲器里面的信息读走,所以他有接受中断和发送中断两个标志位

要弄明白TCON、SCON各位的含义

注:使用字节指令编程需要对内部寄存器各位的含义非常的熟悉 

这两个不可寻址的优先级 激活触发器,不能用指令进行置1或者清0,这两个触发器代表中断系统在执行某一个中断的时候来告诉用户,它是高优先级中断还是低优先级,它实际上代表执行当前中断的优先级别

 注:用字节指令需要对硬件特别熟悉

注:同级不能打断同级,低级不能打断高级 

注:

若为同一级别的中断请求,则按照单片机内部顺序进行执行,若用软件设置为高优先级或低优先级,则优先按照软件设定的优先级执行

这个中断入口是程序存储器的地址,当单片机复位的时候程序指针指向0000H,0000H、0001H、0002H这三个空闲单元,正好放一条长跳转指令,跳向主程序MAIN,所以编程时:

                ORG  0000H

                LJMP  MAIN

下一个单元就是0003H,

主程序一般放在之后的某个位置可以写:ORG  XXXXH

注:一个中断请求能够被响应必须满足4个条件,4个必要条件满足,也不一定响应,原因在于上面可能出现的三种情况 

注:

当外设有中断请求的时候,向外中断输入引脚发一个低电平信号即可

51单片机这个CPU在每个机器周期实际上都在简则外中断输入引脚,只要是低电平当时就可以检测到,当处理完中断后发出中断的低电平一定要撤销,否则会再次中断

 注:这个机器周期检测外中断输入线是高电平,下一个周期在检测它为低电平,说明中间发生了一个负跳沿,这时用软件设置为挑眼触发就说明有中断请求,跳沿触发适合以负脉冲的形式来发送中断请求的外设,如最常见的AD转换器

 注:当中断相应完之后,一定要把中断标志位清0,由于每个机器周期都查这5个标志位,没清掉系统以为还有中断请求

 注:对于电平触发的这种外中断请求,在中断请求标志位自动撤销以后,往往可能要加一个上图所示的附加电路,要把电平触发输入这个地方的低电平给他撤掉,把低电平变为高电平,要加这个电路

  注:当单片机复位的时候,这俩寄存器都为0,所以最开始都是禁止中断、低优先级的,需要用软件对其进行初始化

 注:

关中断:实际上就是把EA那位清0,在电路中把电路打开,不允许任何中断发生,意思就是这个中断请求进入中断服务程序后,不允许其他任何中断来打断它

现场保护:现场保护就是为了把下面进行中断处理用到的一些寄存器,把原来寄存器里面那些内容一定压到堆栈里,所以上面要关中断就是为了现场保护,如果正在现场保护又来新的中断容易把原来寄存器里面的内容打断,这时候主要是压栈操作

开中断:保护完之后开中断,这时候可以由别的中断打扰它

中断处理:之后进行中断处理,这个中断处理要根据要完成的任务进行处理

关中断:这个关中断的目的是为了把现场恢复出来,如果正恢复现场,再来个中断容易擦现场搞乱

现场恢复:进行堆栈的恢复

开中断:恢复之后再开中断

中断返回:RETI指令

上面这个顺序不是必要的,如果不需要进行现场保护就不用来回的开关中断

注:

这里涉及到中断返回子程序与子程序的区别问题: 把响应中断时所置“1”的不可寻址的优先级状态触发器清“0”

这是两条指令即RET与RETI指令最根本的区别,RET指令没有中断的优先级是高优先级还是低优先级的问题

所有的中断请求标志,尤其是跳沿触发的外中断标志,当有外中断请求时,发出一个负跳沿,然后中断请求标志置为1,然后中断请求标志查询有更高级的中断请求,执行完之后,原来的中断响应未丢失,因为它是带锁存的,只要那个中断没响应,那个中断就还是1,什么时候响应了,什么时候才把它清0

调用子程序的时候,是执行程序当中主动调用的,那个端点实际上是正在执行指令的下一条指令的地址,然后子程序执行完毕之后,RET指令,再把那个断定弹到PC指针里面,在继续执行没有执行完的主程序

中断是随机的,不一定什么时候有这个中断请求每当发生中断的时候,硬件自动的执行一条长跳转指令,然后断点被压到堆栈里,然后注意两个不可寻址的中断优先级触发器,有一个必定为1表明当前响应的中断是高优先级还是低优先级,然后中断服务子程序执行完了,返回那两个中断优先级触发器,其中被置为1那个,肯定得到清0,然后再把断点从堆栈里面弹出来继续执行

如果中断服务子程序最后使用的是RET指令,断点也弹出来了,但是那个中断优先级触发器不会清0,再来一次中断,它就往中断里面跳,但两个中断优先级没有清0,它就不会进去了

 注:两种方法:一种加中断优先级触发器,另一种采用软硬结合的方法

注:它这5个中断源是电平触发,当有中断请求的时候,他们其中任意一个都要发出一个高电平信号,原来是低电平信号

注:上述这个例子的前提是只有一个中断

第二种方法是用硬件编码器,它用硬件自动判断,然后通过某种连法加到上面

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis篇----第十三篇

系列文章目录 文章目录 系列文章目录前言一、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key是以某个固定的已知的前缀开头的,如果将它们全部找出来?二、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?三、使用过 Redis 做异步队列么,你是怎么用的?四、使用…

Apache Doris 发展历程、技术特性及云原生时代的未来规划

文章目录 作者介绍 Apache Doris特性极简结构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速 关于 Apache Doris 开源社区基于云原生向量数据库 Milvus 的云平台设计实践作者介绍图书推荐 本文节选自《基础软件之路&am…

第六篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:深度解读Kaldi库个性化定制语音搜索引擎

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、数据准备示例代码四、特征提取示例代码五、声学模型训练示例代码六、语言模型训练示例代码七、解码示例代码八、评估和调优示例代码九、…

LeetCode | 寻找两个正序数组的中位数 Python C语言

Problem: 4. 寻找两个正序数组的中位数 文章目录 思路解题方法Code结果结果一些思考 思路 先合并,后排序,最后找中间轴。 解题方法 由解题思路可知 Code 这是python3的代码。 class Solution(object):def findMedianSortedArrays(self, nums1, num…

分享Video.js观看Web视频流

界面效果 HTML结构 <div class"homePopup" ><div class"search_box animate__animated animate__fadeInDown" style"display: none;"><div class"van-search" style"background: rgba(0, 0, 0, 0);">&…

【云原生】Docker consul的容器服务更新与发现

目录 什么是服务注册与发现 什么是consul consul提供的一些关键特性&#xff1a; consul 部署 consul服务器 1. 建立 Consul 服务 设置代理&#xff0c;在后台启动 consul 服务端 2. 查看集群信息 查看members状态 查看集群状态 3. 通过 http api 获取集群信息 regi…

SpringBoot指定外部环境配置

nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar /usr/local/xxxx.jar --spring.profiles.activeprod > system.log 2>&1 & --spring.profiles.activeprod修改的是多环境配置中内部application.properties里的spring.profiles.active值 -Dspring.config…

新手初期交易是盈利的,等熟练了却开始亏损了?

许多个人投资者涌入市场&#xff0c;初衷是期望能实现暴利并创造奇迹。梦想是美好的&#xff0c;追求暴利也无可非议&#xff0c;但最担心的是一开始就设定了不切实际的目标。例如&#xff0c;他们可能认为&#xff0c;若一年内不能赚取五倍或十倍的收益&#xff0c;就等于失败…

【AI大语言模型】ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪&#xff0c;主机是ubuntu 18.04&#xff0c; 内存有32G&#xff0c;并且系统中有两份Android13代码&#xff0c; 有一份编译正常&#xff0c;另外一份编译不正常&#xff0c;一度以为是因为下载源码不齐全导致&#xff0c;后面仔细看日志&#xff0c;原来是内…

同步系统时间chrony

安装 yum install chrony 启动并启用chronyd服务&#xff1a; systemctl start chronyd systemctl enable chronyd 查看chrony的状态&#xff0c;确认是否已经与NTP服务器同步 chronyc tracking

ElasticSearch DSL查询、排序 、分页的原理及语法

1. DSL查询分类和基本语法 ElasticSearch提供了基于Json的DSL来定义查询&#xff0c;常见的查询类型包括&#xff1a; • 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用&#xff0c;一般不是查出所有&#xff0c;一次性查询20条。例如 match_all • 全文检索(ful…

RMAN备份与恢复

文章目录 一、RMAN介绍二、全量备份三、增量备份0级备份1级增量备份累积性差量备份总结 四、压缩备份压缩备份介绍压缩备份操作压缩备份优缺点 五、异常恢复1、恢复前的准备2、恢复数据库 六、RMAN相关参数 一、RMAN介绍 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

Oracle:一条SQL在Oracle中的执行过程流程

一条SQL在Oracle中执行过程流程如下图&#xff1a;

QT-Day1

思维导图 作业 自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口this->setWindowTitle("QQ");this->setWindowIcon(QIcon("D:\\study\\hqyj\\co…

【PX4-AutoPilot教程-TIPS】PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法

PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法 问题描述解决方法 问题描述 无人机在Gazebo中飞行时&#xff0c;无人机始终处于画面中央&#xff0c;会带着视角乱晃&#xff0c;在Gazebo中进行任何操作视角都无法固定。 观察Gazebo左侧Wo…

【JavaEE】_ajax构造HTTP请求

目录 1. ajax简述 2. ajax构造HTTP请求 2.1 jquery库的引入 2.2 ajax构造HTTP请求格式 3. ajax构造GET请求实例 4. ajax构造POST请求实例 本专栏关于form表单构造HTTP请求一文中已经提到&#xff1a;form表单构造法只支持GET和POST&#xff0c;且会触发页面跳转。 原文详…

线上线下同时开店管理混乱?EasyBoss ERP升级线下零售订单功能帮你轻松搞定

许多做东南亚本土电商的卖家&#xff0c;会将线下店铺作为业绩增长的一个重要渠道&#xff0c;但是在运营过程中会出现&#xff1a;需要使用多个系统、库存不同步、数据混乱等问题&#xff0c;为了帮助卖家解决这些问题&#xff0c;EasyBoss此前已开发线下零售订单功能&#xf…

【Linux】再谈进程地址空间

目录 一、引入 二、物理内存和外设空间的交互 三、解决页表过大问题 一、引入 我们在往期的博客中有讲解过进程地址空间&#xff1a;【Linux】进程地址空间 但是在上述博客中我们只是对进程地址空间的左边部分详细进行了讲解&#xff0c;下面我们就来谈谈右边的部分&#…

支付功能设计及实现思路

支付功能设计 主要包括&#xff1a;订单表&#xff0c;订单日志表&#xff0c;订单队列&#xff0c;定时任务。 主要考虑&#xff1a;事务性、幂等性、安全性。 表结构设计 订单表&#xff1a; 订单表&#xff0c;最主要的就是订单号、支付状态。 CREATE TABLE t_order (…
最新文章