单片机ds18b20的介绍和源码

发布者:tmgouzi最新更新时间: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 引用地址:单片机ds18b20的介绍和源码

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

推荐阅读最新更新时间:2024-11-05 22:32

STM32CubeMX系列 | DS18B20温度传感器
1. DS18B20简介 DS18B20是由DALLAS半导体公司推出的一种单总线接口的温度传感器,与传统的热敏电阻等测温元件相比,它是一种新型的体积小、实用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20的内部结构如下图示 ROM中的64位序列号是出厂前就被光刻好的,可以看做是DS18B20的地址序列号。64位光刻ROM的排列是:8位产品类型标号+48位DS18B20序列号+8位循环冗余校验码。光刻ROM 的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20 DS18B20的内部存储器(9个字节)包括一个高速暂存器RAM和一个EEPROM,EEPROM里存放高温和低温触发器和
[单片机]
单片机51小实验---跑马灯
以下这个程序我在实验箱上运行过,AT89C52功能:根据P2.X口的电平,若输入为1,则有X个灯在P0P1口上循环 ;输入为开关按键 ORG 0000H JMP8: MOV P2,#0FFH ;将所在口置1,即设为输入方式 MOV A,#0 ;初始化R1 MOV R1,A JB P2.0,SHOW1 ;判断P2口,若为1则转入相应的处理程序 JB P2.1,SHOW2 JB P2.2,SHOW3 JB P2.3,SH
[单片机]
基于51单片机设计的简易电子琴
下面直接给出proteus仿真电路 代码如下: #include reg51.h #define uint unsigned int #define uchar unsigned char #define output P1 #define input P1 //方便移植在其他电路板上,我的电路使用P1口做键盘输入接口 //定义16个按键 enum KEY{key0,key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15}; uchar code table ={ //数组定义,显示数码管 0x3f,0x0
[单片机]
基于51<font color='red'>单片机</font>设计的简易电子琴
AVR单片机的特性说明
AVR单片机是 Atmel 公司 1997 年推出的 RISC 单片机。RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。RISC 并非只是简单地去减少指令,而是通过使计算机的结构更加简单合理而提高运算速度的。RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。由于 AVR 采用了 RESC 的这种结构,使AVR系列单片机都具备了1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。 AVR单片机吸收了DSP 双总线的特点,采用 Harvard 总线结构,因此单片机的程序存储器和数据存储器是分离的,并且可对具有相同地
[单片机]
单片机FLASH与RAM、ROM的关系
FLASH主要用作程序存贮器,就是替代以前的ROM,最大的有有点是降低了芯片的成本并且可以做到电擦写,目前市场上单片机的FALSH寿命相差比较大,擦写次数从1000~10万的都有,但存储时间可以保证40年,在选用时要注意。 还有一些廉价的单片机为了集成可掉电的数据存储器,没有选用价格昂贵的 EEPROM,而用FALSH来做的,但要注意其寿命最多就10万次,而且擦写不能字节擦写,这要注意使用的场合其寿命是否满足要求。 RAM是数据存储器,跟计算机里面的内存差不多,主要是用来存放程序运行中的过程数据,掉电后就会丢失之前的数据,所以程序在上电时需要进行初始化,否则上电后的数据是一个随机数,可能导致程序崩溃。 ROM就是程序存储
[单片机]
单片机AT89C51 正反转可控的步进电机
单片机AT89C51 正反转可控的步进电机 单片机源程序: /*************** writer:shopping.w ******************/ #include reg52.h #define uint unsigned int #define uchar unsigned char uchar code FFW = { 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09 }; uchar code REV = { 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01 }; sbit K1 = P3^0; sbit K2
[单片机]
<font color='red'>单片机</font>AT89C51 正反转可控的步进电机
单片机的串口驱动74LS165
  串行口是单片机与外界进行信息交换的工具, 利用单片机串口实现输入移位寄存器,只需用软件置REN=1(同时RI=0),即开始接收。数据字节在移位时钟脉冲的配合下,从低位至高位一位一位地接收下来并装入SBUF中,在启动接收过程(即写SCON,清RI位)开始后的第8个机器周期RI被置位。这一数据帧接收完毕,可进行下一帧的接收。   在模式0下,数据传输速率为fosc/12,fosc是时钟频率。时钟频率为12MHz时串行数据传输速率为lMbit/s,速度较快,故程序中对接收过程采取查询等待方式。如果有必要,应该用中断控制方式以提高程序速率。   需要特别注意,在工作模式0下,必须将SCON的SM2位清零。   单片机串口驱动74L
[单片机]
用<font color='red'>单片机</font>的串口驱动74LS165
基于SH79F085单片机的电子秤应用
电子秤是衡器中的一种,随着科学技术的发展与进步,电子秤经历了由简单到复杂、粗糙到精密的全电子化称重过程。近年来,电子秤广泛应用于商业计价、精密衡器、工业包装、仓储运输等领域。   目前,市场上的电子秤系统主要采用两种方案实现对传感器模拟信号采样:双积分电路和高精度模数转换器(ADC)。   双积分电路是采用一种间接式的A/D转换器,它的基本原理是把待转换的模拟电压变换为与之成比例的时间间隔t,并在t时间内,用恒定频率的脉冲去计数,这就把时间t转换成了数字信号量。双积分电路由于电路复杂,转换时需要软件干预,以及精度较低(一般小于12位)不能满足高端电子秤应用,因此逐渐被市场淘汰。   高精度ADC一般采用Σ-Δ型转换器,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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