汇编DS18b20分辨率为0.0625
单总线温度传感器DS18B20简介
单总线温度传感器DS18B20简介DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统。
DS18B20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
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.c//** 说明:DS18B20驱动程序文件//----------------------------------------------------------------------//** 单位://** 创建人:张雅//** 创建时间:2010-01-20//** 联系方式:QQ:276564402//** 版本:V1.0//----------------------------------------------------------------------//**********************************************************************//----------------------------------------------------------------------//** 芯片:AT89S52//** 时钟:11.0592MHz//** 其它:这个文档为18B20的驱动程序,引用了数码管的驱动。
温度传感器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位精度。
DS18B20介绍
简述DS18B20一·DS18B20的概述.DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化,低功耗,高性能,抗干扰能力强,易配微处理器等优点,可直接将温度转化成数字信号处理器处理。
测量的温度范围是—55~125℃,测温误差0.5℃。
可编程分辨率9~12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和0.0625℃。
相较热电偶传感器而言可实现高精度测温。
对热电偶温度传感器来说该项目实现的过程为:靠光敏电阻检测光照的大小,光的改变最终改变电阻的大小,给电阻外加一个电压,就改变了电压的大小,再用PCF8951AD转换器件检测电压的变化并转换为数字信号,再传到单片机上作一定的处理后去控制相应的数码管显示出当时的温度。
而对DS18B20来说过程则简单的多了,热电偶电阻传感器一直到单片机之前的部分都可以用一个DS18B20来代替了,真正的实现了数字化。
单片机后面的部分则两者是一样的!DS18B20与热电阻温度传感器相比价格上,来说要贵出很多!所以在温度的测量精度要求不是很高的话可以选择热电阻温度传感器,实验者应则情而定。
二.DS18B20的硬件介绍.1.硬件实物图及硬件原理图如下.三脚TO-92实物图:硬件原理图:八脚soic贴片式DS18B20:2.两种管脚排列图:3. 型号规格型号范围螺纹电缆长度适用管道TS-18B20 -55~125 无1.5 mTS-18B20A -55~125 M10X1 1.5m DN15~25TS-18B20B -55~125 1/2”G 接线盒DN40~ 604存储器DS18B20的存储器包括高速暂存器RAM和可电擦除RAM,可电擦除RAM又包括温度触发器TH和TL,以及一个配置寄存器。
存储器能完整的确定一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数字。
数字温度传感器DS18B20资料
一、DS18B20特点1.单线结构,只需一根信号线和CPU相连。
2. 不需要外部元件,直接输出串行数据。
3. 可不需要外部电源,直接通过信号线供电,电源电压范围为3.3V~5V。
4.测温精度高,测温范围为:一55℃~+125℃,在-10℃~+85℃范围内,精度为±O.5℃。
5.测温分辨率高,当选用12位转换位数时,温度分辨率可达0.0625℃。
6.数字量的转换精度及转换时间可通过简单的编程来控制:9位精度的转换时间为93.75 ms:10位精度的转换时间187.5ms:12位精度的转换时间750ms。
7.具有非易失性上、下限报警设定的功能,用户可方便地通过编程修改上、下限的数值。
8.可通过报警搜索命令识别哪片DS18820采集的温度超越上、下限。
二、DS18B20引脚及管脚功能介绍DS18B20的常用封装有3脚、8脚等几种形式,如图1所示。
各脚含义如下:DQ:数字信号输入/输出端。
GND:电源地端。
VDD:外接供电电源输入端(在寄生电源接线时此脚应接地)。
三、DS18B20内部结构简要介绍:DS18820的内部结构如图3所示:主要有64位光刻ROM、温度传感器、非易失性温度报警触发器TH和TL、配置寄存器等组成。
1.64位光刻ROM是生产厂家给每一个出厂的DS18820命名的产品序列号,可以看作为该器件的地址序列号。
其作用是使每一个出厂的DS18820地址序列号都各不相同,这样,就可以实现一根总线上挂接多个DS18820的目的。
2.DS18820中的温度传感器完成对温度的测量,输出格式为:16位符号扩展的二进制补码。
当测温精度设置为12位时,分辨率为O.0625℃,即O.0625℃/LSB。
其二进制补码格式如图2所示。
其中,S为符号位,S=1,表示温度为负值;S=0,表示温度为正值。
例如+125℃的数字输出为07D0H,-55℃的数字输出为FC90H。
一些温度值对应的数字输出如图4所示。
stm32--温度传感器DS18B20使用
void Delay_us(u32 Nus)
{
SysTick->LOAD=Nus*9;
//时间加载
SysTick->CTRL|=0x01;
//开始倒数
while(!(SysTick->CTRL&(1<<16))); //等待时间到达
SysTick->CTRL=0X00000000;
//关闭计数器
SysTick->VAL=0X00000000;
//清空计数器
}
unsigned char ResetDS18B20(void) { unsigned char resport; SetDQ(); Delay_us(50);
ResetDQ(); Delay_us(500); //500us (该时间的时间范围可以从480到960微秒) SetDQ(); Delay_us(40); //40us //resport = GetDQ(); while(GetDQ()); Delay_us(500); //500us SetDQ(); return resport; }
void DS18B20WriteByte(unsigned char Dat) { unsigned char i; for(i=8;i>0;i--) {
ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数 Delay_us(5); //5us if(Dat & 0x01) SetDQ(); else ResetDQ(); Delay_us(65); //65us SetDQ(); Delay_us(2); //连续两位间应大于1us Dat >>= 1; } }
AAA_ds18b20汇编
DS18B20汇编程序硬件接线图程序代码:/*DS18B20汇编程序,精确到0.0625摄氏度。
P3.7为数据总线时间调用时先置TIME单元*/DBUS BIT P3.7 ;单总线接口DA TL EQU 30H ;低位暂存单元DA TH EQU 31H ;高位暂存单元DA TET EQU 32H ;低位高四位与高位低四位的整合单元暂存DA TEN EQU 33HTEMPGE EQU 34H ;TEMPSHI EQU 35HTEMPBAI EQU 36HXIAOSHU EQU 37HXIAOSHU2 EQU 38HXIAOSHU3 EQU 39HXIAOSHU4 EQU 3AHWDATE EQU 45HTIME EQU 50HJISHU EQU 51HORG 0000HJMP MAIN18b20ORG 0100HMAIN18b20: MOV R2,#8MOV R0,#40H ;将从40H开始的8个单元清零。
OVER: MOV @R0,#00HINC R0DJNZ R2,OVERCALL MAIN1CALL DISPLAY18B20JMP MAIN18B20MAIN1: C ALL INTIJNB F0,MAIN18B20 ;如果没有应答,返回主程序MOV WDATE,#0CCHCALL WRITE_1820MOV WDATE,#044HCALL WRITE_1820CALL INTIMOV WDATE,#0CCHCALL WRITE_1820MOV WDATE,#0BEHCALL WRITE_1820CALL RADE_1820MOV DATL,DA TET;MOV P1,DATL ;测试低位字节CALL RADE_1820MOV DATH,DATETCALL DELTEMPRETINTI: SETB DBUSNOPNOPNOPCLR DBUSMOV R6,#250 ;主机发复位脉冲持续3μs×200=600μs DJNZ R6,$MOV R6,#50DJNZ R6,$SETB DBUS ;主机释放总线,口线改为输入MOV R6,#15DJNZ R6,$CALL CHCK ;调用应答检查程序CHCK1:MOV R6,#60SETB DBUSRETCHCK:MOV C,DBUSJC RST0SETB F0 ;检测到信号,置位F0SJMP CHCK1RST0:CLR F0 ;未准备好F0复位CHCK0:RET;写数据子程序WRITE_1820:MOV A,WDA TE;MOV R5,#8SEN3:CLR CRRC AJC SEN1LCALL WRITE_0SJMP SEN2SEN1:LCALL WRITE_1SEN2:DJNZ R5,SEN3 ;循环8次,写一个字节RETRADE_1820: ;读一个字节程序MOV R5,#8READ1:LCALL READRRC ADJNZ R5,READ1 ; 循环8次,读一个字节MOV DATET,ARETREAD: SETB DBUS ;先复位至少1US产生读起始信号NOPNOPCLR DBUSNOPNOPSETB DBUS ;置位DAT准备接收数据DJNZ R6,$MOV C,DBUSMOV R6,#31DJNZ R6,$RETWRITE_0: ;写0CLR DBUSMOV R6,#30DJNZ R6,$SETB DBUSRETWRITE_1:CLR DBUS ;写1NOPSETB DBUSMOV R6,#30DJNZ R6,$RET;数据整合DELTEMP:MOV A,DATH ;判断是否为负数ANL A,#0F0HJNZ FUZHI1JMP LOOPDFUZHI1: LJMP FUZHI;正数的转换;正小数的算法.....(X)/16...."X"代表温度低字节中的高4为值LOOPD: MOV A,DATLANL A,#0FHZHU0: CJNE A,#0,ZHU1 ;这些赋值很具很大的ROM,但有个好处就是抗干扰能力强,如果想节约的话就使用间接寻址吧MOV XIAOSHU,#0 ;后面我补充了间接寻址的程序MOV XIAOSHU2,#0MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEZHU1: CJNE A,#1,ZHU2MOV XIAOSHU2,#6MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEZHU2: CJNE A,#2,ZHU3 MOV XIAOSHU,#1MOV XIAOSHU2,#2MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEZHU3: CJNE A,#3,ZHU4 MOV XIAOSHU,#1MOV XIAOSHU2,#8MOV XIAOSHU3,#7MOV XIAOSHU4,#5JMP ZHUJIEZHU4: CJNE A,#4,ZHU5 MOV XIAOSHU,#2MOV XIAOSHU2,#5MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEZHU5: CJNE A,#5,ZHU6 MOV XIAOSHU,#3MOV XIAOSHU2,#1MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEZHU6: CJNE A,#6,ZHU7 MOV XIAOSHU,#3MOV XIAOSHU2,#7MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEZHU7: CJNE A,#7,ZHU8 MOV XIAOSHU,#4MOV XIAOSHU2,#3MOV XIAOSHU4,#5JMP ZHUJIEZHU8: CJNE A,#8,ZHU9 MOV XIAOSHU,#5MOV XIAOSHU2,#0MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEZHU9: CJNE A,#9,ZHU10 MOV XIAOSHU,#5MOV XIAOSHU2,#6MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEZHU10: CJNE A,#10,ZHU11 MOV XIAOSHU,#6MOV XIAOSHU2,#2MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEZHU11: CJNE A,#11,ZHU12 MOV XIAOSHU,#6MOV XIAOSHU2,#8MOV XIAOSHU3,#7MOV XIAOSHU4,#5JMP ZHUJIEZHU12: CJNE A,#12,ZHU13 MOV XIAOSHU,#7MOV XIAOSHU2,#5MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEZHU13: CJNE A,#13,ZHU14 MOV XIAOSHU,#8MOV XIAOSHU2,#1MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEZHU14: CJNE A,#14,ZHU15MOV XIAOSHU,#8MOV XIAOSHU2,#7MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIE;ZHU01: LJMP ZHU0ZHU15: CJNE A,#15,ZHUJIE;ZHU01MOV XIAOSHU,#9MOV XIAOSHU2,#3MOV XIAOSHU3,#7MOV XIAOSHU3,#5ZHUJIE: MOV A,DATLANL A,#0F0HSWAP AMOV DATL,AMOV A,DATHANL A,#0FHMOV DATH,ASWAP AORL A,DATLMOV DATEN,AMOV B,#100DIV ABMOV TEMPBAI,AMOV A,BMOV B,#10DIV ABMOV TEMPSHI,AMOV TEMPGE,BRET;负数的转换FUZHI:;负小数的算法.....先分离低四位,再取反加一MOV A,DATLANL A,#0FHXRL A,#0FH ;取反INC AZHUF0: CJNE A,#0,ZHUF1MOV XIAOSHU,#0MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEFZHUF1: CJNE A,#1,ZHUF2 MOV XIAOSHU,#0MOV XIAOSHU2,#6MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEFZHUF2: CJNE A,#2,ZHUF3 MOV XIAOSHU,#1MOV XIAOSHU2,#2MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEFZHUF3: CJNE A,#3,ZHUF4 MOV XIAOSHU,#1MOV XIAOSHU2,#8MOV XIAOSHU3,#7MOV XIAOSHU4,#5JMP ZHUJIEFZHUF4: CJNE A,#4,ZHUF5 MOV XIAOSHU,#2MOV XIAOSHU2,#5MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEFZHUF5: CJNE A,#5,ZHUF6 MOV XIAOSHU,#3MOV XIAOSHU2,#1MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEFZHUF6: CJNE A,#6,ZHUF7 MOV XIAOSHU,#3MOV XIAOSHU2,#7MOV XIAOSHU3,#5JMP ZHUJIEFZHUF7: CJNE A,#7,ZHUF8 MOV XIAOSHU,#4MOV XIAOSHU2,#3MOV XIAOSHU3,#7MOV XIAOSHU4,#5JMP ZHUJIEFZHUF8: CJNE A,#8,ZHUF9 MOV XIAOSHU,#5MOV XIAOSHU2,#0MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEFZHUF9: CJNE A,#9,ZHUF10 MOV XIAOSHU,#5MOV XIAOSHU2,#6MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEFZHUF10: CJNE A,#10,ZHUF11 MOV XIAOSHU,#6MOV XIAOSHU2,#2MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEFZHUF11: CJNE A,#11,ZHUF12 MOV XIAOSHU,#6MOV XIAOSHU2,#8MOV XIAOSHU3,#7MOV XIAOSHU4,#5JMP ZHUJIEFZHUF12: CJNE A,#12,ZHUF13 MOV XIAOSHU,#7MOV XIAOSHU2,#5MOV XIAOSHU3,#0MOV XIAOSHU4,#0JMP ZHUJIEFZHUF13: CJNE A,#13,ZHUF14MOV XIAOSHU,#8MOV XIAOSHU2,#1MOV XIAOSHU3,#2MOV XIAOSHU4,#5JMP ZHUJIEFZHUF14: CJNE A,#14,ZHUF15MOV XIAOSHU,#8MOV XIAOSHU2,#7MOV XIAOSHU3,#5MOV XIAOSHU4,#0JMP ZHUJIEF;ZHU01: LJMP ZHU0ZHUF15: CJNE A,#15,ZHUJIEF;ZHU01MOV XIAOSHU,#9MOV XIAOSHU2,#3MOV XIAOSHU3,#7MOV XIAOSHU3,#5ZHUJIEF: MOV A,DATLANL A,#0F0HSWAP AMOV DATL,AMOV A,DATHANL A,#0FHMOV DATH,ASWAP AORL A,DATLMOV DATEN,A;开始转换为负数显示MOV A,#255SUBB A,DATENINC AMOV B,#100DIV ABMOV TEMPBAI,#10 ;负数百位为"-"MOV A,BMOV B,#10DIV ABMOV TEMPSHI,ARETDISPLAY18B20:MOV DPTR,#TAB18B20MOV A,TEMPBAISUBB A,#10 ;判断是否为负数,如果是负数,则显示百位中的负号JZ FUHAO1MOV A,TEMPBAIJZ KONGBAI ;如果正数百位为"0",则最高位不显示FUHAO1: MOV A,TEMPBAIMOVC A,@A+DPTRMOV P0,AMOV P2,#00HJMP NKONGBKONGBAI:MOV P0,#0FFHMOV P2,#00HMOV TIME,#10CALL TIMEDLMOV A,TEMPSHIJZ KONGSHI ;如果正数十位为"0",则最高位不显示NKONGB: MOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,TEMPSHIMOVC A,@A+DPTRMOV P0,AJMP NKONGS ;"NKONGS"代表正数时为"0"时空起来KONGSHI:MOV P0,#0FFHNKONGS: MOV TIME,#10MOV P2,#04HCALL TIMEDLMOV P0,#0FFHMOV A,TEMPGEMOVC A,@A+DPTRANL A,#7FHMOV P0,AMOV P2,#08HMOV TIME,#10CALL TIMEDLMOV A,XIAOSHUMOVC A,@A+DPTRMOV P0,AMOV P2,#0CHMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU2MOVC A,@A+DPTRMOV P0,AMOV P2,#10HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU3MOVC A,@A+DPTRMOV P0,AMOV P2,#14HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU4MOVC A,@A+DPTRMOV P0,AMOV P2,#18HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV P0,#10100111B ;写"C" MOV P2,#1CHMOV TIME,#10CALL TIMEDLMOV P0,#0FFHRETTIMEDL: ;延时由TIME单元决定DELS1: MOV R7,#50DJNZ R7,$DJNZ TIME,DELS1RETTAB18B20: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0ffh;"0BFH"是显示负数时"-"号的段码END/*;数据整合DELTEMP:MOV DPTR,#XIAOTABMOV A,DATH ;判断是否为负数ANL A,#0F0HJNZ FUZHI1JMP LOOPFUZHI1: JMP FUZHI;正数的转换;正小数的算法.....(X)/16...."X"代表温度低字节中的高4为值LOOP:MOV R0,#37HMOV A,DATLANL A,#0FHMOV B,#4MUL ABMOV R5,AMOV R4,#4LOP1: MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R0INC R5DJNZ R4,LOP1ZHUJIE: MOV A,DATLANL A,#0F0HSWAP AMOV DATL,AMOV A,DATHANL A,#0FHMOV DATH,ASWAP AORL A,DATLMOV DATEN,AMOV B,#100DIV ABMOV TEMPBAI,AMOV A,BMOV B,#10DIV ABMOV TEMPSHI,AMOV TEMPGE,BRET;负数的转换FUZHI:;负小数的算法.....先分离低四位,再取反加一MOV A,DATLANL A,#0FHXRL A,#0FH ;取反INC AMOV B,#4MUL ABMOV R5,AMOV R4,#4LOPF1: MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R0INC R5DJNZ R4,LOPF1MOV A,DATLANL A,#0F0HSWAP AMOV DATL,AMOV A,DATHANL A,#0FHMOV DATH,ASWAP AORL A,DATLMOV DATEN,A;开始转换为负数显示MOV A,#255SUBB A,DATENINC AMOV B,#100DIV ABMOV TEMPBAI,#10 ;负数百位为"-"MOV A,BMOV B,#10DIV ABMOV TEMPSHI,AMOV TEMPGE,BRETDISPLAY:MOV DPTR,#TABMOV A,TEMPBAISUBB A,#10 ;判断是否为负数,如果是负数,则显示百位中的负号JZ FUHAO1MOV A,TEMPBAIJZ KONGBAI ;如果正数百位为"0",则最高位不显示FUHAO1: MOV A,TEMPBAIMOVC A,@A+DPTRMOV P0,AMOV P2,#00HJMP NKONGBKONGBAI:MOV P0,#0FFHMOV P2,#00HMOV TIME,#10CALL TIMEDLMOV A,TEMPSHIJZ KONGSHI ;如果正数十位为"0",则最高位不显示NKONGB: MOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,TEMPSHIMOVC A,@A+DPTRMOV P0,AJMP NKONGS ;"NKONGS"代表正数时为"0"时空起来KONGSHI:MOV P0,#0FFHNKONGS: MOV TIME,#10MOV P2,#04HCALL TIMEDLMOV P0,#0FFHMOV A,TEMPGEMOVC A,@A+DPTRANL A,#7FHMOV P0,AMOV P2,#08HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHUMOVC A,@A+DPTRMOV P0,AMOV P2,#0CHMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU2MOVC A,@A+DPTRMOV P0,AMOV P2,#10HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU3MOVC A,@A+DPTRMOV P0,AMOV P2,#14HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV A,XIAOSHU4MOVC A,@A+DPTRMOV P0,AMOV P2,#18HMOV TIME,#10CALL TIMEDLMOV P0,#0FFHMOV P0,#10100111B ;写"C" MOV P2,#1CHMOV TIME,#10CALL TIMEDLMOV P0,#0FFHRETTIMEDL:D1: MOV R7,#50DJNZ R7,$DJNZ TIME,D1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0ffh;"0BFH"是显示负数时"-"号的段码XIAOTAB: DB 0,0,0,0,0,6,2,5DB 1,2,5,0,1,8,7,5DB 2,5,0,0,3,1,2,5DB 3,7,5,0,4,3,7,5DB 5,0,0,0,5,6,2,5DB 6,2,5,0,6,8,7,5DB 7,5,0,0,8,1,2,5DB 8,7,5,0,9,3,7,5END*/硬件实物图:。
DS18B20简介
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 ℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
基于图 1 的框图介绍,我们可以清楚的了解到语音温度计设计的几个模块。
亿学通电子 DS18B20 温度传感器使用手册
1) DS18B20 是DALLAS 公司生产的一线制数字温度传感器; 2) 具有3 引脚TO-92 小体积封装形式; 3) 温度测量范围为-55℃~+125℃; 4) 电源供电范围为3V~5.5V ; 5) 可编程为9 位~12 位数字表示;6) 测温分辨率可达0.0625℃,被测温度用符号扩展的16 位数字量方式串行输出;7) 其工作电源既可在远端引入,也可采用寄生电源方式产生;8) 多个DS18B20 可以并联到3 根(VDD、DQ 和GND)或2 根(利用DQ 线供电、GND)线上,CPU 只需一根端口线就能与总线上的多个串联的DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
TO-92封装的DS18B20DS18B20 的管脚排列及不同封装形式如图 2所示,DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地,见),NC 表示无连接。
管脚图DS18B20内部结构如图3所示,主要由4 部分组成:64 位ROM 、温度传感器、非易失性存储的温度报警触发器TH 和TL 、配置寄存器。
DS18B20管脚DS18B20概述DS18B20内部结构图非常适用于远距离多点温度检测系统。
DQ-数据输入输出。
漏极开路1 线接口。
也在寄生电源模式时给设备提供电源。
访问DS18B20 的顺序如理初始化;DS18B20读写 连接图应用领域ROM 命令(接着是任何需要的数据交换);DS18B20 函数命令(接着是任何需要的数据交换)。
每一次访问DS18B20 时必须遵循这一顺序,如果其中的任何一步缺少或打乱它们的顺序,DS18B20 将不会响应。
(1)初始化时序所有与DS18B20 的通信首先必须初始化:控制器发出复位脉冲,DS18B20 以存在脉冲响应。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口进行通信。
它基于热敏电阻原理,可以测量环境温度,并将温度转换为数字信号输出。
DS18B20传感器由三个主要部分组成:热敏电阻、数字转换器和总线接口。
热敏电阻是DS18B20的核心部分。
它是一种特殊的电阻,其电阻值随温度的变化而变化。
热敏电阻通常由铜、镍或铂等材料制成。
DS18B20使用的热敏电阻是由铜和镍合金制成的。
数字转换器是将热敏电阻的电阻值转换为数字信号的部分。
DS18B20使用的数字转换器采用了Delta-Sigma技术,它可以将连续的模拟信号转换为数字信号。
数字转换器将热敏电阻的电阻值转换为二进制码,并通过总线接口发送给主控制器。
总线接口是DS18B20与主控制器之间的通信通道。
DS18B20采用单总线接口,这意味着只需要一条数据线来进行通信。
总线接口使用了一种特殊的通信协议,称为1-Wire协议。
在1-Wire协议中,主控制器通过发送特定的命令来读取DS18B20传感器的温度值。
DS18B20传感器的工作原理如下:1. 初始化:主控制器发送初始化命令,DS18B20传感器接收到命令后进入初始化状态。
2. 转换开始:主控制器发送转换开始命令,DS18B20传感器开始测量环境温度。
3. 转换完成:DS18B20传感器完成温度测量后,将温度值转换为数字信号,并通过总线接口发送给主控制器。
4. 读取温度值:主控制器发送读取温度值命令,DS18B20传感器将数字信号发送给主控制器。
5. 解析温度值:主控制器接收到数字信号后,将其解析为实际温度值。
DS18B20传感器的温度分辨率可以通过配置寄存器进行设置,通常可以达到0.0625°C的分辨率。
DS18B20传感器具有以下特点:1. 精度高:DS18B20传感器的温度测量精度可以达到±0.5°C。
2. 数字输出:DS18B20传感器输出的是数字信号,可以直接与数字系统进行通信。
DS18B20高精度测温
delay1820(200); //精确延时 大于 480us
DQ = 1; //拉高总线
delay1820(60);
delay1820(20);
DQ=1;
}
//------------------读一个字节 -------------------------
b=ReadOneChar(); //读取温度值高位
DQ=1;
g=a;
g=b<<8; //最终数据在a和b中,怎么处理你自己用吧 呵呵
g=g|a;
re=g*0.0625;//选用的精度为 0.0625
return re;
}
/**************************************************************************************************************************/
{
Init_DS18B20();
WriteOneChar(0xcc); //skip rom
WriteOneChar(0x4e); //write scratchpad
WriteOneChar(0x55); //上限 TH 85度
WriteOneChar(0x00); //下限 TL
/******************************************************************************************************************/
// 文件1/2(end)
DS18B20介绍、流程图和程序源代码
DS18B20单线数字温度传感器DALLAS半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,体积更小、适用电压更宽、更经济。
一线总线独特而且经济的特点,使用户可轻松地组建温度传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822 “一线总线”数字化温度传感器同DS1820一样,支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C,而DS1822的精度较差为± 2°C 。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C,分辨率设定,以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS1822与DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
1、 DS18B20性能特点DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。
DS18B20温度传感器详解带c程序
00A2H
+0.5
0000 0000 0000 000
0000H
-0.5
1111 1111 1111 1000
FFF8H
-10.125
1111 1111 0110 1110
FF5EH
-25.0625
1111 1110 0110 1111
FF6FH
-55 执行序列与介绍 3.1 执行序列
duan=1; switch(i) {
case 0: if(zf==0) P1=numfh[zf];
else if(bai!=0) P1=numd[bai]; else if(shi!=0) P1=numd[shi]; else P1=numdg[ge]; break;
case 1: if(zf==0&&shi!=0) P1=numd[shi];
表 3.2 DS18B20 温度/数字对应关系表
温度(℃)
输出的二进制码
对应的十六进制码
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+25.0625
0000 0001 1001 0001
0191H
+10.125
0000 0000 1010 0010
uchar x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); } /******************15us 延时函数****************/ void delay(uint z) {
while(z--); } /******************初始化 DS18B20 函数****************/ void reset_ds18b20() {
温度传感器DS18B20
注: (1)温度以补码形式 存放; (2)9位分辨率时, 得到的十进制数乘 以0.5;10位分辨率 乘0.25;11位分辨率 乘0.125
温度/数据关系表
DS18B20的配置寄存器
通过设置配置寄存器的R0、R1来确定精度。
DS18B20的主要部件
1)64位光刻ROM 2)温度灵敏元件 3)非易失性温度告警触发器TH和TL
64位光刻ROM
出厂前被光刻好。 低8位为产品类型号:单线系列编码(DS18B20为 19H) 中间48位为产品唯一的序列号 高8位是前面56位的CRC循环冗余校验码 光刻ROM的作用:使每一个DS18B20各不相同,这 样可以实现一个总线上挂接多个DS18B20。
温度传感器DS18B20
DS18B20器件引脚
DS18B20是美国DALLAS公司推出的第一片支持 “一线总线”接口的温度传感器。 引脚:
八脚贴片式封装
引脚 GND
DQ VDD
定义 电源负极
信号输入输出 电源正极 空
三脚直插式封装
NC
DS18B20的主要特性
独特的单线接口方式,只需一个引脚即可通信 不需要外部元件 可用数据线供电,不需备份电源(寄生电源工作方式) 测温范围:-55 ℃~+125 ℃ 可编程分辨率为9~12位,对应的可分辨温度分别为0.5 ℃、0.25 ℃、0.125 ℃、0.0625 ℃。 内置EEPROM,限温报警功能 64位光刻ROM,内置产品序列号,方便多机挂接 负压特性。电源接反时,芯片不会烧毁,但不能正常工 作
DS18B20的连接介绍
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55℃~+125℃,在-10℃~+85℃范围内,精度为0.5℃。
DS18B20的精度较差为±0.2℃。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量。
如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的“DS1820”体积更小、更经济、更灵活。
使您可以充分发挥“一线总线”的长处。
DS18B20、DS1822 “一线总线”数字化温度传感器。
由于DS18B20将温度传感器、信号放大调理、A/D转换、接口全部集成于一芯片,与单片机连接简单、方便,与AD590相比是更新一代的温度传感器,所以温度传感器采用DS18B20。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
18B20数字温度显示系统
CALL T1MS
MOV P0,43H
ORL P0,#40H
MOV TH0,#LOW(65536-10000) ;定时器10MS中断
MOV TL0,#HIGH(65536-10000)
RETI
T1MS: mov r5,#00h ;延时子程序
tt: mov r6,#9
djnz r6,$
;温度转换程序:精确到:0.06 ;
TRANS12:MOV A,30H
ANL A,#0F0H
MOV 3AH,A
MOV A,31H
ANL A,#0FH
ORL A,3AH
SWAP A
MOV B,#10
DIV AB
MOV 43H,A
MOV 42H,B ;
MOV DPTR,#TABB
MOV A,30H
ANL A,#0FH
NOP
NOP
NOP
NOP
NOP
SETB DAT
MOV R6,#30
DJNZ R6,$
RET
;读一位数据程序
READ: SETB DAT ;先复位至少1US产生读起始信号
NOP
NOP
CLR DAT
NOP
NOP
SETB DAT ;置位DAT准备接收数据
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DAT
4、用一条4PIN的排线,把JP22接到P0口的JP51的P0.4,P0.5,P0.6,07四个端口。(即插入P0口的下半部份)。
5、用一条8PIN的排线。把38译码部份的输出端JP25,接到数码管部份的显示位口JP8。
在本系统中,为了简化程序,采用了74LS47(数码管译码)74LS138(三八译码)。即P0口的P0.0,P0.1,P0.2,P0.3四个端口接到74LS47进行硬件数码管译码,然后输出到数码管部分的数据口JP5。P0.4,P0.5,P.0.6三个端口接到74LS138进行38译码,然后输出到数码管的位控制JP8.
DS18B20
基于单总线器件DS18B20的温度测量仪发布时间:2009-8-3 阅读次数:228 字体大小: 【小】【中】【大】1 引言许多情况下需要测量温度参数。
通常测温系统的主要器件是热敏电阻,由于它体积小、重复性好、测量方法简单,所以在测温系统中广泛应用。
但采用热敏电阻的测温系统需要A/D转换,而且测量精度不高。
本文采用Dallas公司生产的一种新型温度传感器DS18B20,它集温度测量、A/D转换于一体,其测量范围宽(-55℃~+125℃),精度高(0.0625℃),DS18B20是一款具有单总线结构的器件。
由DS18B20组建的温度测量单元体积小,便于携带、安装。
同时,DS18B20的输出为数字量,可以直接与单片机连接,无需后级A/D转换,控制简单。
由于DS18B20具有单总线特性,便于扩展,可在一根总线上挂接多个DS18B20来组建温度测量网络。
2 硬件电路设计本系统设计采用 Mega8单片机控制DS18B20,由显示电路显示当前温度。
其系统硬件电路如图1所示。
Atmel 的Mega8单片机采用RTSC(精简指令集),指令执行速度快,内嵌8 KB Flash程序存储器,支持ISP(在系统编程),片内含有大容量的RAM区,具有SPT总线、I2C总线、ADC功能。
Mega8单片机体积小,功能强,具有PDIP-28封装及TQFP封装。
DS18B20采用单总线方式和Mega8单片机相连,即DS18B20的1引脚和3引脚接地,2引脚通过一只240 Ω的电阻接至Mega8的PB7引脚,同时将PB7引脚采用一只4.7 kΩ的电阻上拉至VCC。
单总线即只用一根信号线,既供电,又传输数据,而且数据传输是双向的,单总线具有"线与"功能,连接方便,便于扩展。
由于DS18B20采用 CMOS技术,耗电量很小,从总线上"偷"一点电保存到DS18B20内的电容中就可供给器件工作。
串联240 Ω电阻的目的是防止有缺陷的程序损坏DS18B20,如果没有正确地采用OC(集电极开路)或OD(漏极开路)结构驱动DS18B20,而是选择推挽方式,DS18B20可能被烧坏。
DS18B20
15、DS18B20设置与应用DS18B20是美国DALLAS公司生产的一线式数字温度传感器,具有3引脚TO一92小体积封装形式;温度测量范围为一55℃~+125℃,可编程为9~12位A/D转换精度测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引人,也可采用寄生电源方式产生;多个DS18B20可以并联到3或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路:以上特点使DS18B20非常适合于远距离多温度检测系统中。
硬件管脚如图DS18B20的硬件电路(1)64位光刻ROM,开始8位(28H)为产品序列号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。
(2)温度传感器(3)E2PROM温度报警触发器TH和TL,可通过软件写入。
(4)RAM 包括9字节暂存存储器。
前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。
第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。
第六、七、八个字节用于内部计算。
第九个字节是冗余检验字节。
暂存器分布如表1。
表1DS18B20操作时序1、复位脉冲和应答脉冲1一wire总线上的所有通信都是以初始化序列开始。
主机输出低电平,保持低电平时间至少480ps,,以产生复位脉冲。
接着主机释放总线,4.7kΩ上拉电阻将1一Wire总线拉高,延时15~60ps,并进入接收模式(Rx)。
接着DS18B20拉低总线60~240ps,以产生低电平应答脉冲,若为低电平,再延时480ps。
时序图如图13图132、读写时序写时序时包括写0时序和写1时序。
所有写时序至少需要60uS,且在2次独立的写时序之间至少需要1uS的恢复时间,两种写时序均起始于主机拉低总线。
DS18B20的工作原理及应用
1.DS18B20的工作原理① DS18B20数字温度传感器概述DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20产品的特点●只要求一个端口即可实现通信。
●在DS18B20中的每个器件上都有独一无二的序列号。
●实际应用中不需要外部任何元器件即可实现测温。
●测量温度范围在-55.C到+125.C之间。
●数字温度计的分辨率用户可以从9位到12位选择。
●内部有温度上、下限告警设置。
TO-92封装的DS18B20的引脚排列见右图,其引脚功能描述见表序号名称引脚功能描述1 GND 地信号2 DQ 数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3 VDD 可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地表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为符号位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV P2,#11110111B
ACALL DIS
AJMP T0HUI
TTT3:
CJNE A,#6,TTT4
MOV A,B
MOV P0,#0FFH
MOV P2,#11111011B
ACALL DIS
ANL P0,#11011111B
DJNZ R4,$
DJNZ R5,DE1
DJNZ R6,DE0
RET
;//*****************************************//
; 将从DS18B20中读出的温度数据进行转换
;//*****************************************//
MOV TEMPER_L,R2
ACALL DS18B20_Read_Byte
MOV TEMPER_H,R2
ACALL TEMPER_COV
AJMP SCAN
;*********************************
;DS18B20复位,检测设备是否存在
;*********************************
;延时程序 2us*x
;*********************************
DELAY_XUS:
DJNZ R7,$;2us
RET ;2us
;//*****************************************//
; 将16进制的温度数据转换成压缩BCD码
;//*****************************************//
BIN_BCD:
MOV DPTR,#TEMP_TAB
MOV A,TEMPER_NUM
MOVC A,@A+DPTR
MOV TEMPER_NUM,A
TTT: CJNE A,#2,TTT0
MOV A,XSG
MOV P0,#0FFH
MOV P2,#10111111B
ACALL DIS
AJMP T0HUI
TTT0:
CJNE A,#3,TTT1
MOV A,XSS
MOV P0,#0FFH
MOV P2,#11011111B
;*********************************
DS18B20_Reset:
CLR EA
CLR DQ
MOV R7,#250
ACALL DELAY_XUS;延时504us复位
SETB DQ
MOV R7,#25;延时54us
ACALL DELAY_XUS
RET
TEMP_TAB:
DB 00,01,02,03,04,05,06,07
DB 08,09,10,11,12,13,14,15
DB 16,17,18,19,20,21,22,23
DB 24,25,26,27,28,29,30,31
DB 32,33,34,35,36,37,38,39
DB 94,95,96,97,98,99
TEMP_TAB1:
DB 0,0,0,0
DB 0,6,2,5
DB 1,2,5,0
DB 1,8,7,5
DB 2,5,0,0
DB 3,1,2,5
DB 3,7,5,0
DB 4,3,7,5
DB 5,0,0,0
DB 5,6,2,5
DB 6,2,5,ຫໍສະໝຸດ DB 6,8,7,5 DB 7,5,0,0
DB 8,1,2,5
DB 8,7,5,0
DB 9,3,7,5
DB 1,0,0,0
T0ZD:
PUSH ACC
PUSH PSW
MOV A,TEMPER_NUM
MOV B,#10
DIV AB
ACALL DELAY_XUS;14us
RRC A
MOV DQ,C
MOV R7,#15
ACALL DELAY_XUS;34US
SETB DQ
NOP
DJNZ R0,Write_Next
POP ACC
SETB EA
RET
MOV R0,#0;读写一个字节次数
MOV R3,#0;显示用
MOV R2,#0
CLR A
SCAN:
ACALL DS18B20_Reset
MOV R2,#0CCH
ACALL DS18B20_Write_Byte
MOV R2,#44H
ACALL DS18B20_Write_Byte
AJMP T0HUI
TTT4:
CJNE A,#7,T0HUI
MOV XSQH,#0
MOV P0,#0FFH
MOV P2,#11111101B
MOV A,R3
ACALL DIS
;;;;;;;;;;;;;;;;;;;;;;
AJMP T0HUI
MOV R3,A
;******************************
INC XSQH
MOV A,XSQH
CJNE A,#1,TTT
MOV P0,#0FFH
MOV P2,#01111111B
MOV P0,#0A9H
AJMP T0HUI
TEMPER_COV:
MOV A,#0F0H
ANL A,TEMPER_L; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ACC.3,TEMPER_COV1; 四舍五入去温度值
ACALL DELAY_875MS
JNB DQ,$
ACALL DS18B20_Reset
MOV R2,#0CCH
ACALL DS18B20_Write_Byte
MOV R2,#0BEH
ACALL DS18B20_Write_Byte
ACALL DS18B20_Read_Byte
MOV C,DQ
MOV R7,#120
ACALL DELAY_XUS;延时244us
JC DS18B20_Reset
SETB EA
RET
;*********************************
;从DS18B2读出一个字节
;入口参数
;出口参数 ACC
DIS:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
T0HUI:
POP PSW
POP ACC
RETI
TAB: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
END
RRC A
MOV R7,#20;44US
ACALL DELAY_XUS
DJNZ R0,Read_Next
MOV R2,A
POP ACC
SETB EA
RET
;*********************************
;从DS18B2写入一个字节
INC TEMPER_NUM
TEMPER_COV1:
CLR EA
MOV A,TEMPER_H
ANL A,#07H
SWAP A
ORL A,TEMPER_NUM;
MOV TEMPER_NUM,A; 保存变换后的温度数据
LCALL BIN_BCD;将2进制转换为10进制
DB 40,41,42,43,44,45,46,47
DB 48,49,50,51,52,53,54,55
DB 56,57,58,59,60,61,62,63
DB 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78
DB 79,80,81,82,83,84,85,86,87,88,89,90,91,92,93
MOV XSB,A
MOV A,XSHC
ADD A,#2
MOVC A,@A+DPTR
MOV XSS,A
MOV A,XSHC
ADD A,#3
MOVC A,@A+DPTR
MOV XSG,A
SETB EA
RET
;//*****************************************
MOV DPTR,#TEMP_TAB1
MOV A,TEMPER_L
ANL A,#0FH
MOV B,#4
MUL AB
MOV XSHC,A
MOVC A,@A+DPTR
MOV XSQ,A
MOV A,XSHC
INC A
MOVC A,@A+DPTR
XSQ DATA 37H
XSHC DATA 38H
MOV XSHC,#0
MOV XSQ,#0
MOV XSG,#0
MOV XSS,#0
MOV XSB,#0
XSQH DATA 33H
TEMPER_L DATA 30H
TEMPER_H DATA 31H
TEMPER_NUM DATA 32H
MOV TEMPER_NUM,#0
MOV XSQH,#0