DS18B20 = 1-Wire 数字温度传感器:

关键时序:
| 信号 | 主机拉低 | 主机释放 |
|---|---|---|
| 复位 | 480~960 µs | 等待 15~60 µs 后读从机响应 |
| 存在脉冲 | — | 从机拉低 60~240 µs |
| 写 0 | 拉低 60~120 µs | — |
| 写 1 | 拉低 1~15 µs | 释放 45 µs |
| 读 | 拉低 1~15 µs | 15 µs 内采样 |
PG11 接 DQ 线,外接 4.7kΩ 上拉电阻。

uint8_t ds18b20_init(void); // 复位 + 存在脉冲
void ds18b20_write_byte(uint8_t); // 写一字节
uint8_t ds18b20_read_byte(void); // 读一字节
float ds18b20_read_temp(void) {
ds18b20_init();
ds18b20_write_byte(0xCC); // Skip ROM
ds18b20_write_byte(0x44); // 转换温度
delay_ms(750); // 等待转换
ds18b20_init();
ds18b20_write_byte(0xCC);
ds18b20_write_byte(0xBE); // 读暂存
uint8_t lo = ds18b20_read_byte();
uint8_t hi = ds18b20_read_byte();
int16_t raw = (hi << 8) | lo;
return raw * 0.0625; // 12 位分辨率
}

串口每秒打印当前温度,用手捂热看变化。
