嵌入式 - 硬件:51单片机(2)

本节重点:

1. GPIO输入模式、输出模式

2. 按键工作原理(GPIO输入)

3. 中断概念

4. 中断源概念、中断源个数、哪几个中断源

5. 外部中断、定时器中断概念

6.  中断处理流程:

7. 51单片机中定时器的个数?类型

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

9. PWM的概念、PWM周期、PWM占空比

10、有源蜂鸣器和无源蜂鸣器的区别

11、51单片机蜂鸣器实现原理

一、GPIO

GPIO(General Purpose Input/Output,通用输入输出口)是单片机与外部设备通信的最基本接口,相当于单片机的 “手”(输出控制)和 “眼”(输入检测)。

1. GPIO 的两种工作模式

  • 输出模式:单片机主动给引脚赋值 “高电平(5V)” 或 “低电平(0V)”,从而控制外部设备。比如给 LED 引脚送高电平,LED 点亮;送低电平,LED 熄灭。
    可以用 “水龙头” 比喻:输出模式就像 “控制水龙头开关”—— 单片机决定水流(电平)的通断。
  • 输入模式:单片机被动检测引脚的电平变化,获取外部设备的状态。比如检测按键是否按下、传感器是否触发。
    对应 “水龙头” 的比喻:输入模式就像 “观察水龙头是否有水流出”—— 单片机只负责判断状态,不主动控制。

二、按键:GPIO 输入模式的典型应用

按键是单片机系统中最常见的 “人机交互部件”,其工作原理本质是通过 GPIO 输入模式检测引脚电平。

1. 按键的硬件连接(以 K1 为例)

按键 K1 的两个引脚分别接 GND(地)和单片机的 P1_4 引脚:

  • 当 K1 未按下时,P1_4 引脚不受 GND 影响,默认是高电平;
  • 当 K1 按下时,P1_4 引脚与 GND 短路,引脚电平变为低电平。

2. 按键状态的判断逻辑

要判断 K1 是否按下,只需检测 P1_4 引脚是否为低电平。在代码中可通过 “位运算” 实现:
if((P1 & 0x10) == 0)
(注:0x10 是十六进制,对应二进制0001 0000,与 P1 做 “与运算” 后,只有 P1_4 引脚的电平会保留 —— 结果为 0 时,说明 P1_4 是低电平,即按键按下)

3. 实际应用场景

比如车载中控系统中,刹车检测、安全座椅状态判断等,都可以通过类似的 “按键逻辑” 实现 —— 用 GPIO 输入模式实时检测对应引脚的电平,确保数据的实时性。

练习:

        实现按下按键(1--4),显示灯(1--4),第一个数码管显示数字(1--4),未按下显示“0”

main.c

digiter.c

LED.C

delay.c

三、中断:单片机的 “紧急响应机制”

单片机在执行常规任务时,若遇到更紧急的事件(如按键触发、定时器溢出),需要暂停当前任务,优先处理紧急事件,处理完后再回到原任务继续执行 —— 这个过程就是 “中断”。

1. 中断的核心概念

  • 中断源:触发中断的 “事件 / 源头”。51 单片机有 5 个中断源,分别是:外部中断 0(INT0,对应 P3_2 引脚)、外部中断 1(INT1,对应 P3_3 引脚)、定时器 0 中断、定时器 1 中断、串口中断。


1.中断源分类:外部中断0、外部中断1、定时器0、定时器1、串口
2.外部中断:单片机上的引脚电平变化所引发的中断(INTO(P3-2)、INT1(P3-3))

  • 中断优先级:多个中断同时触发时,CPU 会优先处理 “优先级高” 的中断(51 单片机可通过寄存器配置优先级)。
  • 中断嵌套:处理低优先级中断时,若有高优先级中断触发,会暂停当前中断,先处理高优先级中断 ——51 单片机最多支持 2 层嵌套。

7. 中断处理流程(6 步)

  1. 中断源发出 “中断请求”(如外部中断 0 引脚电平变化);
  2. CPU 检查:是否开启 “总中断允许”,该中断源是否被 “屏蔽”(未屏蔽才继续);

3.比较中断优先级:若当前无更高优先级中断,暂停当前任务;

4.保护现场:保存当前任务的寄存器数据(避免处理中断后数据丢失);

5.执行 “中断服务函数”(即中断触发后要执行的代码,如按键按下后的 LED 翻转); (回调函数)


6.恢复现场:恢复之前保存的寄存器数据,回到原任务继续执行。

3. 中断相关寄存器配置(关键!)

要让中断生效,必须配置对应的寄存器,以 “外部中断 0” 为例:

p3.2 要置1 产生下降沿

  • IE 寄存器(中断允许寄存器)
    • 先将 IE 的 bit7(EA,总中断允许位)置 1—— 开启 “总中断开关”(不开启的话,所有中断都无效);
    • 再将 IE 的 bit0(EX0,外部中断 0 允许位)置 1—— 允许外部中断 0 触发。

  • TCON 寄存器(定时器 / 计数器控制寄存器)
  • TCON 的 bit1(IE0,外部中断 0 请求标志位):中断触发时会自动置 1,CPU 响应后会 “硬件清 0”(无需手动处理)。    不用置位---- 自动置位

  • 将 TCON 的 bit0(IT0,外部中断 0 触发方式位)置 1—— 设置为 “下降沿触发”(即引脚电平从高变低时触发中断);

优先级

中断向量表


四、定时器:单片机的 “精准时钟”

很多场景需要 “精准定时”(如 1ms 刷新一次 LED、1s 读取一次传感器数据),此时就需要用到单片机的 “定时器”—— 它能根据时钟信号,产生精确的时间间隔。

1. 定时器的基础原理

  • 51 单片机定时器资源:内置 2 个 16 位自增型定时器 / 计数器(Timer0、Timer1),可工作在 “定时器模式”(用于定时)或 “计数器模式”(用于计数外部脉冲)。
  • 时钟与分频:单片机的时钟由 “晶振” 提供,常见晶振频率为 12MHz 或 11.0592MHz。但 51 单片机会对晶振频率做 “12 分频”—— 比如 12MHz 晶振,分频后实际时钟频率为12MHz/12 = 1MHz,对应 “1 个时钟周期 = 1μs”(即单片机执行一条基本指令需要 1μs)。

2. 定时器初值计算(以 1ms 定时为例)

定时器是 “自增型” 的:从 “初值” 开始,每过 1 个时钟周期加 1,加到 “65535”(16 位定时器的最大值)后会 “溢出”,触发定时器中断。
要实现 1ms(1000μs)定时,需计算 “初值”:

  • 1ms 需要的时钟周期数:1000μs / 1μs = 1000
  • 定时器初值 = 最大值 - 所需周期数 = 65535 - 1000 = 64535(十六进制为 0xFC67)。
    只需将初值写入定时器的 TH0(高 8 位)和 TL0(低 8 位),即可实现 1ms 定时。

定时器:能够产生一个精准的定时,不同外设对时序的要求高(高电平和低电平时间是精准的)
51单片机内部有两个定时器,分别为timer0、timer1,所使用自增型定时器(计数器16位)

Clock,时钟,CPU运行节拍,频率(Intel 2.1GHZ)
频率单位:HZ
时间单位:S
频率和时间关系:1/2.1GHZs
51单片机:
晶振,晶体振荡器(12MHZ/11.059MHZ)


51单片机达不到12MHZ,将12MHZ进行12分频,12MHZ/12=1MHZ
51单片机完成一条指令运算:1/1MHZ=1us

通过定时器0实现1ms定时:
1ms |= 1000us
定时器初值:64535

3. 定时器相关寄存器配置(以 Timer0 为例)


8位自动重装载定时器:分为TLO和TH0两部分,1byte,实际参与计数的只有TLO,当TLO中的值加到255溢出后,再将THO中的值重新装入到TLO中

  • TCON 寄存器

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

  • TMOD 寄存器(定时器 / 计数器模式控制寄存器)

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

​​​​​

  • IE 寄存器

(1)将IE寄存器中的bit7置1,代表CPU能够响应所有中断

(2)将IE寄存器中的bit1置1,代表允许定时器0产生中断

4. 定时器配置流程(5 步)


1. 先配置TMOD模式选择寄存器,将低四位清0,再将bit0置1代表工作在16位定时器

2. 向TH0和TL0中装入定时器的初值(1ms -> 64535)

3.  将TCON寄存器中的bit6置1,代表允许定时器开始计数

4.  将IE寄存器中的bit7和bit1置1,开启中断总开关和定时器0的子开关

5. 编写定时器0的中断服务函数

五、PWM 与蜂鸣器:脉冲控制的应用


脉冲宽度调制,能够让引脚产生一个方波,周期性的让引脚的电平发生翻转

1. PWM 的核心概念

  • PWM 周期

一个方波所经历的周期(从上升沿到上升沿所经历的时间/从下降沿到下降沿所经历的时间)

  • PWM 占空比

在一个周期内,引脚处于 “高电平” 的时间占比(如占空比 50%,表示一个周期内高、低电平各占一半)。
通过调整周期和占空比,PWM 可实现 “模拟电压输出”(如控制 LED 亮度、电机转速)。

2. 蜂鸣器的工作原理

蜂鸣器的声音由 “震荡源” 决定:

  • 音调:由震荡频率决定 —— 高频对应高音,低频对应低音;
  • 音量:由震荡信号的振幅决定 —— 振幅越大,音量越大。

根据是否自带震荡源,蜂鸣器分为两类:

  • 有源蜂鸣器:内置震荡源,通电后会发出固定频率的声音(无需额外控制,只需给高低电平即可);
  • 无源蜂鸣器:无内置震荡源,通电后不发声,需通过 GPIO 输出 PWM 方波(提供震荡信号),才能发出不同音调的声音。

3. 51 单片机驱动蜂鸣器

对于无源蜂鸣器,需用定时器生成不同频率的 PWM 信号:

  • 比如要发出 “高音”,就配置定时器产生高频 PWM(如 4kHz);
  • 要发出 “低音”,则生成低频 PWM(如 1kHz);
  • 通过调整 PWM 的占空比,还能控制蜂鸣器的音量大小。

六、练习

通过中断实现低电平触发时数码管变化

实现隔1sLED翻转一次

通过按键控制蜂鸣器按照指定频率工作(Key1 --200HZ  Key2 -- 400HZ Key3 -- 600HZ Key4 -- 800HZ  Key5 -- 1000HZ)

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

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

相关文章

C语言中奇技淫巧07-使用GCC栈保护选项检测程序栈溢出

-fstack-protector 是 GCC 和 Clang 编译器提供的一种栈保护(Stack Smashing Protection, SSP) 机制,用于检测和防御常见的缓冲区溢出攻击(特别是栈溢出)。它通过在函数的栈帧中插入特殊的“金丝雀值”(can…

.NET 8.0 Web API JWT 身份验证和基于角色的授权

在当今的数字环境中,保护 Web 应用程序的安全至关重要。随着 .NET 8.0 的不断发展,它提供了强大的工具来确保您的 API 既安全又高效。 示例代码:https://download.csdn.net/download/hefeng_aspnet/91490262 如果您喜欢此文章&#xff0c…

ZYNQ SDK软件在线调试

1、然后右键项目->debug as->launch on hardware2、从左到右分别是:运行程序到设置的断点暂停运行终止断开连接步进(进入函数内部)跳过(不进入函数内部)跳出函数3、双击添加断点,然后点击运行可以让程…

四大金刚之计算机操作系统

1. 进程和线程的区别?创建线程的代价比创建进程小吗?进程是资源分配和调度的基本单位;线程是 CPU 调度的基本单位。进程有独立的地址空间,线程共享进程地址空间。创建/销毁进程开销大,线程开销小。是的,因为…

redis--redis.conf的相关配置问题

关于redis.conf内的相关重要的配置介绍 1. bind 配置 仅仅设置bind,还需要搭配下面的rotected-mode 配置才能外部ip进行连接 功能:设置 Redis 监听的 IP 地址,决定哪些设备可以连接到 Redis 服务器。 bind 127.0.0.1:只允许本机&a…

unsloth 笔记:从最近的检查点继续微调

检查点(checkpointing)可以把微调进度保存下来,这样可以中途暂停,随后继续训练。首先需要在 Trainer 的参数里添加 save_strategy 和 save_steps。trainer SFTTrainer(....args TrainingArguments(....output_dir "output…

DevOps平台选型指南:破解研发效率瓶颈,适配金融/政务/国产化场景的5大关键指标

在数字化转型的浪潮中,软件研发效能已成为企业的核心竞争力。然而,许多团队在追求敏捷与高速交付的过程中,常常会遇到工具链割裂、流程冗长、环境混乱等效率瓶颈。选择一个合适的、一体化的DevOps平台,是破解这些瓶颈、实现研发运…

【面试向】元宇宙介绍

属于基础知识介绍,主要目的是对这一概念有技术层面的理解,有前瞻性的观点,帮助大家在面试中给出得体的表述。 1. 什么是元宇宙? 元宇宙本质上是一个融合了数字与现实、由技术构建的 “沉浸式虚拟空间”,是一个 “超越…

FreeMarker快速入门指南

FreeMarker快速入门指南 FreeMarker是一个基于模板和数据模型生成文本输出的Java库。它广泛应用于Web开发、代码生成、邮件模板等场景。本文将带你快速上手FreeMarker的核心概念和基本用法。 什么是FreeMarker FreeMarker是一个模板引擎,它将模板文件(.f…

Nginx主配置文件

一,Nginx基本介绍1,nginx概念Nginx 是一款轻量级、高性能的服务器软件,核心能力是 “处理网络请求”,被广泛用于网站、App 的后端架构中。Nginx 就像一个 “高效的网络交通指挥官”,核心价值是用最少的资源&#xff0c…

基于ResNet50的智能垃圾分类系统

基于ResNet50的智能垃圾分类系统:从理论到实践的完整指南 源码获取https://mbd.pub/o/bread/YZWXlZ1yZg 引言:智能垃圾分类的时代背景与意义 随着城市化进程的加速和人口数量的增长,垃圾处理问题日益成为全球性的环境挑战。传统的垃圾分类…

灾难性遗忘:神经网络持续学习的核心挑战与解决方案

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 1. 灾难性遗忘的定义与核心问题 灾难性遗忘(Catastrophic…

OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现

🔍 OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现 引用: IP校验和算法:从网络协议到SIMD深度优化IP校验和算法:从标量到SIMD的高级优化(SSE4.1) GDB online Debugger C17 Co…

4.4 机器学习 - 集成学习

集成学习通过 “组合多个基础模型” 提升泛化能力,核心分为并行集成(Bagging)、串行集成(Boosting) 和多层集成(Stacking) 三大范式,分别对应 “降方差”“降偏差”“兼顾偏差与方差…

机器学习 - 使用 ID3 算法从原理到实际举例理解决策树

一、什么是决策树1.基本概念决策树是一种树形结构,由结点(node) 和有向边(directed edge) 组成。其中结点分为两类:内部结点(internal node):表示一个属性(特…

【期末复习】嵌入式——S5PV210开发板

本文为嵌入式课程期末复习,仅供参考,所用课本:嵌入式Linux操作系统(李建祥著)。第一章1.1 简述嵌入式微处理器数据存储格式的大,小端模式。大端模式是指数据的高字节保存在内存的低地址中,而数据…

word文档结尾批量插入图片 docx批量插入图片 指定几张

如果你有一些word文档。比如工作总结。你想每一个文档里面都插入几张图片。插入到每个文档的结尾,那么你可以使用这个工具。首先准备好你的文档。然后把它们拖进右边的方框中。拖动的时候,拖动第一个,然后准备好你的图片。把你的图片全部拖动…

CodeBuddy国际版又更新了体验感1

CodeBuddy国际版又更新了 更好的使用体验更少的资源消耗合理的消耗剩余资源使用起来也是很不错的,这次更新自动模式想不到的少,可以用于其他的例如翻译与写测试用例或者其他的说明文档等或者是阅读一下项目更好了解项目总的上来说 使用体验响应速度还是不…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的公益课引流策略研究

摘要:本文聚焦公益课引流场景,探讨开源AI智能名片、链动21模式与S2B2C商城小程序的融合应用。通过构建低成本用户裂变体系,分析该技术组合在精准筛选、社群运营、激励机制设计中的协同效应。研究提出"智能名片画像-链动裂变激励-S2B2C生…

季度最强策略:年化247%,回撤10%,夏普比率3.79。附大小盘轮动策略python源代码。

原创内容第993篇,专注AGI,AI量化投资、个人成长与财富自由。 季度最强策略: 年化247%,回撤10%,夏普比率3.79。3积分可查看参数。 大小盘轮动的策略源代码: 年化收益18.8%。 from engine import Task, Eng…