datasheet

单片机ds18b20的介绍和源码

2019-08-15来源: eefocus关键字:单片机  ds18b20

DS18B20温度模块


1.1模块特征:


 

供电方式 (两种供电方式:供电为:3— 5.5V)


 

DS18B20结构图


        

主要由2部分组成:64位ROM、9字节暂存器,如图所示


   (1)64位ROM。它的内容是64位序列号,它可以被看做是该DS18B20de地址序列码,


        其作用是使每个DS18B20都不相同,这样就可以实现一根总线上挂载多个DS18B20


        的目的。(由于实验条件,本次只在一根总线下挂载了一个DS18B20)。


   (2)9字节暂存器包含:温度传感器、上限触发TH高温报警器、下线触发TL低温报警


        器、高速暂存器、8位CRC产生器。


以上部分为9字节的暂存单元(包括EEPROM)。



字节0—1是温度暂存器,用来存储转换好的温度。


字节2—3是用户用来设置最高报警和最低报警值。软件实现。(由于设计时的气候环境,


         只设置了一个上限温度报警,而没有设定下限温度报警)。


字节4是配置寄存器,用来配置转换精度,让它工作在9—12位。


字节5—7保留位。


字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生。




温度寄存器


    温度寄存器结构图


          

   

      温度寄存器由两个字节组成,分为低8位和高8位,一共16个字节。


        *其中,第0位到第3位,存储的是温度值的小数部分。


        *第4位到第10位存储的是温度值的整数部分。


        *第11位到第15位为符号位,全0表示是正温度,全1表示负温度。


        *下表中的数值,如果相应的位为1,表示存在,如果相应的位为0,表示不存在。


         


  配置寄存器


    配置寄存器结构图


 

      精确值:


           9--bit       0.5℃


           10-bit       0.25℃


           11-bit       0.125℃


           12-bit       0.0625℃


            一般都默认为12--bit 


  初始化:

         初始化时序包括:主机发出的复位脉冲和从机发出的应答脉冲。主机通过拉低单总线480-960us产生复位脉冲;然后由主机释放总线,并进入接收模式。主机释放总线时,    会产生一由低电平跳变为高电平的上升沿,单总线器件检测到该上升沿后,延时15-60us,接着单总线器件通过拉低总线60-240us来产生应答脉冲。主机接收到从机的以应     答脉冲后,说明有单总线器件在线,初始化完成,主机可以对从机进行ROM命令和操作。


位写入时序


   

      写时隙:当主机把数据线从逻辑高电平拉到逻辑低电平时候,开始写时隙,两种写时间隙:写1和写0。所有写时隙必须最少持续60us,包括两个写周期间至少1us的恢            复时间。DQ引脚电平变低后,DS18B20在一个15us到60us的时间内对DQ引脚采样。如果DQ引脚高电平,写1,如果低电平,写0,主机要生成一个写1时间隙。


         必须把数据线拉到低电平然后释放,在写时隙开始后的15us内允许数据拉到高电平。主机要生成一个写0时间隙,必须把数据线拉到低电平并保持60us。


 位读入时序


 

  当主机把总线从高电平拉低,并保持至少1us后释放总线;并在15us内读取从DS18B20输出的数据。


 


DS18B20的ROM操作命令


  用途:主要用于选定在单总线上的DS18B20,分为5个命令。


1:读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。


2:匹配ROM,代码为55H,用于识别(或选中)某一特定的DS18B20进行操作。


3:搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。


4:跳过ROM,代码为CCH,当总线仅有一个DS18B20时,不需要匹配。


5:报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度


        界限的节点。


 


 启动温度转换


   三个步骤:


   1、复位DS18B20


   2、发出跳过ROM命令(CCH)


   3、发出启动温度转换命令(44H)


 其中Skip ROM 命令仅适用于总线上只有一个DS18B20时的情况。




部分源码:


 


#include

#include "./delay/delay.h"

#include

#include

#include "./LCD1602/LCD1602.h"

 

sbit ds = P3^4;

bit ack = 0;

 

void ds18b20_reset()

{

ds = 1;

ds = 0;

delay_us(200);

delay_us(200);

ds = 1;

delay_us(30);

if(0 == ds)

{

ack = 1;

}

else

{

ack = 0;

}

delay_us(200);

delay_us(200);

}

 

void ds18b20_write_byte(unsigned char byte)

{

unsigned char i;

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

{

ds = 0;

_nop_();

_nop_();

ds = byte & 0x01;

byte >>= 1;

delay_us(30);

ds = 1;

}

delay_us(30);

}

 

bit ds18b20_read_bit()

{

bit temp;

ds = 1;

ds = 0;

_nop_();

_nop_();

ds = 1;

temp = ds;

delay_us(30);

return temp;

}

 

unsigned char ds18b20_read_byte()

{

unsigned char i, j, k;

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

{

j = ds18b20_read_bit();

k = (j << 7) | (k >> 1);

}

return k;

}

 

void main()

{

unsigned char a;

unsigned char i;

unsigned int temp, b;

float wendu;

unsigned char disbuf[20];

BLK = 0;

lcd1602_init();

while(1)

{

ds18b20_reset();

ds18b20_write_byte(0xcc);

ds18b20_write_byte(0x44);

ds18b20_reset();

ds18b20_write_byte(0xcc);

ds18b20_write_byte(0xbe);

a = ds18b20_read_byte();

b = ds18b20_read_byte();

temp = (b << 8) | a;

wendu = (float)temp * 0.0625;

sprintf(disbuf,"temp is:%7.3f",wendu);

lcd1602_dis_str(0,0,disbuf);

 

}

}


关键字:单片机  ds18b20

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471218.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机的DS1302的驱动程序
下一篇:51单片机之IIC&EEPROM的驱动程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

矩阵键盘扫描原理详解——单片机

键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10
发表于 2019-08-16

单片机读入4*4矩阵键盘

一、什么是矩阵键盘矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4*4和8*8,其中用的最多的是4*4。网上搜了两张实物图,大家可以看看看上图就知道,4*4键盘还是很多地方用到的吧^_^二、矩阵键盘的原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通
发表于 2019-08-16
单片机读入4*4矩阵键盘

利用单片机的数码管模拟时钟的显示时间

#include <reg52.h> #define SEGPORT P0sbit seg_select = P2^1;        sbit bit_select = P2^0;           unsigned char duanma[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};               unsigned char
发表于 2019-08-15

单片机之利用按键来使数码管上两位示数增加

#include <reg52.h>#include "./delay/delay.h" sbit seg_select = P2^1;sbit bit_select = P2^0;sbit key1 = P1^0;  #define SEGPORT  P0  unsigned char segdata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
发表于 2019-08-15

单片机之矩阵键盘的驱动程序

#include <reg52.h> #define KEYPORT P1#include "./delay/delay.h" sbit seg_select = P2^0;      //段选sbit bit_select = P2^1;      //位选#define SEGPORT  P0  unsigned char segdata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char bitd
发表于 2019-08-15

单片机码表的驱动程序

#include <reg52.h>#include "./delay/delay.h" #define SEGPORT P0 sbit start = P1^0;sbit end = P1^1;sbit seg_select = P2^1;        sbit bit_select = P2^0;           unsigned char flag = 1;unsigned char duanma[10] = {0x3f,0x06,0x5b,0x4f,
发表于 2019-08-15

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved