GPIO:

Genral Purpose Input/Output,GPIO是51单片机和外界交互最基本的方式

  • 工作模式:

    • 输出模式:单片机给定引脚一个电平(高电平(5V) 低电平(0V)),控制引脚实现高低电平
    • 输入模式:检测引脚电平变化
    • GPIO水龙头
      • 输出模式:制水龙头(水流)
      • 输入模式:观察水龙头是否有水流(按键)

按键:

按键K1,两个引脚被接到GND和P1_4引脚,当K1按键被按下时,P1_4引脚会和GND短路到一起,P1_4引脚会呈现低电平

判断按键是否被按下:只需要检测对应的引脚是否为低电平

中断:

概念:

CPU在执行一个任务时,被外界更为紧急的事件打断,转而去执行更为紧急的任务,执行完后再回到刚才的地方继续向下执行,这一过程叫做中断

中断源:

打断CPU执行当前任务的事件/源头叫做中断源

51单片机有5个中断源

中断源分类:

外部中断0、外部中断1、时器0、定时器1、串口

外部中断:

单片机上的引脚电平变化所引发的中断(INTO(P3-2)、INT1(P3-3))

中断优先级:

CPU再去处理中断任务时候,会去比较多个中断的优先级,优先去处理优先级高的中断

中断嵌套:

处理一个中断时,再嵌套另外的中断;51单片机只允许嵌套2层

中断处理流程:

  • 中断源发出中断请求
  • 检查CPU是否响应中断及该中断源是否被屏蔽
  • 比较中断优先级
  • 保护现场
  • 执行中断服务函数(回调函数)
  • 恢复现场

中断相关寄存器配置:

  • IE寄存器(中断允许寄存器)
    • 将IE寄存器中的bit7,EA置1,代表CPU能够响应所有中断
    • 将IE寄存器中的bit0,EX0置1,代表允许外部中断0产生中断

  • TCON寄存器(定时器寄存器)
    • 将TCON寄存器的bit1,IE0置1,代表向CPU发起中断请求,CPU响应完中断请求后,硬件清“0”
    • 将TCON寄存器的bit0,IT0置1,代表外部中断0下降沿触发中断

定时器

能够产生一个精准的定时,不同外设对时序的要求高(高电平和低电平时间是精准的)

51单片机内部有两个定时器,分别为timer0、timer1,所使用自增型定时器(计数器 16位)

16位定时器和8位自动重装载定时器的区别:

16位定时器:

  • 结构:有两个8位寄存器构成,THx(高 8 位)、TLx(低 8 位)
  • 计数范围:0 ~ 65535
  • 特点:
    • 当 TLx/THx 计数满溢(FFFFH→0000H)时产生溢出中断。

    • 溢出后需要 软件重新装载初值(即在中断服务程序里重新写 THx/TLx),否则默认从 0000 开始继续计数。

  • 优点:范围大,可以实现较长的定时周期。

  • 缺点:每次溢出后都需要重新写入初值,增加了中断处理的负担。

8 位自动重装载定时器

  • 结构:THx 用作“固定初值寄存器”,TLx 用作“计数寄存器”。

  • 计数范围:0 ~ 255(2⁸-1)。

  • 特点

    • 每次 TLx 从 THx 自动装载初值。

    • 当 TLx 溢出(FFH→00H)时,硬件自动把 THx 的值重新装入 TLx,然后继续计数。

    • 无需在中断里写初值。

  • 优点:实现周期性定时更简单(只需设一次 THx),CPU 开销小。

  • 缺点:计数范围小,最长定时周期只有 256 个计数周期。

定时器相关寄存器配置:

8位自动重装载定时器:

分为TL0和TH0两部分,1byte,实际参与计数的只有TL0,当TL0中的值加到255溢出后,再将TH0中的值重新装入到TL0中

TCON寄存器:

  • bit4置1,TMOD寄存器中的Gate位清0, 代表允许定时器开始计数

TMOD寄存器:

  • 定时器0->低四位清0
  • 将TMOD寄存器中的M0,bit0置1,代表定时器0工作在16位定时器/计数器模式

IE寄存器:

  • 将IE寄存器中的bit7置1,代表CPU能够响应所有中断
  • 将IE寄存器中的bit1置1,代表允许定时器0产生中断

流程:

  • 先配置TMOD模式选择寄存器,将低四位清0,再将bit0置1代表工作在16位定时器
  • 向TH0和TL0中装入定时器的初值(1ms -> 64535)
  • 将TCON寄存器中的bit6置1,代表允许定时器开始计数
  • 将IE寄存器中的bit7和bit1置1,开启中断总开关和定时器0的子开关
  • 编写定时器0的中断服务函数

PWM脉冲宽度调制、蜂鸣器

能够让引脚产生一个方波,周期性的让引脚的电平发生翻转

  • PWM周期:一个方波所经历的周期(从上升沿 / 下降沿到下一个上升沿 / 下降沿所经历的时间)
  • PWM占空比:高电平在一个周期内所占的比例
  • 蜂鸣器:
    • 有源蜂鸣器:存在震荡源,通电后蜂鸣器会发出持续频率的声音
    • 无源蜂鸣器:不存在震荡源,通电后蜂鸣器不会发出声音,需要给蜂鸣器一个震荡,

蜂鸣器实现原理:

利用定时器精确产生周期中断,翻转 IO,得到稳定的方波。

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

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

相关文章

Java中最常用的设计模式

Java设计模式之结构型—代理模式-CSDN博客 观察者模式详解-CSDN博客 单例模式详解-CSDN博客 Java设计模式之结构型—享元模式-CSDN博客 Java设计模式之创建型—建造者模式-CSDN博客 Java设计模式之结构型—工厂模式-CSDN博客 Java设计模式之结构型—适配器模式-CSDN博客 …

使用Axure动态面板制作轮播图案例详解

在现代网页设计中,轮播图(Carousel)是一种常见且高效的展示方式,用于在同一空间内循环展示多张图片或内容。Axure RP作为一款强大的原型设计工具,提供了动态面板和丰富的交互事件功能,使得制作轮播图变得简…

VUE的中 computed: { ...mapState([‘auditObj‘]), }写法详解

具体解析:computed:这是 Vue 组件选项中的计算属性,用于声明依赖于其他数据而存在的派生数据。计算属性会根据依赖进行缓存,只有当依赖的数据发生变化时才会重新计算。mapState:这是 Vuex 提供的一个辅助函数&#xff…

【ProtoBuf】以 “数据秘语” 筑联络:通讯录项目实战 1.0 启步札记

文章目录引言筑路之备:快速上手ProtoBuf步骤一:创建.proto文件⽂件规范添加注释指定 proto3 语法package 声明符定义消息(message)定义消息字段【定义联系人 message】字段唯一编号的范围步骤2:编译 contacts.proto ⽂…

在 macOS 下升级 Python 几种常见的方法

在 macOS 下升级 Python 有几种常见的方法,具体取决于你最初是如何安装 Python 的。了解你的安装方式是关键。 首先,你需要知道你当前 Python 版本以及它的安装路径。 检查 Python 版本: python --version # 可能指向 Python 2.x python3 …

Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十五天

三、Shell脚本编程 Shell脚本语言的运算 算数运算 shell支持算术运算,但只支持整数,不支持小数 Bash中的算术运算 -- 加法运算 -- - 减法运算 -- * 乘法运算 -- / 除法运算 -- % 取模,即取余数 -- ** 乘方 ​ #乘法符号在有些场景需要转…

SpringAI系列---【多租户记忆和淘汰策略】

1.多租户工作原理 2.引入jdbc的pom spring官网链接:https://docs.spring.io/spring-ai/reference/api/chat-memory.html,推荐使用官网的jdbc。 阿里巴巴ai链接:https://github.com/alibaba/spring-ai-alibaba/tree/main/community/memories j…

Linux gzip 命令详解:从基础到高级用法

Linux gzip 命令详解:从基础到高级用法 在 Linux 系统中,文件压缩与解压缩是日常运维和文件管理的常见操作。gzip(GNU Zip)作为一款经典的压缩工具,凭借其高效的压缩算法和简洁的使用方式,成为 Linux 用户处…

Redis有什么优点和缺点?

优点:极致性能: 基于内存操作和高效的单线程 I/O 模型,读写速度极快。数据结构丰富: 支持多种数据结构,如 String、Hash、List、Set、ZSet、Stream、Geo 等,编程模型灵活。持久化与高可用: 提供…

NestJS 3 分钟搭好 MySQL + MongoDB,CRUD 复制粘贴直接运行

基于上一篇内容《为什么现代 Node 后端都选 NestJS TypeScript?这组合真香了》,这篇文章继续写数据库的连接。 所以今天把MySQL、MongoDB全接上,做个小实例。朋友们项目里用什么数据库可以视情况而定。 这里的功能分别为: MySQ…

用了企业微信 AI 半年,这 5 个功能让我彻底告别重复劳动

每天上班不是在整理会议纪要,就是在翻聊天记录找文件,写文档还要自己抠数据…… 这些重复劳动是不是也在消耗你的时间?作为用了企业微信 AI 功能半年的 “老用户”,我必须说:企业微信 AI 的这 5 个功能,真的…

从入门到高手,Linux就应该这样学【好书推荐】

从入门到高手,请这样学Linux 一、Linux基础与终端操作 1.1 Linux简介 Linux 是一种开源的类 Unix 操作系统,以其稳定性、安全性和高效性被广泛应用于服务器、嵌入式系统及开发环境中。掌握基本命令和操作技巧是 Linux 学习的关键。 1.2 终端基础 打开…

【数据可视化-104】安徽省2025年上半年GDP数据可视化分析:用Python和Pyecharts打造炫酷大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

组件库UI自动化

一、背景 背景: 组件库全局改动场景多,组件之间耦合场景多–时常需要全场景回归组件库demo有200多个,手动全局回归耗时耗力细微偏差纯视觉无法辨别 可行性分析: 组件库功能占比 L1(视觉层):图片…

面试题:JVM与G1要点总结

一.Java内存区域 1.运行时数据区的介绍 2.站在线程的角度看Java内存区域 3.深入分析堆和栈的区别 4.方法的出入栈和栈上分配、逃逸分析及TLAB 5.虚拟机中的对象创建步骤 6.对象的内存布局 1.运行时数据区的介绍 运行时数据区的类型:程序计数器、Java虚拟机栈、本地方…

车辆安全供电系统开发原则和实践

摘要在汽车行业中,安全应用的重要性在不断提升,例如受车辆自动化发展以及机械备用系统重要性降低的影响。为应对这些趋势,安全相关的电气和 / 或电子系统(E/E 系统)的电源输入必须由供电系统来保障,这使得功…

WebSocket客户端库:websocket-fruge365

🚀 从零开始打造一个WebSocket客户端库:websocket-fruge365 📖 前言 在现代Web开发中,实时通信已经成为不可或缺的功能。无论是聊天应用、实时数据监控,还是在线协作工具,WebSocket都扮演着重要角色。然而…

rocketmq批量执行跑批任务报错

rocketmq批量执行跑批任务,报下面的错误,怎么处理一下呢?是修改配置还是修改代码还是? org.apache.rocketmq.client.exception.MQBrokerException: CODE: 215 DESC: [FLOW]client has exhausted the send quota for the current …

大语言模型(LLM)简介与应用分享

1. 什么是大语言模型(LLM) 大语言模型(Large Language Model,简称 LLM)是基于 深度学习 和 海量文本数据 训练而成的人工智能模型。 采用 Transformer 架构参数规模巨大(数十亿到数千亿)能够 理…

【算法笔记】选择排序、插入排序、冒泡排序、二分查找问题

算法的笔记,直接上代码,思路和问题这些,都在代码注释上面 1、工具类 为了生成测试代码和比较器,专门写了一个数组工具类,代码如下: /*** 数组工具类*/ public class ArrUtil {/*** 生成随机数组* 长度是[0,…