如何正确使用DS18B20温度传感器?
DS18B20是一款由DALLAS公司生产的一线制数字温度传感器,具有体积小、硬件开销低、抗干扰能力强和精度高的特点,以下是对DS18B20的使用方法进行详细介绍:
一、DS18B20概述
DS18B20是一线制数字温度传感器,通过一根数据线实现数据的双向传输,其主要特点包括:
1、单总线接口,仅需要一个端口即可完成通信。
2、每个器件都有唯一的序列号。
3、无需外部元器件即可实现测温。
4、测量范围为55℃到+125℃,精度可达0.5℃。
二、引脚功能及内部结构
引脚功能
1、DQ(数据输入/输出端):用于数据传输和寄生电源供电。
2、GND(电源地)。
3、VDD(可选的外部供电电源输入端)。
内部结构
DS18B20的内部主要由四部分组成:64位ROM、温度传感器、非易失性存储的温度报警触发器TH和TL、配置寄存器,其存储器资源分为只读存储器ROM、随机存取存储器RAM和非易失性记忆体EEPROM。
三、使用步骤
初始化
1、复位时序:控制器拉低DQ线至少480μs,然后释放总线并等待DS18B20响应的存在脉冲(60240μs低电平)。
2、存在脉冲:DS18B20在检测到复位信号后会发送一个存在脉冲响应。
写操作
1、写1时序:控制器将总线拉低后,在15μs内释放总线,表示写入“1”。
2、写0时序:控制器将总线拉低后,保持低电平至少60μs,表示写入“0”。
读操作
1、读时序:控制器将总线拉低至少1μs,然后释放总线,DS18B20在释放总线后的15μs内将数据发送到总线上。
四、常用命令
1、SKIP ROM [CCH]:跳过ROM匹配,直接访问所有设备。
2、SEARCH ROM [F0H]:搜索总线上的所有设备。
3、READ ROM [33H]:读取设备的64位ROM序列码。
4、CONVERT T [44H]:启动温度转换命令。
5、WRITE SCRATCHPAD [4EH]:将数据写入暂存器。
6、READ SCRATCHPAD [BEh]:从暂存器读取数据。
五、代码示例
C语言代码示例
#include <reg52.h> #include <intrins.h> sbit DQ = P3^7; // 定义DS18B20的数据引脚 void Delay(unsigned int i) { while (i); } u8 ReadOneByte() { u8 i, dat = 0; for (i = 0; i < 8; i++) { DQ = 0; // 拉低总线 dat >>= 1; DQ = 1; // 释放总线 if (DQ) dat |= 0x80; Delay(4); } return dat; } void WriteOneByte(u8 dat) { unsigned char i; for (i = 0; i < 8; i++) { DQ = 0; // 拉低总线 DQ = dat & 0x01; // 写入数据位 Delay(5); DQ = 1; // 释放总线 dat >>= 1; } } u16 ReadTemperature() { u16 temp; WriteOneByte(0xCC); // 跳过ROM指令 WriteOneByte(0x44); // 启动温度转换命令 while (!DQ); // 等待转换完成 WriteOneByte(0xCC); // 跳过ROM指令 WriteOneByte(0xBE); // 读取暂存器命令 temp = ReadOneByte(); // 读取低字节 temp <<= 8; // 左移8位 temp |= ReadOneByte(); // 读取高字节 return temp; } void main() { u16 temp; while (1) { temp = ReadTemperature(); // 读取温度值 // 可以在此处添加显示或其他处理逻辑 } }
上述代码展示了如何使用DS18B20进行温度读取,包括初始化、读写操作和常用命令的使用,通过这些步骤,用户可以准确地获取环境温度并进行相应的处理。
作者:豆面本文地址:https://www.jerry.net.cn/articals/19442.html发布于 2025-01-21 03:45:46
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司