二、ds18b20
1.传感器基础概念
传感器:将物理量转换为电信号的器件。此处特指数字温度传感器 DS18B20(用于设备温度、环境温度采集)。
1)传感器指标参数
(1)量程(温度测量范围):-55℃ ~ 125℃
(2)精度(传感器测量温度与实际温度值之间允许的最大误差):±0.5℃
举例:实际温度值25℃,传感器采集温度值应在 24.5 ~ 25.5℃ 之间。
(3)分辨率(对温度变化敏感程度,分辨率越高,能察觉的微小温度变化越小,读数越细腻):
9位:0.5℃
10位:0.25℃
11位:0.125℃
12位:0.0625℃(最高分辨率)
(4)工作电压:3V ~ 5.5V
2.通信方式与硬件连接
1)通信特点
51单片机与DS18B20通信属于:半双工、异步、串行。

采用 GPIO One-Wire 单总线 协议,传感器通过一根GPIO信号线与单片机通信。
2)硬件连线
单片机 P3.7 引脚接 DS18B20 的 DQ (数据信号线)。
单片机 VCC 接 DS18B20 VCC。
单片机 GND 接 DS18B20 GND。
3)线与特性(关键点)

核心规则:
引脚拉高,不能直接决定引脚电平(受对方影响)。
拉高:释放总线。
你作为数据的接收方时,需要释放总线(写1或读数据前)。
数据格式:
读取的数值为16位,采用符号位扩展,二进制补码形式存储。
3.DS18B20内部结构
64-BIT ROM:存储唯一ID,用于多器件挂载。
单线端口:连接外部DQ总线。
内部电源:寄生电源或外部供电(框图显示内部电源电路)。
存储器逻辑控制模块:协调其他模块工作。
暂存器(SCRATCHPAD):存放温度数据、高温触发阈值(TH)、低温触发阈值(TL)及参数配置。
8位CRC生成器:用于数据校验。

4.DS18B20采集温度流程
由于DS18B20转换温度需要时间,通常分为"启动转换"和"读取温度"两个步骤。
步骤一:启动温度转换
ds18b20_reset():复位DS18B20。
write_ds18b20(0xCC):发送0xCC,跳过ROM(跳过64位ID匹配,直接操作单节点)。
write_ds18b20(0x44):发送0x44,开启温度转换。
延时750ms(等待转换完成)。
步骤二:读取温度数据
ds18b20_reset():复位DS18B20。
write_ds18b20(0xCC):发送0xCC,跳过ROM。
write_ds18b20(0xBE):发送0xBE,读取温度(读取暂存器)。
读取2个字节温度(共16位,包含符号位和小数部分)。

5.通信时序
所有操作均以主机拉低总线开始。
1)复位时序(初始化)
(1)主机拉低总线 480us - 960us(发送复位脉冲)。
(2)主机释放总线,需要延时 15 - 60us。
(3)DS18B20拉低总线 60 - 240us(回复响应脉冲)。
(4)DS18B20释放总线,总线呈现高电平,初始化过程结束。
2)写时序
(1)写'0'时序:
1.主机将总线拉低 至少60us,最多不超过120us。
2.DS18B20在 15us - 60us内进行采样,若总线此时为低电平,则代表主机发送了'0'。
3.主机释放总线。
(2) 写 '1' 时序
1.主机将总线拉低 小于15us,释放总线。
2.DS18B20在 15us - 60us内进行采样,若总线此时为高电平,则代表主机发送了'1'。
注:发送指令 0xCC(二进制 1100 1100)就是遵循上述写时序逐位发送。
3)读时序
(1)读'1'时序
1.主机拉低总线,大于1us,然后释放总线。
2.DS18B20释放总线,总线呈现高电平。
3.主机在 15us内采样电平,此时总线为高电平,代表主机读到'1'。
(2)读'0'时序:
1.主机拉低总线,大于1us,然后释放总线。
2.DS18B20在主机释放总线后,主动拉低(代表要传输'0')。
3.主机在 15us内进行采样,此时总线为低电平,代表主机读到'0'。