多点测温:DS18B20 C源程序实现与序列号读取

需积分: 3 1 下载量 56 浏览量 更新于2024-09-07 收藏 42KB DOC 举报
本篇文章主要介绍了如何在AVR平台(一种嵌入式微控制器)上使用DS18B20温度传感器进行多点温度测量。DS18B20是一种常用的数字温度传感器,它具有独特的1-Wire通信接口,可以实现单总线连接多个设备。本文提供了针对四个DS18B20的C源代码示例,包括以下几个关键知识点: 1. **硬件连接**: - 在电路设计中,通过sbit TMDAT引脚(P0^1)与DS18B20的DQ线相连,这是1-Wire数据/地址线。 2. **序列号读取与存储**: - 使用`rom()`函数读取每个DS18B20的8位序列号,并将这些序列号存储在SN数组中。这是识别和区分不同DS18B20的关键步骤,每个设备的序列号是唯一的。 3. **温度读取**: - 在获取了序列号之后,通过设置和读取DS18B20寄存器来获取温度数据。读取到的数据被临时存储在TMP数组中,但需要注意的是,这些数值需要进一步处理(除以2),才能得到实际温度。 4. **温度判断**: - f数组用于存储温度值是否为负值,通过比较读取到的温度值和零,用“0”表示正温,“1”表示负温。 5. **延时函数**: - 提供了两个延时函数:`dmsec()`用于指定毫秒级的延时,这对于数据通信中的适当间隔和稳定读取至关重要。 6. **重置操作**: - `tmreset()`函数负责发送一个复位脉冲到DS18B20,确保通信开始于正确状态。 7. **存在检查**: - 提供了一个`tmpre()`子程序,尽管不建议使用,因为它可能导致不必要的死循环,但在实际应用中可能需要对传感器存在情况进行确认。 该代码示例提供了一个基础框架,用于在AVR平台上管理和读取多点DS18B20温度传感器的数据。在实际项目中,可能还需要添加错误处理、数据解析和串行通信接口(如UART或SPI)的支持,以及数据的实时显示或存储功能。