嵌入式面试题:DHT11 是怎么传数据给单片机的?

DHT11 是通过单总线协议 (一根数据线)和单片机通信的,核心就是通过高低电平的时长组合来传递数据,具体流程分 3 步:

1. 单片机先 "发请求"(唤醒 DHT11)

  • 单片机把数据线拉低至少 18ms (低电平),然后再拉高20~40μs(高电平),告诉 DHT11 "准备接收数据"。

2. DHT11 "回应" 并开始传数据

DHT11 收到请求后,会先回应:

  • 拉低数据线80μs (低电平),再拉高80μs(高电平),表示 "我准备好发数据了"。

之后开始传 40 位数据(湿度整数 + 湿度小数 + 温度整数 + 温度小数 + 校验位),每一位数据用高低电平的时长区分 0 和 1:

  • 表示 "0":先拉低50μs ,再拉高26~28μs;
  • 表示 "1":先拉低50μs ,再拉高70μs。

3. 单片机 "解码" 时长得到数据

单片机通过计时高低电平的持续时间,把每一位的 "0/1" 翻译出来,再组合成对应的湿度、温度数值。

总结:DHT11 就是靠固定时长的高低电平组合(不是单纯的高低电平,而是 "低电平 + 不同时长的高电平")来传递二进制数据的。


直接用 "单纯高低电平" 代表 0/1 会出问题 ------DHT11 用 "高低电平 + 时长 " 的单总线协议,是为了在一根线上稳定传输数据,核心原因是这 3 点:

1. 解决 "单总线的同步问题"

如果只靠高低电平代表 0/1,单片机和 DHT11 没法判断 "什么时候是新的一位数据"(比如连续多个 0,电平一直低,分不清是 1 个 0 还是多个 0)。而用 "先低电平(固定 50μs)+ 后高电平(时长区分 0/1)" 的格式,低电平相当于 "位起始信号",能让双方同步:每检测到一次 50μs 的低电平,就知道接下来的高电平是 1 位数据。

2. 抗干扰,提高可靠性

单总线只有一根线,容易受外界干扰(比如电磁噪声导致电平误跳变)。如果只看电平,一个干扰脉冲就会被误判成 0/1;而检测 "电平 + 时长"(比如必须持续 26~28μs 的高电平才是 0),能过滤短时间的干扰,让数据更稳定。

3. 适配低成本硬件

DHT11 是低成本传感器,没复杂的通信模块(比如 I2C、SPI 的硬件电路)。用 "时长 + 高低电平" 的单总线协议,只需要一根线、简单的电平检测 + 计时就能通信,硬件成本极低,适合低成本项目。

简单说:单纯高低电平 "分不清位边界、抗干扰差",而 "电平 + 时长" 是单总线场景下,低成本、高可靠传输数据的最优方案。

相关推荐
吠品3 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery11404 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白7 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米7 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃9 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室9 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家10 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa11 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM3211 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..12 小时前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件