谁能告诉我单片机从ds18b20中读取温度的原理,是怎样将ds18b20中输出的一位信号变为多位的。

如题所述

首先,DS18B20输出的一位(1 bit)信号是不能被单片机变为多位的,一位就是一位,单片机需要连续多次读取DS18B20输出的一位信号,来合成它需要的信息。比如DS18B20的温度输出是16位数据,那么单片机就要读16次1 bit数据。
读取温度伪代码(temperature为保存温度数值的整型变量):
for ( i=1; i<=16; i++)
{
onebit=读取1位数据的函数();
temperature=temperature|onebit;
if(i!=16)
temperature=temperature<<1;
}

然后,单片机是如何读取DS18B20输出的某1bit信息的呢?在具体回答前先明确一点,这一过程必须在单片机拉低数据线,发起读数据过程之后的15微秒(us)内完成,否则读不到正确数据(注意:发起通信时总是由单片机将数据总线先拉低,没有通信时数据总线保持高电平状态)。下面说说具体过程:
1、单片机将数据总线拉低;
2、延时2us;(这一时间必须大于1us,否则DS18B20无法识别拉低信号;也不能过大,超过15us无法正确读数。)
3、将单片机与DS18B20相连的IO口输入输出方向设为输入;(这一步也有可能是单片机直接将数据线拉高,因芯片的不同而不同)
4、延时2us;(给DS18B20一定的时间输出信号)
5、读取数据总线上的电平值;
6、拉高数据总线,延时一段时间后进入下1bit的读取。
注意:这里能否正确读取的关键是延时的量是否足够精确,因此在用C语言写DS18B20程序之前,需要先根据单片机型号和晶振频率找出一个自己对延时的精度有足够把握的延时函数,随便在网上DOWN别人的程序很有可能因为延时不对跑不起来。

参考资料:DS18B20数据手册

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-03
DS18B20的读操作 时序
(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
它通过一位一位的读取,如传感器待送给MCU的数据时0x055(0b001010101)(9bits)先一位一位的送给MCU然后再按位来拼凑为0x055本回答被网友采纳
第2个回答  2011-01-05
你先把一位一位都读出来,低八位放一个字节里,高八位放一个字节里,然后加下就行了,网上程序多的是
第3个回答  2011-01-05
继续忽悠
第4个回答  2011-01-03
有如串行通信

谁能告诉我单片机从ds18b20中读取温度的原理,是怎样将ds18b20中输出的...
首先,DS18B20输出的一位(1 bit)信号是不能被单片机变为多位的,一位就是一位,单片机需要连续多次读取DS18B20输出的一位信号,来合成它需要的信息。比如DS18B20的温度输出是16位数据,那么单片机就要读16次1 bit数据。读取温度伪代码(temperature为保存温度数值的整型变量):for ( i=1; i<=16; i+...

ds18b20怎么样工作的原理是什么
DS18B20是一种数字温度传感器,它采用1-Wire通信协议,可以通过单总线传输数据。DS18B20使用热敏电阻来测量温度。热敏电阻是一种特殊的电阻,其电阻值会随着温度的变化而变化。DS18B20内部还有一个温度传感器,它可以测量内部的温度并将其转换为数字信号。当DS18B20接入电源时,它会自动进行温度测量并将结果存储...

单片机中如何将DS18b20 测得的温度通过串口发送到上位机VB中?
其次它又是“一线-总线”,那么简单的讲,就是我们与DS18B20的沟通就是通过这一根线实现的,换一个说法就是“写数据”,“发命令”,“读数据”等等都是通过这根线来完成的。第三点,从标题可以看到,它是数字温度计,也就是它能把温度信号转成数字信号。其实这里的“第三点”非常重要——把温度信...

DS18B20 温度传感器实现
DS18B20温度传感器原理图:DS18B20是单总线温度传感器,可直接连接至计算机,直接获取数字信号的温度读数,具备体积小、电压范围宽、精度高的优点。其电压范围在3V到5.5V之间,可由数据线供电,也可快速将外部温度转换为数字信号。温度传感器引脚结构简单,包含GND、VCC、DQ三部分。DQ数据线与P14端口相连。传感...

单片机ds18b20温度转换问题
1:接收数据为双字节--先低位,后高位;先低字节,后高字节;2:高字节的前5位若为“0”,则将数据乘以0.0625;即 [t=(D*0.0625)].3:高字节的前5位若为“1”,则将数据先取反,再加一,再乘以0.0625;即 【t=[(~D)+1]*0.0625]】温度是-55~+125 对应的值是 :(-55>>FF92)...

数字温度传感器DS18B20的数据手册理解
数字温度传感器DS18B20是一种能够将外部温度转换为数字信号并存储的设备。在理解DS18B20的数据手册时,有两个关键问题需要回答:数据存储在哪里以及如何读取数据。数据存储在DS18B20的Scratchpad(Sram)中,具体而言,转换的结果被存放在Byte0和Byte1中,Byte0表示低8位,Byte1表示高8位。在进行计算时,高8...

怎么能将DS18B20的温度转化为电压输出?有图和程序更好,谢谢!急用
DS18B20是通过发送指令来完成温度转换、读取、写入的,温度转换结果都是暂存在DS18B20里的第一、二字节的暂存器,数据都是二进制格式,然后直接读取给单片机或其他微控制器处理并显示。你要将DS18B20的温度转换为电压输出,就是将第一、二字节的二进制数据转换为电压输出,那肯定要用到DAC,而且要根据DS18B20...

DS18B20的数字温度传感器DS18B20介绍
DS18B20引脚定义:(1)DQ为数字信号输入\/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。图2:DS18B20内部结构图3、DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。高温度系数晶振 随...

18B20测温时读取到的温度数据怎么转换!
LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200; 将读出的温度数据保存到35H\/36H RET WRITE_1820: MOV R2,#8;写DS18B20的子程序(有具体的时序要求),一共8位数据 CLR C WR1: CLR ...

DS18B20传出来的数据与温度值之间是什么关系 怎么转换???
数值与温度的关系与你对DS18B20的初始化很有关系。间隔可以是0.5度,0.25度,0.125度,0.0625度。例如0000为0度。0001在你选择的是12位时,为0.0625度。选择的是11位时,为0.125度。选择的是10位时,为0.25度。选择的是9位时,为0.5度。转换耗时间很短,看你转换成什么样的格式,后续...

相似回答