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

完整教程:嵌入式系统(51单片机)核心外设详解:UART通信与DS18B20温度采集

掌握微控制器与外界设备的通信是嵌入式编写的基石。本文将深入剖析两种最经典的技术:UART异步串行通信DS18B20单总线温度采集,从协议原理到寄存器配置,为您提供清晰的实践指南。

第一部分:UART——通用异步收发传输器

1. 核心概念

UART是一种硬件接口,采用异步、全双工、串行的通信协议。所谓“异步”,指通信双方没有统一的时钟线,依靠预先约定好的波特率来同步数据节奏。

2. 硬件连接

连接时务必牢记交叉互连原则:发送端(TXD)接接收端(RXD),接收端(RXD)接发送端(TXD),VCC和GND直接相连。

3. 通信方式辨析

  • 单工:单向传输,如收音机。

  • 半双工:双向但分时传输,如对讲机,同一时刻只能一方发言。

  • 全双工:双向同时传输,如电话通话,UART即采用此方式。

4. 数据传输细节

  • 发送顺序:遵循LSB(最低有效位)优先,即从信息的最低位(bit0)开始发送。

  • 串行 vs 并行

    • 串行:单根数据线,逐位发送。成本低、距离远、抗干扰强,但速度相对慢。UART、I2C、SPI属此类。

    • 并行:多根数据线,同时发送多位。速度极快,但成本高、线间干扰大、传输距离短。

5. 通信帧格式与参数

一个完整的UART数据帧含有:

  1. 起始位:1位低电平,标志传输开始。

  2. 数据位:通常为8位(5-9位可选),即要发送的有效数据。

  3. 校验位:1位,用于简单的错误检测。

    • 奇校验:数据位+校验位中“1”的个数为奇数。

    • 偶校验:数据位+校验位中“1”的个数为偶数。

    • 无校验:不启用校验位。

    • 注意:奇偶校验无法检测偶数个位发生的错误。

  4. 停止位:1位(或1.5、2位)高电平,标志帧结束。

常用参数组合示例9600 8 N 1表示波特率9600,8位数据,无校验,1位停止位。

6. 51单片机UART寄存器配置(核心)

以51单片机为例,部署UART需操作以下几个关键寄存器:

  • SCON(串行控制寄存器,地址:98H)

    • SM0、SM1:选择工作模式。通常设置为01,选择8位UART、波特率可变模式。

    • REN:接收使能位。置1允许串口接收数据。

    • TI:发送中断标志。发送完成时由硬件置1,必须用软件清0

    • RI:接收中断标志。接收做完时由硬件置1,必须用软件清0

  • PCON(电源控制寄存器,地址:87H)

    • SMOD:波特率加倍位。置1可使波特率翻倍。

  • 定时器1用作波特率发生器

    UART的波特率由定时器1的溢出率产生。通常将定时器1配置为8位自动重装模式(TMOD寄存器高4位设为0010B)。

    • 波特率计算公式波特率 = (2^SMOD / 32) * (定时器1溢出率)

    • 定时器初值计算TH1 = TL1 = 256 - (晶振频率) / (波特率 * 384 / (2^SMOD))

  • 中断控制

    • IE(中断允许寄存器)​ 中,需将EA(总中断开关)​ 和 ES(串口中断开关)​ 置1,以启用串口中断作用。

配置流程总结

  1. 确定波特率,计算定时器1(T1)初值。

  2. 配置TMOD,设T1为8位自动重装模式。

  3. 给TH1和TL1装入初值,启动T1(TR1=1)。

  4. 配置SCON,设工作模式,并使能接收(REN=1)。

  5. 调整PCON,决定是否波特率加倍(SMOD)。

  6. 配备IE,开启总中断和串口中断。

第二部分:DS18B20——单总线数字温度传感器

1. 传感器简介

DS18B20是一款著名的单总线(1-Wire)​ 数字温度传感器。

  • 测量范围:-55℃ 至 +125℃。

  • 精度:±0.5℃。

  • 分辨率:可配置9~12位,默认12位,对应分辨率0.0625℃。

  • 工作电压:3.0V - 5.5V。

2. 引脚与连接

传感器仅有三根引脚:

  • VCC:电源(3-5.5V)。

  • DQ:单数据总线,需接4.7KΩ上拉电阻

  • GND:地。

与单片机连接时,DQ引脚连接任意一个GPIO口(如P3.7)。

3. 单总线协议与运行时序

DS18B20通信严格依赖于精确的时序,所有运行都基于主机(单片机)对DQ线的拉低、释放和采样。

  • 复位脉冲(初始化)

    1. 主机拉低DQ线至少480µs。

    2. 主机释放DQ线(转为输入模式),由上拉电阻拉高。

    3. DS18B20等待15-60µs后,会拉低DQ线60-240µs作为“应答脉冲”。

    4. 主机检测到这个低电平,表示传感器存在。

  • 写时序

    • 写‘0’:主机拉低DQ线至少60µs,继而释放。

    • 写‘1’:主机拉低DQ线1-15µs,然后迅速释放,并保持高电平至少45µs。

  • 读时序

    1. 主机拉低DQ线至少1µs。

    2. 主机迅速释放DQ线。

    3. 主机在拉低后的15µs内采样DQ线电平,读取到的即为传感器发送的数据位。

4. 温度读取完整流程

读取一次温度需要严格遵循以下命令序列:

flowchart TDA[开始读取温度] --> B[发送复位脉冲]B --> C[发送跳过ROM命令 0xCC]C --> D[发送开始转换命令 0x44]D --> E{等待转换完成
(延时或查询)}E --> F[发送复位脉冲]F --> G[发送跳过ROM命令 0xCC]G --> H[发送读暂存器命令 0xBE]H --> I[连续读取2字节温度数据]I --> J[数据处理与转换]J --> K[结束]

关键命令

  • 0xCC:跳过ROM地址匹配,适用于单传感器场景。

  • 0x44:启动温度转换。

  • 0xBE:读取传感器内部暂存器(前2字节即为温度值)。

5. 温度数据处理

读出的温度值是16位有符号整数(二进制补码格式),低字节在前。

  • 高字节的高5位(S)是符号位。S=0为正温度,S=1为负温度。

  • 低字节的低4位是小数部分。

  • 温度值计算温度 = (读取的16位整数) * 0.0625


总结

UART和DS18B20是嵌入式系统中“通信”与“感知”的经典代表。理解UART,就掌握了微控制器与电脑、模块对话的通用语言;攻克DS18B20严格的单总线时序,则意味着具备了驱动复杂传感器的能力。建议在理解理论后,务必在开发板上动手实践,通过示波器观察波形,通过代码调试信息,才能真正融会贯通。

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

相关文章:

  • 题解:洛谷 P9226 糖果
  • [嵌入式系统-217]:Buck 电路(降压电路)
  • Claude Code配合Astro + GitHub Pages:为 sharelatex-ce 打造现代化的开源项目宣传页
  • AI Agent在企业人才发展与继任计划制定中的应用
  • [嵌入式系统-216]:开关电源与PWM有异曲同工之妙
  • Spark大数据处理:技术、应用与性能优化【1.9】
  • 从理论到生产:化学AI智能体的架构设计全流程解析
  • 廿八总结
  • AI 工厂 #01|工业系统如何引入 Agent
  • Windows11 Ubuntu20.04 双系统
  • AI系统监控预警的技术原理,AI应用架构师带你了解
  • Java 可变参数 Collections 不可变集合
  • D.二分查找-二分答案-最小化最大值——1760. 袋子里最少数目的球
  • [git start]
  • 非结构化数据处理的容错机制设计
  • HDFS 与 MapReduce 的完美结合:大数据处理的核心技术
  • 题解:洛谷 P9389 [THUPC 2023 决赛] 烂柯杯
  • 数据科学中的图计算:Neo4j和GraphX应用解析
  • Using Jamfiles and Jambase
  • 爬虫数据清洗:Pandas 处理缺失值与异常
  • 实用指南:[linux仓库]线程池[线程玖]
  • 爬虫结果存入 MySQL:批量插入优化
  • [嵌入式系统-215]:线性电源与开关电源各自的工作原理,通俗易懂
  • nodejs+vue3的玉米病虫害远程咨询系统的 小程序
  • [嵌入式系统-214]:线性电源与开关电源
  • nodejs+vue3的社区儿童玩具交易系统
  • nodejs+vue3的社区外来人员登记管理系统 流动人口管理系统
  • nodejs+vue3的旅游民宿预定管理系统的设计与实现
  • nodejs+vue3的校园服务平台的设计与实现
  • nodejs+vue3的企业固定资产管理系统