本文作者:豆面

如何正确使用DS18B20温度传感器?

豆面 2025-01-21 03:45:46 17
如何正确使用DS18B20温度传感器?摘要: DS18B20是一款由DALLAS公司生产的一线制数字温度传感器,具有体积小、硬件开销低、抗干扰能力强和精度高的特点,以下是对DS18B20的使用方法进行详细介绍:一、DS18B2...

DS18B20是一款由DALLAS公司生产的一线制数字温度传感器,具有体积小、硬件开销低、抗干扰能力强和精度高的特点,以下是对DS18B20的使用方法进行详细介绍:

一、DS18B20概述

如何正确使用DS18B20温度传感器?

DS18B20是一线制数字温度传感器,通过一根数据线实现数据的双向传输,其主要特点包括:

1、单总线接口,仅需要一个端口即可完成通信。

2、每个器件都有唯一的序列号。

3、无需外部元器件即可实现测温。

4、测量范围为55℃到+125℃,精度可达0.5℃。

二、引脚功能及内部结构

引脚功能

1、DQ(数据输入/输出端):用于数据传输和寄生电源供电。

2、GND(电源地)。

如何正确使用DS18B20温度传感器?

3、VDD(可选的外部供电电源输入端)。

内部结构

DS18B20的内部主要由四部分组成:64位ROM、温度传感器、非易失性存储的温度报警触发器TH和TL、配置寄存器,其存储器资源分为只读存储器ROM、随机存取存储器RAM和非易失性记忆体EEPROM。

三、使用步骤

初始化

1、复位时序:控制器拉低DQ线至少480μs,然后释放总线并等待DS18B20响应的存在脉冲(60240μs低电平)。

2、存在脉冲:DS18B20在检测到复位信号后会发送一个存在脉冲响应。

写操作

1、写1时序:控制器将总线拉低后,在15μs内释放总线,表示写入“1”。

如何正确使用DS18B20温度传感器?

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
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司

阅读
分享