DS18B20的工作原理及应用

DS18B20的工作原理及应用
DS18B20的工作原理及应用

1.DS18B20的工作原理

① DS18B20数字温度传感器概述

DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,

具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路

简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20产品的特点

●只要求一个端口即可实现通信。

●在DS18B20中的每个器件上都有独一无二的序列号。

●实际应用中不需要外部任何元器件即可实现测温。

●测量温度范围在-55.C到+125.C之间。

●数字温度计的分辨率用户可以从9位到12位选择。

●内部有温度上、下限告警设置。

TO-92封装的DS18B20的引脚排列见右图,其引脚功能描述见表

表3-2DS18B20详细引脚功能描述

②DS18B20的内部结构

DS18B20的内部框图下图所示,DS18B20 的内部有64 位的ROM 单元,和9 字节的暂存器单元。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(T H)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC )。使用寄生电源时,DS18B20不需额外的供电电源;当总线

为高电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容CPP充电,CPP 在总线低电平时为器件供电。(字节5~8 就不用看了)。

图为暂存器

A.温度寄存器(0和1字节)

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

DS18B20 的温度操作是使用16 位,也就是说分辨率是0.0625。BIT15~BIT11 是符号位,为了就是表示转换的值是正数还是负数。

█要求出正数的十进制值,必须将读取到的LSB 字节,MSB 字节进行整合处理,然后乘以0.0625 即可。

Eg:假设从,字节0 读取到0xD0 赋值于Temp1,而字节1 读取到0x07 赋值于Temp2,然后求出十进制值。

unsigned int Temp1,Temp2,Temperature;

Temp1=0xD0; //低八位

Temp2=0x07; //高八位

Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;//又或者

Temperature = (Temp1 + Temp2 *256) * 0.0625; //Temperature=125

█在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那样会心算,我们必须判断BIT11~15 是否是1,然后人为置一负数标志。

Eg. 假设从,字节0 读取到0x90 赋值于Temp1,而字节1 读取到0xFC 赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。

unsigned int Temp1,Temp2,Temperature;

unsigned char Minus_Flag=0;

Temp1=0x90; //低八位

Temp2=0xFC; //高八位

//Temperature = (Temp1 + Temp2 *256) * 0.0625; //Temperature=64656

//很明显不是我们想要的答案

if(Temp2&0xFC) //判断符号位是否为1

{

Minus_Flag=1; //负数标志置一

Temperature = ((Temp2<<8 ) | Temp1 ) //高八位第八位进行整合

Temperature= ((~Temperature)+1); //求反,补一

Temperature*= 0.0625; //求出十进制

} //Temperature=55;

else

{

Minus_Flag=0;

Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;

}

█如果我要求出小数点的值的话,那么我应该这样做。

Eg:假设从,字节0 读取到0xA2 赋值于Temp1,而字节1 读取到0x00 赋值于Temp2,然后求出十进制值,要求连同小数点也求出。

unsigned int Temp1,Temp2,Temperature;

Temp1=0x90; //低八位

Temp2=0xFC; //高八位

//实际值为10.125

//Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625; //10,无小数点

Temperature = ((Temp2<<8 ) | Temp1 ) * (0.0625 * 10) ; //101 ,一位小数点

//Temperature = ((Temp2<<8 ) | Temp1 ) * (0.0625 * 100) ; //1012,二位小数点

█如以上的例题,我们可以先将0.0625 乘以10,然后再乘以整合后的Temperature 变量,就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。得出的结果是101,然后再利用简单的算法,求出每一位的值。

unsinged char Ten,One,Dot1

Ten=Temperature/100; //1

One=Temperature%100/10; //0

Dot1=%10; //1

求出负数的思路也一样,只不过多出人为置一负数标志,求反补一的动作而已。自己发挥想象力吧。

B .字节2~3:TH 和TL配置

TH 与TL 就是所谓的温度最高界限,和温度最低界限的配置。其实这些可以使用软件来试验,所以就无视了。

C 字节4:配置寄存器

BIT7 出厂的时候就已经设置为0,用户不建议去更改。而R1 与R0 位组合了四个不同的转换精度,00 为9 位转换精度而转换时间是93.75ms,01 为10 位转换精度而转换时间是187.5ms,10 为11 位转换精度而转换时间是375ms,11 为12 位转换精度而转换时间是750ms (默认)。该寄存器还是留默认的好,毕竟转换精度表示了转换的质量。

低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在

DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)

表3-6R1与R0确定传感器分辨率设置表

D.字节5~7,8:保留位,CRC 无视,无视吧。

③光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

④DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

2 DS18B20的工作过程

DS18B20 一般都是充当从机的角色,而单片机就是主机。单片机通过一线总线访问DS18B20 的话,需要经过以下几个步骤:

① DS18B20 复位(初始化),DS18B20 复位。在某种意义上就是一次访问DS18B20 的开始,或者可说成是开始信号。

②执行ROM 指令(ROM命令跟随着需要交换的数据);ROM 指令,也就是访问,搜索,匹配,DS18B20 个别的64 位序列号的动作。在单点情况下,可以直接跳过ROM 指令。而跳过ROM 指令的字节是0xCC

③执行DS18B20 功能指令(RAM 指令),功能命令跟随着需要交换的数据。

DS18B20 功能指令有很多种,我就不一一的介绍了,数据手册里有更详细的介绍。这里仅列出比较常用的几个DS18B20 功能指令。

0x44:开始转换温度。转换好的温度会储存到暂存器字节0 和1。

0xEE:读暂存指令。读暂存指令,会从暂存器0 到9,一个一个字节读取,如果要停止的话,必须写下DS18B20 复位。

访问DS18B20必须严格遵守这一命令序列,如果丢失任何一步或序列混乱,DS18B20都不会响应主机(除了Search ROM 和Alarm Search这两个命令,在这两个命令后,主机都必须返回到第一步)。

一般上我们都是使用单点,也就是说单线总线上仅有一个DS18B20 存在而已。所以我们无

需刻意读取ROM 里边的序列号来,然后匹配那个DS18B20?而是更直接的,跳过ROM 指令,然后直接执行DS18B20 功能指令。

a.初始化, DS18B20复位:

在初始化过程中,主机通过拉低单总线至少480μs,以产生复位脉冲(TX)。然后主机释放总线并进入接收(RX)模式。当总线被释放后,5kΩ的上拉电阻将单总线拉高。DS18B20检测到这个上升沿后,延时15μs~60μs,通过拉低总线60μs~240μs产生应答脉冲。初始化波形如图3-8所示。

DS18B20 的复位时序如下:

1.单片机拉低总线480us~950us, 然后释放总线(拉高电平)。

2.这时DS18B20 会拉低信号,大约60~240us 表示应答。

3.DS18B20 拉低电平的60~240us 之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。

4.DS18B20 拉低电平60~240us 之后,会释放总线。

C 语言代码:

//DS1302 复位函数

void DS1302_Reset()

{

DDRA|=BIT(DQ); //DQ 为输出状态

PORTA&=~BIT(DQ); //输出低电平

Delay_1us(500); //延迟500 微妙

PORTA|=BIT(DQ); //示范总线

Delay_1us(60); //延迟60 微妙

DDRA&=~BIT(DQ); //DQ 位输出状态

while(PINA&BIT(DQ)); //等待从机DS18B20 应答(低电平有效)

while(!(PINA&BIT(DQ))); //等待从机DS18B20 释放总线

}

DS18B20所有的数据交换都由一个初始化序列开始。由主机发出的复位脉冲和跟在其后的由DS18B20发出的应答脉冲构成。当DS18B20发出响应主机的应答脉冲时,即向主机表明它已处在总线上并且准备工作。

b. ROM命令:

ROM命令通过每个器件64-bit的ROM码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。DS18B20的ROM如表3-4所示,每个ROM命令都是8 bit长。

c. 功能命令:

主机通过功能命令对DS18B20进行读/写Scratchpad存储器,或者启动温度转换。DS18B20的功能命令如表3-7所示。

表3-7

(6)DS18B20的信号方式

DS18B20采用严格的单总线通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。除了应答脉冲所有这些信号都由主机发出同步信号。总线上传输的所有数据和命令都是以字节的低位在前。

a.初始化序列:复位脉冲和应答脉冲

在初始化过程中,主机通过拉低单总线至少480μs,以产生复位脉冲(TX)。然后主机释放总线并进入接收(RX)模式。当总线被释放后,5kΩ的上拉电阻将单总线拉高。DS18B20检测到这个上升沿后,延时15μs~60μs,通过拉低总线60μs~240μs产生应答脉冲。初始化波形如图3-8所示。

b.读和写时序

在写时序期间,主机向DS18B20写入指令;而在读时序期间,主机读入来自DS18B20的

指令。在每一个时序,总线只能传输一位数据。读/写时序如图3-9所示。

●写时序

存在两种写时序:“写1”和“写0”。主机在写1时序向DS18B20写入逻辑1,而在写0时序向DS18B20写入逻辑0。所有写时序至少需要60μs,且在两次写时序之间至少需要1μs的恢复时间。两种写时序均以主机拉低总线开始。

产生写1时序:主机拉低总线后,必须在15μs内释放总线,然后由上拉电阻将总线拉至高电平。产生写0时序:主机拉低总线后,必须在整个时序期间保持低电平(至少60μs)。

在写时序开始后的15μs~60μs期间,DS18B20采样总线的状态。如果总线为高电平,则逻辑1被写入DS18B20;如果总线为低电平,则逻辑0被写入DS18B20。

●写时序

DS18B20 写逻辑0 的步骤如下:

1.单片机拉低电平大约10~15us,。

2.单片机持续拉低电平大约20~45us 的时间。

3.释放总线

DS18B20 写逻辑1 的步骤如下:

1.单片机拉低电平大约10~15us,。

2.单片机拉高电平大约20~45us 的时间。

3.释放总线

●写时序

DS18B20 读逻辑0 的步骤如下:

1.在读取的时候单片机拉低电平大约1us

2.单片机释放总线,然后读取总线电平。

3.这时候DS18B20 会拉低电平。

4.读取电平过后,延迟大约40~45 微妙

DS18B20 读逻辑1 的步骤如下:

1.在读取的时候单片机拉低电平大约1us

2.单片机释放总线,然后读取总线电平。

3.这时候DS18B20 会拉高电平。

4.读取电平过后,延迟大约40~45 微妙

如果要读或者写一个字节,就要重复以上的步骤八次。如以下的C 代码,使用for 循环,和数据变量的左移和或运算,实现一个字节读与写。

//DS18B20 写字节函数

void DS1302_Write(unsigned char Data)

{

unsigned char i;

DDRA|=BIT(DQ); //DQ 为输出

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

{

PORTA&=~BIT(DQ); //拉低总线

Delay_1us(10); //延迟10 微妙(最大15 微妙)

if(Data&0x01) PORTA|=BIT(DQ);

else PORTA&=~BIT(DQ);

Delay_1us(40); //延迟40 微妙(最大45 微妙)

PORTA|=BIT(DQ); //释放总线

Delay_1us(1); //稍微延迟

Data>>=1;

}

}

//DS18B20 读字节函数

unsigned char DS1302_Read()

{

unsigned char i,Temp;

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

{

Temp>>=1; //数据右移

DDRA|=BIT(DQ); //DQ 为输出状态

PORTA&=~BIT(DQ); //拉低总线,启动输入

PORTA|=BIT(DQ); //释放总线

DDRA&=~BIT(DQ); //DQ 为输入状态

if(PINA&BIT(DQ)) Temp|=0x80;

Delay_1us(45); //延迟45 微妙(最大45 微妙)

}

return Temp;

}

就是这么建档而已,不过这里有一个注意点,就是Delay_1us(); 函数延迟的时间,必须模拟非常准确,因为单线总线对时序的要求敏感点。

DS18B20只能在主机发出读时序时才能向主机传送数据。所以主机在发出读数据命令后,必须马上产生读时序,以便DS18B20能够传送数据。所有读时序至少60μs,且在两次独立的读时序之

间至少需要1μs的恢复时间。

每次读时序由主机发起,拉低总线至少1μs。在主机发起读时序之后,DS18B20开始在总线上传送1或0。若DS18B20发送1,则保持总线为高电平;若发送0,则拉低总线。当传送0时,DS18B20在该时序结束时释放总线,再由上拉电阻将总线拉回空闲高电平状态。DS18B20发出的数据在读时序下降沿起始后的15μs内有效,因此主机必须在读时序开始后的15μs内释放总线,并且采样总线状态。

DS18B20 在使用时,一般都采用单片机来实现数据采集。只需将DS18B20 信号线与单片机1 位I/O线相连,且单片机的1 位I/O 线可挂接多个DS18B20 ,就可实现单点或多点温度检测。

(7)DS18B20的温度计算

DS18B20允许通过程序对传感器的分辨率,温度报警的上、下限等参数进行配置。它的内部存储器包括一个高速暂存存储器和一个非易失性可擦除E2PROM。速暂存存储器共有8个字节(byte),每个字节8位(bit)。

根据温度的计算方法如下:

S S S S S = 11111 b 温度值:

T = [ (MSB and 7) ×256 + LSB] ×0.0625 ℃

SSSSS = 00000 b 温度值:

T = - [ (256 - MSB) ×256 - LSB] ×0.0625 ℃

如果,存储器高位寄存器MS的S S S S S 均为1 ,则被测温度为正值,用上面第1个公式来计算温度。如果存储器高位寄存器MSB的S S S S S均为0,则被测温度为负值,用上面第2个公式来计算温度。在这里,有两点应当注意:一是公式中中括号内的数值为二进制,在计算口号内计算完成后应转化为十进制;二是这里的7与0.0625是假设传感器的分辨率设置0.0625时的计算值。如果分辨率的设置值不是0.0625,那么就应当作相应的变化。第3和第4个字节分别用来存放温度报警的上限(TH)和下限值(TL)。DS18B20在完成温度变换后,会将所测温度值与贮存在TH和TL内的上下限值相比较,如果测温结果高于TH或低于TL,DS18B20内部的告警标志就会被置位,表示温值超出了测量范围。并且该值在掉电后不会丢失,而是记忆其设定的上下限值。第5字节是配置寄存器,如表2.3所示,该寄存器用于对温度转换值的分辨率进行设置。其中,最高位用于设置传感器是工作模式还是测试模式,是生产厂家为便于检验使用。其出厂时的默认值为0,为工作模式(即用户使用时的模式)。并且在用户使用中,该位总是保持为0。R1与R0确定传感器的分辨率,如表2.4所示,DS18B20有4种分辨率可供选择。使用时可以根据实际需要来设置,出厂时的默认设置是12位。最后5位总保持为1

简单归纳

实验开始之前,简单的归纳一些重点。单线总线高电平为闲置状态。单片机访问DS18B20必须遵守,DS18B20 复位-->执行ROM 指令-->执行DS18B20 功能指令。而在单点上,可以直接跳过ROM 指令。DS18B20 的转换精度默认为12 位,而分辨率是0.0625。DS18B20 温度读取函数参考步骤:DS18B20 开始转换:

1.DS18B20 复位。

2.写入跳过ROM 的字节命令,0xCC。

3.写入开始转换的功能命令,0x44。

4.延迟大约750~900 毫秒

DS18B20 读暂存数据:

1.DS18B20 复位。

2.写入跳过ROM 的字节命令,0xCC。

3.写入读暂存的功能命令,0xee。

4.读入第0 个字节LS Byte,转换结果的低八位。

5.读入第1 个字节MS Byte,转换结果的高八位。

6.DS18B20 复位,表示读取暂存结束。

数据求出十进制:

1.整合LS Byte 和MS Byte 的数据

2.判断是否为正负数(可选)

3.求得十进制值。正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。

4.十进制的“个位”求出。

ds18b20 c程序

//DS1820 C51 子程序

//这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间

//sbit DQ =P2^1;//根据实际情况定义端口

typedef unsigned char byte;

typedef unsigned int word;

//延时

void delay(word useconds)

{

for(;useconds>0;useconds--);

}

//复位

byte ow_reset(void)

{

byte presence;

DQ = 0; //pull DQ line low时序中

delay(29); // leave it low for 480us

DQ = 1; // allow line to return high

delay(3); // wait for presence

presence = DQ; // get presence signal

delay(25); // wait for end of timeslot

return(presence); // presence signal returned

} // 0=presence, 1 = no part

//从1-wire 总线上读取一个字节

byte read_byte(void)

{

byte i;

byte value = 0;

for (i=8;i>0;i--)

{

value>>=1;

DQ = 0; // pull DQ low to start timeslot

DQ = 1; // then return high

delay(1); //for (i=0; i<3; i++);

if(DQ)value|=0x80;

delay(6); // wait for rest of timeslot

}

return(value);

}

//向1-WIRE 总线上写一个字节

void write_byte(char val)

{

byte i;

for (i=8; i>0; i--) // writes byte, one bit at a time

{

DQ = 0; // pull DQ low to start timeslot

DQ = val&0x01;

delay(5); // hold value for remainder of timeslot DQ = 1;

val=val/2;

}

delay(5);

}

//读取温度

char Read_Temperature(void)

{

union{

byte c[2];

int x;

}temp;

ow_reset();

write_byte(0xCC); // Skip ROM

write_byte(0xBE); // Read Scratch Pad

temp.c[1]=read_byte();

temp.c[0]=read_byte();

ow_reset();

write_byte(0xCC); //Skip ROM

write_byte(0x44); // Start Conversion

return temp.x/2;

ds18b20汇编程序:

本汇编程序仅适合单个DS18B20和51单片机的连接,晶振为12MHZ左右

DQ:DS18B20的数据总线接脚

FLAG1:标志位,为"1"时表示检测到DS18B20

TEMPER_NUM:保存读出的温度数据

TEMPER_L EQU 36H

TEMPER_H EQU 35H

DQ BIT P1.7

; DS18B20初始化汇编程序

;//*****************************************//

INIT_1820:

SETB DQ

NOP

CLR DQ //拉低480us

MOV R0,#06BH

TSR1:

DJNZ R0,TSR1; //(延时作用)先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。

SETB DQ//拉高60~240us

MOV R0,#25H

TSR2:

JNB DQ,TSR3 若(bit)=0,则转移,PC←PC+3+rel;否则程序继续执行

DJNZ R0,TSR2 //(延时作用)先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。

LJMP TSR4; 延时

TSR3:

SETB FLAG1; 置标志位,表示DS1820存在

LJMP TSR5

TSR4:

CLR FLAG1; 清标志位,表示DS1820不存在

LJMP TSR7

TSR5:

MOVR0,#06BH

TSR6:

DJNZ R0,TSR6; //(延时作用)先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。

TSR7:

SETB DQ

RET //用RET指令实现多分支程序的方法是:先把各个分支的目的地址按顺序组织成一张地址表,在程序中用分支信息去查表,取得对应分支的目的地址,按先低字节,后高字节的顺序压入堆栈,然后执行RET指令,执行后则转到对应的目的位置。

;//*****************************************//

; 重新写DS18B20暂存存储器设定值

; //*****************************************//

RE_CONFIG:

JB FLAG1,RE_CONFIG1; 若DS18B20存在,转RE_CONFIG1

RET

RE_CONFIG1:

MOV A,#0CCH; //发SKIP ROM命令0CCH就是SKIP ROM的代码,资料中已给出

LCALL WRITE_1820 //写DS18B20的程序

MOV A,#4EH; 发写暂存存储器命令

LCALL WRITE_1820

MOV A,#00H; TH(报警上限)中写入00H

LCALL WRITE_1820

MOV A,#00H; TL(报警下限)中写入00H

LCALL WRITE_1820

MOV A,#1FH; 选择9位温度分辨率DS18B20可以程序设定9~12位的分辨率,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

LCALL WRITE_1820

RET

;//*****************************************//

; 读出转换后的温度值

;//*****************************************//

GET_TEMPER:

SETB DQ; 定时入口

LCALL INIT_1820 //先复位DS18B20

JB FLAG1,TSS2 //如果指定的(bit)=1(表示有传感器存在),则转移,否则顺序执行,第二条指令功能相反

RET; 若DS18B20不存在则返回

TSS2:

MOV A,#0CCH; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#44H; 发出温度转换命令

LCALL WRITE_1820 ;// 这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒

LCALL INIT_1820 ; //准备读温度前先复位

MOV A,#0CCH; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH; 发出读温度命令

LCALL WRITE_1820

LCALL READ_1820 ;// 将读出的温度数据保存到35H/36H

MOV TEMPER_NUM,A; 将读出的温度数据保存

RET

;//*****************************************//

; 读DS18B20的程序,从DS18B20中读出一个字节的数据

;//*****************************************//

READ_1820:

MOV R2,#8 ;//数据一共有8位,8位数据分别一个一个读

RE1:

CLR C ;//清零

SETB DQ ;//拉高

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE1

RET

;//*****************************************//

; 写DS18B20的程序

;//*****************************************//

WRITE_1820:

MOV R2,#8 // 一共8位数据,八位数据一位一位的写

CLR C //清零

WR1:

CLR DQ //清零

MOV R3,#6 //(延时10us )

DJNZ R3,$ //先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。

RRC A //带进位的循环右移,调用WRITE_1820前已对A赋值

MOV DQ,C //因为右移,C有值了

MOV R3,#23

DJNZ R3,$ //(延时27us )该指令的功能是在自己本身上循环,进入等待状态。其中符号$ 表示转移到本身,它的机器码为80 FEH。在程序设计中,程序的最后一条指令通常用它,使程序不再向后执行以避免执行后面的内容而出错。符号“$”,表示程序计数器PC的当前值SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;//*****************************************//

; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据

;//*****************************************//

READ_18200:

MOV R4,#2; 将温度高位和低位从DS18B20中读出

MOV R1,#36H;// 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00:

MOV R2,#8

RE01:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A ;//带进位的循环右移

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

;//*****************************************//

; 将从DS18B20中读出的温度数据进行转换

;//*****************************************//

TEMPER_COV:

MOV A,#0F0H

ANL A,TEMPER_L; 舍去温度低位中小数点后的四位温度数值

SWAP A

MOVTEMPER_NUM,A

MOV A,TEMPER_L

JNB ACC.3,TEMPER_COV1; 四舍五入去温度值

INCTEMPER_NUM

TEMPER_COV1:

MOV A,TEMPER_H

ANL A,#07H

SWAPA

ORL A,TEMPER_NUM

MOVTEMPER_NUM,A; 保存变换后的温度数据

LCALLBIN_BCD

RET

;//*****************************************//

; 将16进制的温度数据转换成压缩BCD码

;//*****************************************//

BIN_BCD:

MOV DPTR,#TEMP_TAB

MOV A,TEMPER_NUM

MOVC A,@A+DPTR

MOV TEMPER_NUM,A

RET

TEMP_TAB:

DB00H,01H,02H,03H,04H,05H,06H,07H

DB08H,09H,10H,11H,12H,13H,14H,15H

DB16H,17H,18H,19H,20H,21H,22H,23H

DB24H,25H,26H,27H,28H,29H,30H,31H

DB32H,33H,34H,35H,36H,37H,38H,39H

DB40H,41H,42H,43H,44H,45H,46H,47H

DB48H,49H,50H,51H,52H,53H,54H,55H

DB56H,57H,58H,59H,60H,61H,62H,63H

DB64H,65H,66H,67H,68H,69H,70H

;//*****************************************//

下面还介绍一个ds18b20汇编程序

;**********************************

FLAG1 BIT F0 ;DS18B20存在标志位

DQ BIT P1.7

TEMPER_L EQU 29H

TEMPER_H EQU 28H

A_BIT EQU 35H

B_BIT EQU 36H

;************ds18b20汇编程序起始******************** ORG 0000H

AJMP MAIN

ORG 0100H

;**************主程序开始************

MAIN:

LCALL INIT_18B20

;LCALL RE_CONFIG

LCALL GET_TEMPER

AJMP CHANGE

;**********DS18B20复位程序*****************

INIT_18B20: SETB DQ

NOP

CLR DQ

MOV R0,#0FBH

TSR1: DJNZ R0,TSR1 ;延时

SETB DQ

MOV R0,#25H

TSR2: JNB DQ ,TSR3

DJNZ R0,TSR2

TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在CLR P2.0 ;二极管指示

AJMP TSR5

TSR4: CLR FLAG1

LJMP TSR7

TSR5: MOV R0,#06BH

TSR6: DJNZ R0,TSR6

TSR7:SETB DQ ;表明不存在

RET

;********************设定DS18B20暂存器设定值**************

;RE_CONFIG:

;JB FLAG1,RE_CONFIG1

;RET

;RE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令

;LCALL WRITE_18B20

;MOV A,#4EH

;LCALL WRITE_18B20 ;写暂存器命令

;MOV A,#00H ;报警上限中写入00H

;LCALL WRITE_18B20

;MOV A,#00H ;报警下限中写入00H

; LCALL WRITE_18B20

;MOV A,#1FH ;选择九位温度分辨率

; LCALL WRITE_18B20

; RET

;*****************读转换后的温度值****************

GET_TEMPER:

SETB DQ

LCALL INIT_18B20

JB FLAG1,TSS2

RET ;若不存在则返回

TSS2: MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#44H ;发出温度转换命令

LCALL WRITE_18B20

LCALL DISPLAY ;延时

LCALL INIT_18B20

MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#0BEH ;发出读温度换命令

LCALL WRITE_18B20

LCALL READ2_18B20 ;读两个字节的温度

RET

;***************写ds18b20汇编程序************

WRITE_18B20:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;***********读18B20程序,读出两个字节的温度*********

READ2_18B20:

MOV R4,#2 ;低位存在29 H,高位存在28H

MOV R1,#29H

RE00: MOV R2,#8

RE01: CLR C

SETB C

NOP

NOP

(完整版)DS18B20的工作原理

DS18B20的工作原理: DS18B20单线数字温度传感器是DALLAS半导体公司开发的适配微处理器的智能温度传感器。它具有3脚TO-92小体积封装形式。温度测量范围为-55℃--+125℃,可进行9-12位的编程,分辨率可达0.0625。被测温度用符号扩展的16位数字量方式串行输出。工作电压支持3V-5.5V,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少。DS18B20采用3脚TO-92封装,引脚排列如图: DQ:数字信号端;GND:电源地;VDD:电源输入端 DS18B20的内部框图如图: 主要由寄生电源、64位激光ROM与单线接口、温度传感器、高速暂存器、触发寄存器、存储与控制逻辑、8位循环冗余校验码发生器组成。 测温电路原理: 低温度系数振荡器用于产生稳定的频率f,振荡频率受温度的影响很小,高温度系数振荡器将被测温度转化成频率信号,随温度变化其振荡频率明显改变。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定。每次测量前,首先将-55℃所对应的基数分别

置入减法计数器、温度寄存器中。在计数门关闭之前若计数器已减至零,温度寄存器中的数值就增加0.5℃。然后,计数器依斜率累加器的状态置入新的数值,再对时钟计数,然后减至零,温度寄存器值又增加0.5℃。只要计数门仍未关闭,就重复上诉过程,直至温度寄存器值达到被测温度值。 温度传感器的应用背景: 当今社会已经完全进入了电子信息化,温度控制器在各行各业中已经得到了充分的利用。具有对温度进行实时监控的功能,保证机器,测量仪器等等的正常运坐,他最大的特点是能实时监控周围温度的高低,并能同时控制电机运作来改变温度。现阶段运用于国内大部分家庭,系统效率越来越高,成本也越来越低。并可以根据其性质进行相应的改进运用于不同场合进行温度监测控制,比如仓库里、汽车里、电脑等等,带来大量的经济效益。可广泛应用于城市、农村、各种工业生产,在一定情况下也可以用于太阳能、锅炉及对温度敏感的产业的自动控制和温度报警,是实现无人值守的理想产品,市场极为广阔,需求量大。并且使用寿命长,适用范围广,安装及其容易。 智能风扇的应用: 传统的风扇大部分只有手动调速,再加一个定时器,功能单一。往往也存在一些隐患,如人们常常离开后忘记关闭风扇,浪费电且容易引发火灾,长时间工作还容易损坏电器。在如前半夜温度高,电风扇调的风速较高,但到了后半夜,温度下降,风速不会随气温变化,容易着凉,智能风扇的出现就能对环境进行检测,能随温度的变化而改变风速。 温度传感器的选择方案: 方案1:热敏电阻。 采用热敏电阻,可满足40摄氏度至90摄氏度的测量范围,但热敏电阻精度、重复性、可靠性比较差,对于检测1摄氏度的信号是不适用的。而且在温度测量系统中,是采用单片温度传感器,比如AD590,LM35等,但这些芯片输出的都是模拟信号,必须经过A/D转化后才能送给计算机,这样就使得测温装置的结构较复杂,另外,这种测温装置的一根线上只能挂一个传感器,不能进行多点测量,即使能实现,也要用到复杂的算法,一定程度上增加了软件实现的难度 方案2:DS18B20 DS18B20温度传感器是以9位数字量的形式反映器件的温度值,DS18B20通过一个单线接口发送或接受信息,因此在中央微处理器和DS18B20之间仅需一条连线(加上地线),用于读写和温度转化的电源可以从数据线本身获得,无需外部电源。它可以直接将模拟信号转化为数字信号,降低了电路的复杂程度,提高电路的运行质量。 综上,选择了方案2进行温度测量。 DS18B20的一般操作过程: 1:初始化 2:跳过ROM(命令CCH) 3:温度变换(命令44H)

DS18B20工作原理

DS18B20工作原理及时序 DS18B20原理与分析 DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 1.DS18B20简介 (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0~ +5.5 V。 (4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。 (5)通过编程可实现9~12位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 DS18B20的测温原理 DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小〔1〕,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温

温度传感器工作原理

温度传感器工作原理 1.引脚★ ●GND接地。 ●DQ为数字信号输入\输出端。 ●VDD为外接电源输入端(在寄生电源接线方式时接地) 2.与单片机的连接方式★ 单线数字温度传感器DS18B20与单片机连接电路非常简单,引脚1接地(GND),引脚3(VCC)接电源+5V,引脚2(DQ)接单片机输入\输出一个端口,电压+5V和信号线(DQ)之间接有一个4.7k的电阻。 由于每片DS18B20含有唯一的串行数据口,所以在一条总线上可以挂接多个DS18B20芯片。 外部供电方式单点测温电路如图★ 外部供电方式多点测温电路如图★ 3.DS18B20的性能特点 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下: ●独特的单线接口仅需要一个端口引脚进行通信。 ●多个DS18B20可以并联在唯一的三线上,实现多点组网功能。 ●不需要外部器件。 ●在寄生电源方式下可由数据线供电,电压围为3.0~5.5V。 ●零待机功耗。

●温度以9~12位数字量读出 ●用户可定义的非易失性温度报警设置。 ●报警搜索命令识别并标识超过程序限定温度(温度报警条件)的器件。 ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,只是不能正常工作。 4.部结构 .DS18B20采用3脚PR—35封装或8脚SOIC封装,其部结构框图★ 64位ROM的位结构如图★◆。开始8位是产品类型的编号;接着是每个器件的唯一序号,共有48位;最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用单线进行通信的原因。非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限数据。 MSB LSB MSB LSB MSB LSB DS18B20温度传感器的部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2PROM。 高速暂存RAM的结构为9字节的存储器,结构如图★。前2字节包含测得的温度信息。第3和4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5字节为配置寄存器,其容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转化为相应精度的数值。该字节各位的定义如图★,其中,低5位一直为1;TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时,该位被设置为0,用户不要去改动;R0和R1决定温度转化的精度位数,即用来设置分辨率,其定义方法见表★ 高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节是前面所有8

温度传感器DS18B20工作原理

温度传感器: DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。 2 DS18B20的内部结构 DS18B20内部结构如图1所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地,见图4)。 ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 图1 DS18B20的内部结构

图2DS18B20的管脚排列 DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。 温度值高字节 高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下: R1、R0决定温度转换的精度位数:R1R0=“00”,9位精度,最大转换时间为93.75ms;R1R0=“01”,10位精度,最大转换时间为187.5ms;R1R0=“10”,11位精度,最大转换时间为375ms;R1R0=“11”,12位精度,最大转换时间为750ms;未编程时默认为12位精度。 高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。 3 DS18B20的工作时序 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序,如图3(a)(b)(c)所示。

ds18b20详解及程序

最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序. DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点: (1)、只要求一个I/O 口即可实现通信。 (2)、在DS18B20 中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃; (5)、数字温度计的分辨率用户可以从9 位到12 位选择。将12位的温度值转换为数字量所需时间不超过750ms; (6)、内部有温度上、下限告警设置。 DS18B20引脚分布图 DS18B20 详细引脚功能描述: 1、GND 地信号; 2、DQ数据输入出引脚。开漏单总线接口引脚。当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻. 3、VDD可选择的VDD 引脚。电压范围:3~5.5V; 当工作于寄生电源时,此引脚必须接地。 DS18B20存储器结构图 暂存储器的头两个字节为测得温度信息的低位和高位字节;

第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新; 第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新; 第9字节是前面8个字节的CRC检验值. 配置寄存器的命令内容如下: MSB LSB R0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位. 温度值分辨率配置表 4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值) 12位分辨率时的两个温度字节的具体格式如下: 其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨 , 高字节不变.... 一些温度与转换后输出的数字参照如下:

温度传感器DS18B20工作原理

温度传感器:?DS18B20就是DALLAS公司生产得一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为—55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展得16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器得端口较少,可节省大量得引线与逻辑电路。以上特点使DS18B20非常适用于远距离多 点温度检测系统。 2DS18B20得内部结构??DS18B20内部结构如图1所示,主要由4部分组成:64位ROM、温度传感器、非挥发得温度报警触发器TH与TL、配置寄存器。DS18B20得管脚排列如图2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地,见图4)。?ROM中得64位序列号就是出厂前被光刻好得,它可以瞧作就是该DS18B20得地址序列码,每个DS18B20得64位序列号均不相同.64位ROM得排得循环冗余校验码(CRC=X8+X5+X4+1)。ROM得作用就是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20得目得。 ?图1DS18B20得内部结构 图2DS18B20得管脚排列 DS18B20中得温度传感器完成对温度得测量,用16位符号扩展得二进制补码读数形式提供,以0。0625℃/LSB形式表达,其中S为符号位。例如+125℃得数字输出为07D0H,+25。0625℃得数字输出为0191H,-25.0625℃得数字输出为FF6FH,-55℃得数字输出为FC90H。?温度值高字节? 高低温报警触发器TH与TL、配置寄存器均由一个字节得EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器得格式如下:?R1、R0决定温度转换得精度位数:R1R0=“0

DS18B20操作时序详解

1.DS18B20复位程序分析 单片机发送复位脉冲低电平保持至少480us 释放总线进入接收状态,等待15us-60us DS18B20发出存在脉冲脉冲持续60-240us void reset() { uint i;//i 定义为uchar型 ds=0; i=103; while(i>0)i--; ds=1; while(i>0)i--;//在这里不做存在检测 } 2.DS18B20写程序 时序分析:

单片机由高电平拉低至低电平产生写时间隙 15us之后就需要将所需要写的位送到总线上面 DS18B20在开始之后的15-60us内对总线进行采样(注意采样时间)uint dswrite(uchar dat) { uchar i; uint j; sbit tempbyte; for(i=0;i<8;i++) { tempbyte=dat&0x01; dat>>=1;//从最低位开始每一位送到tempbyte临时位 //总线拉低为低电平 if(tempbyte)//写1 { ds=0; j++; j++;//延时个13us ds=1; j=8; while(j>0)j--//延时个71us }

else { ds=0; j=8; while(j>0)j--; ds=1; j++;j++;//保证大于1us- } } } 3.DS18B20读时序 时序分析 单片机从高电平拉低至低电平 低电平保持4us后将总线拉高产生读时间隙 读时间在4us后到15us之前(注意一定在15us之前)读时间才有效从拉低总线60us-120us之间释放总线(注意是在这个时间间隙之间,严格按照时序操作)

DS18B20温度传感器工作原理及其应用电路图

DS18B20温度传感器工作原理及其应用电路图 时间:2012-02-16 14:16:04 来源:赛微电子网作者: 前言 温度与工农业生产密切相关,对温度的测量和控制是提高生产效率、保证产品质量以及保障生产安全和节约能源的保障。随着工业的不断发展,由于温度测量的普遍性,温度传感器的市场份额大大增加,居传感器首位。数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。现在,新一代的DS18B20温度传感器体积更小、更经济、更灵活。DS18B20温度传感器测量温度范围为-55℃~+125℃。在-10℃~+85℃范围内,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。基于DS18B20温度传感器的重要性,小编整理出DS18B20温度传感器工作原理及其应用电路图供大家参考。 一、DS18B20温度传感器工作原理(热电阻工作原理) DS18B20温度传感器工作原理框图如图所示: DS18B20温度传感器工作原理框图 图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 二、DS18B20温度传感器的应用电路 1.DS18B20温度传感器寄生电源供电方式电路图 寄生电源方式特点: (1)进行远距离测温时,无须本地电源。 (2)可以在没有常规电源的条件下读取ROM。 (3)电路更加简洁,仅用一根I/O口实现测温。 (4)只适应于单一温度传感器测温情况下使用,不适于采用电池供电系统中。

DS18B20中文资料

第一部分:DS18B20的封装和管脚定义 首先,我们来认识一下DS18B20这款芯片的外观和针脚定义,DS18B20芯片的常见封装为TO-92,也就是普通直插三极管的样子,当然也可以找到以SO(DS18B20Z)和μSOP(DS18B20U)形式封装的产品,下面为DS18B20各种封装的图示及引脚图。 了解了这些该芯片的封装形式,下面就要说到各个管脚的定义了,如下表即

为该芯片的管脚定义: 上面的表中提到了一个“奇怪”的词——“寄生电源”,那我有必要说明一下了,DS18B20芯片可以工作在“寄生电源模式”下,该模式允许DS18B20工作在无外部电源状态,当总线为高电平时,寄生电源由单总线通过VDD 引脚,此时DS18B20可以从总线“窃取”能量,并将“偷来”的能量储存到寄生电源储能电容(Cpp)中,当总线为低电平时释放能量供给器件工作使用。所以,当DS18B20工作在寄生电源模式时,VDD引脚必须接地。 第二部分:DS18B20的多种电路连接方式 如下面的两张图片所示,分别为外部供电模式下单只和多只DS18B20测温系统的典型电路连接图。 (1)外部供电模式下的单只DS18B20芯片的连接图

(2)外部供电模式下的多只DS18B20芯片的连接图 这里需要说明的是,DS18B20芯片通过达拉斯公司的单总线协议依靠一个单线端口通讯,当全部器件经由一个三态端口或者漏极开路端口与总线连接时,控制线需要连接一个弱上拉电阻。在多只DS18B20连接时,每个DS18B20都拥有一个全球唯一的64位序列号,在这个总线系统中,微处理器依靠每个器件独有的64位片序列号辨认总线上的器件和记录总线上的器件地址,从而允许多只DS18B20同时连接在一条单线总线上,因此,可以很轻松地利用一个微处理器去控制很多分布在不同区域的DS18B20,这一特性在环境控制、探测建

DS18B20原理及程序编写

DS18B20原理及程序编写(一) 概述 DS18B20为单总线12位(二进制)温度读数。内部有64位唯一的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 温度寄存器的格式 表2 配置寄存器的格式 表3 温度分辨率配置 DS18B20使用单总线工作方式,其通信协议以电平的高平时间作为依据,其基本时序有复位时序,写时序、读时序。

DS18B20时序详解

DS18B20时序详解 初始化时序: DS18B20的所有通信都是以由复位脉冲组成的初始化序列开始的。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。下图阐述了这一点。 DS18B20发出存在脉冲,以通知主机它在总线上并且准备好操作了。 在初始化时序中,总线上的主机通过拉低单总线至少480μs来发送复位脉冲。然后总线主机释放总线并进入接收模式。总线释放后,4.7kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测到上升沿后等待15到60us,然后以拉低总线60-240us的方式发出存在脉冲。如上所述,主机将总线拉低最短480us,之后释放总线。由4.7kΩ上拉电阻将总线恢复到高电平。DS18B20检测到上升沿后等待15到60us,发出存在脉冲:拉低总线60-240us。至此,初始化和存在时序完毕。 /*延时函数:(由于DS18B20延时均以15us为单位,故编写了延时单位为15us的延时函数,注意:以下延时函数晶振为12MHz)*/ /* ************************************ 函数:Delayxus_DS18B20 功能:DS18B20延时函数 参数:t为定时时间长度 返回:无 说明:延时公式:15n+15(近似),晶振12Mhz ****************************************** */ void Delayxus_DS18B20(unsigned int t) { for(t;t>0;t--) { _nop_();_nop_();_nop_();_nop_(); } _nop_(); _nop_();

DS18B20详细引脚功能描述

DS18B20详细引脚功能描述 (2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 (3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 (4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内 (5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ (6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 (7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms 内把温度值转换为数字,速度更快 (8)测量结果直接输出 数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 (9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 DS18B20 测温原理 DS18B20 测量温度时使用特有的温度测量技术。其内部的低温度系数振荡器能产生稳定的频率信号f0,高温度系数振荡器则将被测温度转换成频率信号f。当计数门打开时,DS18B20 对f0 计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以被偿。测量结果存入温度寄存器中。一般情况下的温度值应为9 位(符号点1位),但因符号位扩展成高8 位,故以16 位被码形式读出,表2 给出了温度和数字量的关系。

温度传感器选择DS18B20 优点 温度采集模块电路如下: 报警电路 : 报警模块由两个部分组成:蜂鸣器报警和LED 灯报警

ds18b20程序详解

#include #include #define uchar unsigned char #define uint unsigned int sbit DQ = P2^2; //数据口define interface sbit dula = P2^6; //数码管段选 sbit wela = P2^7; //数码管位选 uint temp; //温度值 variable of temperature //不带小数点 unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //带小数点 unsigned char code table1[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; /*************精确延时函数*****************/ void delay(unsigned char i) { while(--i); } /****************************************** 此延时函数针对的是12Mhz的晶振 delay(0):延时518us 误差:518-2*256=6 delay(1):延时7us (原帖写"5us"是错的) delay(10):延时25us 误差:25-20=5 delay(20):延时45us 误差:45-40=5 delay(100):延时205us 误差:205-200=5 delay(200):延时405us 误差:405-400=5 *******************************************/ /*****************DS18B20******************/ void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command { DQ = 1; //DQ复位,不要也可行。 delay(1); //稍做延时 DQ = 0; //单片机拉低总线 delay(250); //精确延时,维持至少480us DQ = 1; //释放总线,即拉高了总线

DS18B20数据手册-中文版[精品文档]

概述 DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能。DS18B20采用的1-Wire通信即仅采用一个数据线(以及地)与微控制器进行通信。该传感器的温度检测范围为-55℃至+125℃,并且在温度范围超过-10℃至85℃之外时还具有+-0.5℃的精度。此外,DS18B20可以直接由数据线供电而不需要外部电源供电。 每片DS18B20都有一个独一无二的64位序列号,所以一个1-Wire总线上可连接多个DS18B20设备。因此,在一个分布式的大环境里用一个微控制器控制多个DS18B20是非常简单的。这些特征使得其在HV AC环境控制,在建筑、设备及机械的温度监控系统,以及温度过程控制系统中有着很大的优势。 特性 ·独特的1-Wire总线接口仅需要一个管脚来通信。 ·每个设备的内部ROM上都烧写了一个独一无二的64位序列号。 ·多路采集能力使得分布式温度采集应用更加简单。 ·无需外围元件。 ·能够采用数据线供电;供电范围为3.0V至5.5V。 ·温度可测量范围为:-55℃至+125℃(-67℉至+257℉)。 ·温度范围超过-10℃至85℃之外时具有+-0.5℃的精度。 ·内部温度采集精度可以由用户自定义为9-Bits至12-Bits。 DS18B20 分辨率可编程 1-Wire数字温度传感器 ·温度转换时间在转换精度为12-Bits时达到最大值750ms。 ·用户自定义非易失性的的温度报警设置。·定义了温度报警搜索命令和当温度超过用户自定义的设定值时。 ·可选择的8-Pin SO (150 mils), 8-PinμSOP,及3-Pin TO-92封装。 ·与DS1822程序兼容。 ·应用于温度控制系统,工业系统, 民用产品,温度传感器,或者任何温度检测系统中。 管脚定义图

DS18B20的工作原理及应用(可编辑修改word版)

1.D S18B20的工作原理 ●①DS18B20 数字温度传感器概述 ●DS18B20 数字温度传感器是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 DS18B20 产品的特点 ●只要求一个端口即可实现通信。 ●在DS18B20 中的每个器件上都有独一无二的序列号。 ●实际应用中不需要外部任何元器件即可实现测温。 ●测量温度范围在-55.C 到+125.C 之间。 ●数字温度计的分辨率用户可以从9 位到12 位选择。 ●内部有温度上、下限告警设置。 TO-92 封装的DS18B20 的引脚排列见右图,其引脚功能描述见表 序号名称引脚功能描述 1 GND 地信号 2 DQ 数字输入输出引脚,开漏单总线接口引脚,当使用寄生 电源时,可向电源提供电源 3 VDD 可选择的VDD 引脚,当工作于寄生电源时,该引脚必须 接地 表3-2 DS18B20 详细引脚功能描述 ②DS18B20 的内部结构 DS18B20的内部框图下图所示,DS18B20 的内部有64 位的ROM 单元,和9 字节的暂存器单元。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(T H)和下线警报触发(TL)寄存器(2和3 字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC )。使用寄生电源时,DS18B20 不需额外的供电电源;当总线为高电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容CPP充电,CPP在总线低电平时为器件供电。(字节5~8 就不用看了)。

DS18B20原理与分析

DS18B20原理与分析 DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 1.DS18B20简介 (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0~ +5.5 V。 (4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。 (5)通过编程可实现9~12位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 DS18B20的测温原理 DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小〔1〕,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个

DS18B20应用篇详细解说

板外的第一个扩展——DS18B20温度测量(1)理论知识 DS18B20数字温度测量传感器,网上介绍很多,我就不罗嗦了。见图 DS18B20与前产品DS1820的不同: DS18B20继承了DS1820的全部优点,并做了如下改进1.供电范围扩大为3.0--5.5V。2.温度分辨力可编程。3.转换速率有很大提高.4.内部存储器映射关系发生变化。5.具有电源反接保护电路。5.体积减小一半。对我们使用来说最大的不同就是DS18B20可以程序设定9~12位的分辨率数字值,而DS1820为固定的9位数字值,且温度转换时的延时时间由2s减为750ms。。 电路的接法: DS18B20说明书上介绍了几种电路的接法,但我这里就说最常用的一种接法见图: 先介绍一下DS18B20内部的结构: 常规的内部逻辑图我就不说了,只说说跟我们使用直接相关的内容。 DS18B20的内部存储资源分为8个字节的ROM、9个字节的RAM、3个字节的EEPROM如下图: 一、ROM: 在DS18B20内部光刻了一个长度为64bit的ROM,这个编码是器件的身份识别标志。如下图:

64位光刻ROM的排列是:开始(最低)8位是产品类型标号,对于DS18B20来说就是(28H),接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 二、RAM: 高速暂存存储器(RAM)由9个字节组成,包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是温度高限TH、温度低限TL暂存区,第五个字节是配置寄存器暂存区,第6、7、8字节是系统保留用,就相当于DS18B20的运算内存,第九个字节是冗余检验字节。其分配如下表所示。 ①、第0和第1字节: 当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。看下图

ds18b20温度传感器原理

湿度传感器的分类 湿度传感器分类 按工作原理:电阻型 --根据相对湿度的变化,产生相应的改变阻值典型产品HS1101 电容性 -- 根据相对湿度的变化,产生相应的改变容值典型产品C5-M3 按输出方式: 元件类--- 输出电阻或者电容信号,线性不太好,需要做后期处理,放大电路才能使用,例如HS1101,C5-M3,VH-01,CL-H003等等 模块类--- 输出线性的电压或频率信号,一般是5VDC供电。例如 HF3226,HM1500,HIH4000,RHU223,RHU222,VHM- 10等等。 变送器--- 带外壳,12~30VDC供电,线性输出0~5/10VDC,4~20mA RS485,一般都是温湿度一体的,例如VHT-1,VHT-2 系列,可直接用于工程安装现场。 DS18B20数字温度计使用 DS18B20数字温度计使用 1.DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 1、DS18B20产品的特点 (1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55。C到+125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。 2、DS18B20的引脚介绍 TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。 (底视图)图1

DS18B20中文资料

Skyle 整理----skyle@https://www.360docs.net/doc/a16189182.html,-----有不对之处请来信指正 数字温度传感器DS1820(DS18B20)的应用 一 单线数字温度计DSl820介绍 DSl820数字温度计提供9位(二进制)温度读数指示器件的温度信息经过单线接口送 入DSl820或从DSl820送出因此从主机CPU 到DSl820仅需一条线(和地线)DSl820的电源可以由数据线本身提供而不需要外部电源因为每一个DSl820在出厂时已经给定了唯一的序号因此任意多个DSl820可以存放在同一条单线总线上这允许在许多不同的地方放置温度敏感器件DSl820的测量范围从-55到 +125增量值为 0.5可在l s(典型值)内把温度变换成数字 每一个DSl820包括一个唯一的64位长的序号该序号值存放在DSl820内部的ROM(只读存贮器)中开始8位是产品类型编码(DSl820编码均为10H)接着的48位是每个器件唯一的序号最后8位是前面56位的CRC(循环冗余校验)码DSl820中还有用于贮 存测得的温度值的两个8位存贮器RAM 编号为0号和1号1号存贮器存放温度值的符号如果温度为负()则1号存贮器8位全为1否则全为00号存贮器用于存 放温度值的补码LSB(最低位)的1表示0.5 将存贮器中的二进制数求补再转换成十进制数并除以2就得到 被测温度值(-550 125)DSl820的引脚如图226l 所示每只D51820都可以设置成两种供电方式即数据 总线供电方式和外部供电方式采取数据总线供电方式可以节省一根导线但完成温度测量的时间较长采取外部供电方式则多用一根导线但测量速度较快 温度计算 1 Ds1820用9位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度 S=1正温度S=0 如 00AAH 为+85,0032H 为25FF92H 为55 2Ds18b20用12位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度S=1正温度S=0如 0550H 为 +85 0191H 为25.0625,FC90H 为-55 w w w .t a i -y a n . c o m /b b s

DS18B20工作原理

DS18B20工作原理简介 美国Dallas半导体公司的数字化温度传感器DS18B20是世界上第一 片支持“一线总线”接口的温度传感器,在其内部使用了在板 (ON-BOARD)专利技术。全部传感器元件及转换电路集成在形如一 只三极管的集成电路内。一线总线独特而经济的特点,使用户可轻松 的组建传感器网络,为测量系统的构建引入全新概念。现在,新一代 的DS18B20体积更小,更经济,更灵活。使你可以发挥“一线总线” 的优点。 在传统的模拟信号远距离温度测量系统中,需要很好地解决引线误 差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等 技术问题,才能够达到较高的测量精度。另外一般监控现场的电磁环 境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产 生测量误差,影响测量精度。因此,在温度测量系统中,采用抗干扰 能力强的新型数字温度传感器DS18B20体积小、精度更高、适用电压 更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测 温效果。 DS18B20的主要特征:(1)全数字温度转换及输出。(2)先进的单总线数据通信。(3)最高12位分辨率,精度可达土0.5摄氏度。(4) 12位分辨率时的最大工作周期为750毫秒。(5)可选择寄生工作方(6)检测温度范围为–55°C~+125°C (–67°F ~+257°F)(7)内置EEPROM,式。 限温报警功能。(8)64位光刻ROM,内置产品序列号,方便多机挂 接。(9)多样封装形式,适应不同硬件系统。

二、DS18B20的外形和内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图1: DS18B20引脚定义: (1)D Q为数字信号输入/输出端; (2)G ND为电源地; (3)V DD为外接供电电源输入端(在寄生电源接线方式时接地)。

相关文档
最新文档