当前位置: 首页 > news >正文

硬件基础2

GPIO

GPIO(General Purpose Input/Output,通用输入输出)是微控制器(MCU)最基本的硬件接口,用来连接和控制外部设备(LED、按键、传感器等)。

引脚输入输出:

1. 输出模式:给定单片机引脚电平,控制引脚输出高/低电平( LED控制 、数码管控制、 蜂鸣器 控制)

2. 输入模式:检测引脚电平变化(用于检测外部电平信号按键检测、 检测ADC信号)

起始信号:500ms高电平 40us低电平(GPIO输出)

接收传感器数据(检测DATA信号新 电平 GPIO输入)

独立按键 :
1. 按键一端接到GND,另外一端接到GPIO引脚
2. 如果按键被按下, GND会 和引脚短路到一起, 此时引脚呈现低电平, 代表按键被按下

按键按下 → 引脚被拉低 → 电平从 1 变 0
void key_init(void) { P1 |= (0x0F << 4); P3 |= (1 << 5); } // 按键检测 int key_press(void) { int ret = 0; if ((P1 & (1 << 4)) == 0) { ret = 1; } else if ((P1 & (1 << 5)) == 0) { ret = 2; } else if ((P1 & (1 << 6)) == 0) { ret = 3; } else if ((P1 & (1 << 7)) == 0) { ret = 4; } else if ((P3 & (1 << 5)) == 0) { ret = 5; } return ret; }

中断

CPU在处 理某个任务时,被外界更 为紧急的 事件打断,要求CPU优先去处 理
这个更为紧 急 的事件 ;处 理完 紧急 事件 后,再 回到 之前被 打 断的地 方继 续向下 执行

本质上是来自cpu外部的异步事件,如I/O设备请求、时钟信号

中断源:打断CPU执行 当前的任务源头/事件
中断源分类: 外部中断0、 外部中断 1、 定时器0、 定时器1、 串口
外部中断:引脚电平变化所引发的中断

┌───────────────────────────────────────────────────────────
│ 51 单片机外部中断引脚
│ ┌─────────────────────────────────────────────────────┐
│ │ INT0 (P3.2) → 外部中断0
│ │ INT1 (P3.3) → 外部中断1
│ └─────────────────────────────────────────────────────┘

│ 对应中断号:
│ INT0 → interrupt 0
│ INT1 → interrupt 2
└───────────────────────────────────────────────────────────

中断优先级 :CPU总是先处理优先级高的中断, 处理完优先级高的中断后再处理优先级低中断

INT0:0
TIMER0:1
INT1:2
TIMER1:3
UART:4

中断嵌套:CPU处理一个中断时再去嵌套另外一个中断任务(最多两层嵌套)

中断处理流程:

1. 中断源发出中断请求
2. 检查CPU是否允许中断( 总开关能够响应外部中断)及该中断源是否被屏蔽 (子开关能够产生对应的中断)
3. 比 较中断优先级
4. 保护现场
5. 执行中断服务函数 (回调函数 )
6. 恢复现场

IE (0xA8) 中断允许控制寄存器 (控制:是否允许某个中断)

TCON (0x88) 中断状态/控制寄存器 ( 控制:触发方式 + 查询中断标)

unsigned int g_i = 0; // 外部中断0服务函数 void int0_handler(void) interrupt 0 { g_i++; } // 外部中断0初始化 void int0_init(void) { // 1. 将外部中断0引脚拉高 P3 |= (1 << 2); // 2. 配置外部中断0引脚中断触发方式:下降沿触发 TCON |= (1 << 0); // 3. 允许外部中断0产生中断 IE |= (1 << 0); // 4. 允许CPU响应所有中断 IE |= (1 << 7); }

中断向量表

中断向量表是单片机中一张非常重要的“地址表”,它告诉 CPU 当中断发生时,应该跳转到哪个地址去执行对应的中断服务程序。本质是一个数组,数组中存放的是中断服务函数的入口地址。

中断向量:中断向量表中的标号, 通过标号可访问到对应中断服务函数

中断源中断号入口地址优先级描述
复位-0x0000最高系统复位/启动
外部中断000x00031(最高)INT0 引脚触发
定时器0溢出10x000B2TF0 标志
外部中断120x00133INT1 引脚触发
定时器1溢出30x001B4TF1 标志
串口中断40x00235RI 或 TI 标志
定时器2溢出50x002B652 系列特有

中断向量表的作用

定时器

定时器/计数器是51单片机内部最重要的外设之一,用于精确计时外部脉冲计数

特性8位计数器16位计数器
范围0-2550-65535
分辨率1μs (12MHz)1μs (12MHz)
最大定时256μs65536μs (65.5ms)
寄存器1个 (TLx)2个 (THx+TLx)
精度

16位定时器

// 模式1:16位定时器(最常用) // THx (高8位) + TLx (低8位) = 16位 // 最大计数:2^16 = 65536 TMOD = (TMOD & 0xF0) | 0x01; // 模式1 // 示例:1ms中断(12MHz) TH0 = 0xFC; // 高8位 TL0 = 0x18; // 低8位

8位自动重装定时器、

// 模式2:8位自动重装 // TLx 是计数器,THx 存储重装值 // 溢出后自动重装,无需软件干预 TMOD = (TMOD & 0xF0) | 0x02; // 模式2 // 示例:定时器0,250μs中断 TH0 = 0x06; // 重装值 (256 - 250 = 6) TL0 = 0x06; // 初始值

TMOD:计数器工作模式寄存器

定时器配置流程

unsigned int g_t = 0; // 定时器0中断服务函数 void timer0_handler(void) interrupt 1 { TH0 = g_t >> 8; TL0 = g_t; P2 ^= (1 << 1); } // 定时器0初始化 void timer0_init(void) { // 1. 配置定时器0工作模式:16位定时器 TMOD &= ~(0x0F << 0); TMOD |= (1 << 0); // 2. 设置定时器0初值 TH0 = g_t >> 8; TL0 = g_t; // 3. 打开定时器0,开始计数 TCON |= (1 << 4); // 4. 开启定时器0中断 IE |= (1 << 1); // 5. 开启CPU总中断 IE |= (1 << 7); }

PWM

PWM(Pulse Width Modulation,脉宽调制)是一种通过数字信号控制模拟量的技术,广泛应用于 LED 调光、电机调速、音频输出等领域。

脉冲宽度调制,能够让引脚产生一个方波, 能够让引脚周期性产生电平变化

蜂鸣器
有源蜂鸣器 :内部 存在 震荡源 , 通电 后可以 发 出持续 固定 频率的 声 音
无源蜂鸣器: 不存在 震 荡源, 需要 给 定对应引 脚 一个高 低电 平产生 震荡 (可 以输 出指定 频率 音调)

http://www.jsqmd.com/news/1175560/

相关文章:

  • 2026敦煌旅行社实力榜单:8家正规机构资质与服务深度评测 - 互联网科技品牌测评
  • 深圳航拍无人机跨境电商独立站卖家获客转化难题怎么解决:BBWEYY全新AI+SAAS+GEO模式,全程0代码操作
  • JAVE2与原生FFmpeg技术栈对比:为什么Java开发者更青睐JAVE2进行音视频处理
  • 从零开始:Duix-Avatar AI数字人本地部署终极指南
  • uniapp76-100集:
  • 2026 年新发布:双桥比较好的304不锈钢列管式冷凝器销售厂家深度剖析,颠覆传统:揭秘列管式冷凝器如何省下数万成本 - 领域鉴赏官
  • 宠物社交小程序功能分析之市场前景
  • 解锁会议新范式✨数字人交互一体机赋能企业高效会务工作
  • 字符串旋转判断
  • DAY1 初步认识github平台
  • 2026年黄冈技工学校全面测评|现代化智慧校园+校企定向就业培养 - 信息热点
  • Semgrep完整指南:30秒学会代码安全扫描的终极利器
  • 如何打造完美的跨平台电子书阅读体验:Koodo Reader 2.4.0 完全指南
  • 【济南本地行业拆解】济南全域包包回收|线上线下变现渠道测评对比 - 讯息早知道
  • 7月南昌非急救救护车转运推荐预约平台,服务于市内转院长途康复返乡 - 资讯快报
  • Python OpenCV 图像处理:模板匹配(Template Matching)详解
  • 2026年7月最新石家庄卡地亚官方售后联系电话与客户服务中心网点地址 - 卡地亚服务中心
  • Trae的官方书包,质感不错
  • 2026北京奢侈品回收哪家专业?毓典资深鉴定团队精准估价 - 奢品流通笔谈
  • Flipper Zero固件语言本地化终极指南:轻松实现中文显示与界面定制
  • python神经网络编程入门(七)——跑通MNIST手写数字识别,验证训练成果与测试准确率。
  • 换季维稳面膜推荐:蜜妙诗四季适用 - MXyuyu
  • 沉浸式翻译:5个实用技巧让跨语言阅读效率提升300%
  • 网易云音乐NCM文件转换完全指南:3种方法实现音乐播放自由
  • 视频切割脚本(Python版)
  • 2026毓典奢品汇|天津黄金回收渠道对比:2026年7月卖金注意事项与正规门店测评汇总 - 奢侈品测评参考
  • ClickBench实战指南:3步构建你的数据库性能评估体系
  • SAP UI5 中有没有类似 Angular Router 的路由机制
  • RS罗德与施瓦茨 SMBV100A 罗德与施瓦茨矢量信号发生器
  • Python 核心英文单词完全学习手册