最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

DS18B20原理及程序编写

来源:动视网 责编:小OO 时间:2025-09-24 00:08:34
文档

DS18B20原理及程序编写

DS18B20原理及程序编写(一)概述DS18B20为单总线12位(二进制)温度读数。内部有位唯一的ID编码。工作电压从3.0~5.5V。测量温度范围从-55℃~125℃。最高±0.0625℃分辩率。其内部结构如下图所示。DS18B20的核心功能是直接数字温度传感器。温度传感器可以配置成9、10、11和12位方式。相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。默认的分辨率为12位。DS18B20在空闲低功耗状态下加电(寄生电源工作方式)。主机必须发出ConvertT
推荐度:
导读DS18B20原理及程序编写(一)概述DS18B20为单总线12位(二进制)温度读数。内部有位唯一的ID编码。工作电压从3.0~5.5V。测量温度范围从-55℃~125℃。最高±0.0625℃分辩率。其内部结构如下图所示。DS18B20的核心功能是直接数字温度传感器。温度传感器可以配置成9、10、11和12位方式。相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。默认的分辨率为12位。DS18B20在空闲低功耗状态下加电(寄生电源工作方式)。主机必须发出ConvertT
DS18B20原理及程序编写(一)

概述

DS18B20为单总线12位(二进制)温度读数。内部有位唯一的ID编码。工作电压从3.0~5.5V。测量温度范围从-55℃~125℃。最高±0.0625℃分辩率。

其内部结构如下图所示。

DS18B20的核心功能是直接数字温度传感器。温度传感器可以配置成9、10、11和12位方式。相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。默认的分辨率为12位。DS18B20在空闲低功耗状态下加电(寄生电源工作方式)。主机必须发出Convert T [44h]命令使其对测量温度进行A-D转换。接下来进行采集转换,结果存于两字节高速温度寄存器并返回到空闲低功耗状态。如果DS18B20在外部VDD供电方式下,单片机可以在发出Convert T 命令并总线为1时(总线为0表示正在转换)发出“read time slots”命令。

DS18B20芯片内部共有8字节的寄存器,其中地址编号0,1为温度寄存器,里面存储着DS18B20温度转换后的AD值,其格式如表1所示。地址编号2,3为温度报警寄存器,里面为报警设定值,地址编号4为配置寄存器(这三个寄存器在读取之前请使用“重新调入EEPROM”命令将存储在EEPROM里的内容调出,同样,在向温度报警寄存器里写入内容后,也要使用“复制到存储器”命令48H将温度报警寄存器内的内容存入EEPROM当中,以免掉电丢失数据)。

DS18B20内部寄存器映射如下图所示。配置寄存器的格式如表2和表3所示。

DS18B20内部寄存器映射

表1 温度寄存器的格式

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
Ls byte232221202-12-22-32-4
Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
Ms byteSSSSS262524
表2 配置寄存器的格式 

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
配置寄存器0R1R011111
表3 温度分辨率配置

R1R0分辩率最大转换时间
009-bit93.75ms(tCONV/8)
0110-bit187.5ms(tCONV/4)
1011-bit375ms(tCONV/2)
1112-bit750ms(tCONV)
DS18B20使用单总线工作方式,其通信协议以电平的高平时间作为依据,其基本时序有复位时序,写时序、读时序。

//**********************************************************************//**    文件名:DS18B20.c

//**    说    明:DS18B20驱动程序文件

//---------------------------------------------------------------------//**    单  位:

//**    创建人:张雅

//**    创建时间:2010-01-20

//**    联系方式:QQ:2765402

//**    版   本:V1.0

//----------------------------------------------------------------------//**********************************************************************//----------------------------------------------------------------------//**    芯    片:ATS52

//**    时    钟:11.0592MHz

//**    其    它:这个文档为18B20的驱动程序,引用了数码管的驱动。//**          使用时请注明出处。

//**********************************************************************#include 

#ifndef  UCHAR

#define  UCHAR unsigned char

#endif

#ifndef  UINT

#define  UINT unsigned int

#endif

sbit DQ = P1^0;  //DS18B20单总线引脚定义

#include "DS18B20.h"

#include "LED8.h"

 

 

//**********************************************************************//函数功能:11us延时

//输入参数:t :延时长度,单位11us

//输出参数:无

//**********************************************************************void _delay(UINT t){  //11us

    for(;t>0;t--);

}

 

//**********************************************************************//函数功能:DS18B20复位操作函数

//输入参数:无

//输出参数:为1说明器件不存在,为0说明器件存在

//**********************************************************************UCHAR _DS18B20Reset(void){

    DQ = 1;

    _delay(1);

    DQ = 0;

    _delay(50);

    DQ = 1;

    _delay(10);

    if(!DQ) {

        _delay(50);

        return 0;

    }

    else {

        return 1;

    }

}

 

 

//**********************************************************************//函数功能:DS18B20写操作函数

//输入参数:待写入的数据

//输出参数:无

//**********************************************************************void _DS18B20Write(UCHAR d){

    UCHAR i;

   

    for(i=0;i<8;i++){

        DQ = 0;

        _delay(1);

        DQ = d&0x01;  //最低位先发送出去

        _delay(4);

        DQ = 1; 

        d >>=1;    

    }

}

 

 

//**********************************************************************//函数功能:DS18B20读操作函数

//输入参数:无

//输出参数:读取的数据

//**********************************************************************UCHAR _DS18B20Read(void){

    UCHAR i,d;

   

    d=0;

    for(i=0;i<8;i++){

        DQ = 0;

        d >>=1;

        _delay(1);

        DQ = 1;

        if(DQ){

            d|=0x80;      //最低位先接收到

        }

        _delay(4);

        DQ = 1; 

    }

    return d;

}

//**********************************************************************//函数功能:DS18B20读寄存器操作函数

//输入参数:无

//输出参数:读取的温度数据

//          高8位为温度值整数部分

//          低8位为温度值小数部分

//**********************************************************************UINT DS18B20ReadTemp(void){

    static UCHAR TH,TL;

    UCHAR *pp;

    UINT  TEM;

    static enum _s{s1,s11,s12,s2,s3,s4}s;

    bit EAflag;

   

    EAflag = EA;

    EA = 0;

    switch(s){

        case s1:

            while(_DS18B20Reset()){   //无芯片连接时,显示“no-18b20”

                 pp = LED8GetRam();

               

                *pp++ =22;

                *pp++ =0;

                *pp++ =11;

                *pp++ =1;

                *pp++ =8;

                *pp++ =23;

                *pp++ =2;

                *pp++ =0;

                LED8Display();

            }        

            s=s11;

            break;

        case s11:

            _DS18B20Write(0xCC);  //跳过ROM操作命令

            _DS18B20Write(0xBE);  //读中间寄存器 

            s=s12;

            break;

        case s12:

            TL = _DS18B20Read();

            TH = _DS18B20Read();

            TH = (TH<<4)|(TL>>4);

            TL  = (TL&0x0F);

            s=s2;

            break;

        case s2:

            _DS18B20Reset();  

            _DS18B20Write(0xCC);  //跳过ROM命令

            _DS18B20Write(0x44);  //开始转换

            s=s3;

            break;

        case s3:

            if(DQ){

                s=s1;

            }

            break;

        default:

            s = s1;

            break;

    }

    EA = EAflag;

    TEM=TH;

    TEM=(TEM<<8)+TL;

    return TEM;

}

文档

DS18B20原理及程序编写

DS18B20原理及程序编写(一)概述DS18B20为单总线12位(二进制)温度读数。内部有位唯一的ID编码。工作电压从3.0~5.5V。测量温度范围从-55℃~125℃。最高±0.0625℃分辩率。其内部结构如下图所示。DS18B20的核心功能是直接数字温度传感器。温度传感器可以配置成9、10、11和12位方式。相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。默认的分辨率为12位。DS18B20在空闲低功耗状态下加电(寄生电源工作方式)。主机必须发出ConvertT
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top