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

2024-02-22 14:04

本文主要是介绍零基础学习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个中断源是电平触发,当有中断请求的时候,他们其中任意一个都要发出一个高电平信号,原来是低电平信号

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

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

这篇关于零基础学习8051单片机(十六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735478

相关文章

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

JavaScript装饰器从基础到实战教程

《JavaScript装饰器从基础到实战教程》装饰器是js中一种声明式语法特性,用于在不修改原始代码的情况下,动态扩展类、方法、属性或参数的行为,本文将从基础概念入手,逐步讲解装饰器的类型、用法、进阶... 目录一、装饰器基础概念1.1 什么是装饰器?1.2 装饰器的语法1.3 装饰器的执行时机二、装饰器的

Java JAR 启动内存参数配置指南(从基础设置到性能优化)

《JavaJAR启动内存参数配置指南(从基础设置到性能优化)》在启动Java可执行JAR文件时,合理配置JVM内存参数是保障应用稳定性和性能的关键,本文将系统讲解如何通过命令行参数、环境变量等方式... 目录一、核心内存参数详解1.1 堆内存配置1.2 元空间配置(MetASPace)1.3 线程栈配置1.

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We