ds18b2详解及程序(活动za)

合集下载

温度测量DS18b02

温度测量DS18b02

//DS18B20的读写程序,数据脚P2.7 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P34~P37为位选///***************************************************/#include "reg51.h"#include "intrins.h" //_nop_();延时函数用#define dm P0 //段码输出口#define uchar unsigned char#define uint unsigned intsbit DQ=P2^7; //温度输入口sbit w0=P2^0; //数码管4sbit w1=P2^1; //数码管3sbit w2=P2^2; //数码管2sbit w3=P2^3; //数码管1sbit beep=P1^7; //蜂鸣器和指示灯sbit set=P2^6; //温度设置切换键sbit add=P2^4; //温度加sbit dec=P2^5; //温度减int temp1=0; //显示当前温度和设置温度的标志位为0时显示当前温度uint h;uint temp;uchar r;uchar high=35,low=20;uchar sign;uchar q=0;uchar tt=0;uchar scale;//**************温度小数部分用查表法***********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小数断码表uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //个位带小数点的断码表uchar data temp_data[2]={0x00,0x00}; //读出温度暂放uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用/*****************11us延时函数*************************/void delay(uint t){}void scan(){int j;for(j=0;j<4;j++){switch (j){case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshucase 1: dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//geweicase 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiweicase 3: dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei// else{dm=table_dm[b3];w3=0;delay(50);w3=1;} }}}//***************DS18B20复位函数************************/ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay(50); //550 usDQ=1;delay(6); //66 uspresence=DQ; //presence=0 复位成功,继续下一步}delay(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/****************DS18B20写命令函数************************///向1-WIRE 总线上写1个字节void write_byte(uchar val){uchar i;{DQ=1;_nop_();_nop_(); //从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 usDQ=val&0x01; //最低位移出delay(6); //66 usval=val/2; //右移1位}DQ=1;delay(1);}/****************DS18B20读1字节函数************************/ //从总线上取1个字节uchar read_byte(void){uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 usDQ=1;_nop_();_nop_();_nop_();_nop_(); //4 usif(DQ)value|=0x80;delay(6); //66 us}DQ=1;return(value);}/*****************读出温度函数************************/read_temp(){float t;ow_reset(); //总线复位delay(200);write_byte(0xcc); //发命令write_byte(0x44); //发转换命令ow_reset();delay(1);write_byte(0xcc); //发命令write_byte(0xbe);temp_data[0]=read_byte(); //读温度值的第字节temp_data[1]=read_byte(); //读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。

基于DS18B02的温度测量系统

基于DS18B02的温度测量系统

基于DS18B02的温度测量系统温度传感器 2009 年 6 月 14 日摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术本文主要介绍了一个基于 89S51 单片机的测温系统,详细描述了利用数字温度传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器 DS18B20 的数据采集过程。

对各部分的电路也一一进行了介绍该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。

DS18B20 与AT89C51 结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。

关键词: 单片机 DS18B20 温度传感器数字温度计 AT89S52 目录1 概述....................................................... 3 1.1 课程设计的意义 (3)1.2 设计的任务和要求 ..................................... 32 系统总体方案及硬件设计 ..................................... 42.1 数字温度计设计方案论证................................ 4 2.1.1方案一 .......................................... 4 2.1.2 方案二.......................................... 4 2.2 系统总体设计.......................................... 5 2.3 系统模块.............................................. 6 2.3.1主控制器........................................ 6 2.3.2 显示电路........................................ 7 2.3.3 温................................ 83 度传感器 ...................................... 7 2.3.4 报警温度调整按键系统软件算法分析 ........................................... 9 3.1 主程序流程图.......................................... 9 3.2 读出温度子程序........................................ 9 3.3 温度转换命令子程序................................... 10 3.4 计算温度子程序 ......................................10 3.5 显示数据刷新子程序 .................................. 10 3.6 按键扫描处理子程序................................... 114 总结与体会................................................ 12查考文献.................................................... 13附 1 源程序代码 (14)1 概述1.1 课程设计的意义本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。

DS18B21

DS18B21

适应电压范围更宽,电压范围:3.0~5.5,在寄生电源方式下可由数据线供电.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯1.3、DS18B20支持多点组网功能,多个DS18B20可并联在唯一的三线上,实现组网多点测温1.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路 1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃1.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温1.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快1.8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

2、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的外形及管脚排列如下图1实际应用时,应根据系统的要求和总线地址译码方式来选择接口电路。

对于多功能的复杂系统可以采取译码芯片的全译码或部分译码方式连接;而对于功能较少的小系统,为了简化电路,降低成本,可采用线码方式。

本文以简单的线译码方式为例。

连接如图2所示。

在图中只画出DS12C887与CPU的连接线,其它连线视系统的功能而选定。

此处选择CPU P口的P2.5作为线译码的片选输出端接CS。

于是芯片内的秒、分、小时、星期、日、月等计时单元的地址分别是DF00H,DF02HDF04H,DF06H,DF07H,DF08H,DF09H;定时报警的秒,分、时的计数单元的地址就分别是DF01H,DF03H,DF05H;世纪年的只读寄存器单元地址为DF0AH~DF0DH2005年24根据DS12C887的读写时序要求,INTER CPU的读控制线RD(17)和写控制线WR(16)分别接DS和R/W输入端:CPU的数据口P0.0--P0.7接时钟芯片的AD0-- AD。

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.c//** 说明:DS18B20驱动程序文件//----------------------------------------------------------------------//** 单位://** 创建人:张雅//** 创建时间:2010-01-20//** 联系方式:QQ:276564402//** 版本:V1.0//----------------------------------------------------------------------//**********************************************************************//----------------------------------------------------------------------//** 芯片:AT89S52//** 时钟:11.0592MHz//** 其它:这个文档为18B20的驱动程序,引用了数码管的驱动。

18b20程序详解

18b20程序详解

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit ds=P1^4; // 数据采集定义管脚code uchar table[]={ // 共阳数码管,段选0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};code uchar table2[]={ //位选0x01,0x02,0x04} ;uint temp;float f_temp;void delay(uint time) //小的延时{while(time--){_nop_();_nop_();};}void delayms(uchar time){uchar i,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}void close(){P2=0xa0; //关闭蜂鸣器P0=0x80;P2=0;P2=0x80; //关闭LEDP0=0xff;P2=0;void reset() //复位函数{ds=1;delay(8); //特别注意时间,比较严格ds=0;delay(80); //特别注意时间,比较严格ds=1;delay(15); //特别注意时间,比较严格}void writebyte(uchar dat) //写函数,从低位向高位开始写{uchar i;for(i=0;i<8;i++){ds=0;ds=dat&0x01;delay(5);ds=1;dat>>=1;}}uchar readbyte() //读函数,从低位向高位开始读{uchar i,dat;for(i=0;i<8;i++){ds=0;dat>>=1;ds=1;if(ds){dat|=0x80;}delay(5); //时间延时太长时数字闪烁}return dat;}void display(uchar add,uchar dat) //显示函数P2=0xc0;P0=table2[add];P2=0;P2=0xe0;P0=table[dat];P2=0;delayms(10);}void tempchange(){reset();writebyte(0xcc); //控制指令,跳过ROM,直接向18B20发送转换命令,适用于总线上只接一个18B20writebyte(0x44); //控制指令,温度转换,结果存入内部9字节的RAM中}uint get_temp(){uchar a,b;reset();writebyte(0xcc); //控制指令,跳过ROM,直接向18B20发送转换命令,适用于总线上只接一个18B20writebyte(0xbe); //控制指令,读暂存器,读内部RAM中九字节的温度数据a=readbyte(); //先读地位b=readbyte();temp=b;temp<<=8;temp|=a; //将char类型变量为int型变量f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp+=0.05; //温度转换return temp;}void main(){reset(); //复位close(); //关闭蜂鸣器和继电器,这个可以不要while(1) //不用也可以显示,但是有时候数字闪烁{tempchange(); //开始读取温度,必须放在while中,否则变换缓慢,而且胡乱显示display(0,get_temp()/100); //在数码管上显示display(1,get_temp()%100/10+10);display(2,get_temp()%10);}}心得体会:要严格控制时间,否则读不出数据,尤其是复位时间。

多机温度检测 ds18b2

多机温度检测   ds18b2

河南理工大学《单片机应用与仿真训练》设计报告多机温度检测系统设计姓名:学号:专业班级:指导老师:所在学院:2012年月日摘要本设计是以 AT89S52单片机为控制核心,利用新型一线制温度传感器DS18B20测量温度值,实现环境温度的检测和报警。

系统测温范围为0℃—100℃,测量精度为 0.25℃。

用户可以自定义报警上、下限,一旦温度超过极限值,单片机便启动声光报警。

该系统精度高、测温范围广、报警及时,可广泛应用于基于单片机的测温报警场合。

系统抗干扰性强、设计灵活方便,适合在恶劣的环境下进行温度测量。

系统硬件电路包括传感器数据采集、温度显示、模式选择、上、下限报警主电路等。

整个装置的控制核心是 AT89S52单片机。

温度传感器DS18B20采用外部电源供电,传感器输出引脚直接和单片机相连。

电路支持模式选择功能,可以选择设定报警极限值或显示当前温度值。

当被测温度越限时,报警主电路产生声光报警。

拨动开关可以对设定报警极限值进行写保护。

采用2片单片机,组成多机温度检测系统;下位单片机采集温度,通过串行通信传送至上位单片机;上位单片机用数码管显示温度大小;基本范围0℃~100℃;精度误差小于0.25℃;可以任意设定温度的上下限报警功能。

关键字:AT89S52单片机 DS18B20温度传感器数码管测温报警目录1 概述 (4)1.1 设计应用背景 (4)1.2 任务和要求 (4)1.3系统概述 (4)2 系统总体方案及硬件设计 (6)2.1 方案比较 (6)2.2总体方案 (6)2.3 AT89S52 (7)2.4时钟晶振电路 (7)2.5复位电路 (8)2.6数码管显示 (8)2.7设置温度上下限电路 (9)2.8报警电路 (10)2.9温度检测电路 (11)2.9.1数字温度传感器DS18B20 (11)2.9.2 DS18B20温度检测 (16)3 软件设计 (17)3.1 概述 (17)3.2 主程序方案 (17)3.3 DS18B20的相处理子程序 (18)3.3.1初始化子程序 (18)3.3.3读出温度子程序 (18)3.3.4温度转换子程序 (19)3.4工作流程图 (19)3.4.1 上位机工作过程 (19)3.4.2 DS18B20工作过程 (20)3.4.3 下位机接收过程 (21)3.5上位机与从机通信软件设计 (21)3.5.1 多机通信软件原理 (22)3.5.2 主机数据发送程序 (22)3.5.3 从机数据接收程序 (23)4 Proteus软件仿真 (24)4.1仿真初始 (24)4.2系统达到设定值报警 (24)5课程设计体会 (26)参考文献 (26)附录 (27)附1:源程序代码 (27)附2:系统原理图 (27)1 概述1.1 设计应用背景在现代社会,不管是在工、农业生产还是在人们的日常生活中,对温度的测量及控制都扮演着很重要的角色。

DS18B20温度传感器详细注解及驱动程序解析

DS18B20温度传感器详细注解及驱动程序解析

DS18B20独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。

测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。

支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

工作电源:3.0~5.5V/DC(可以数据线寄生电源)在使用中不需要任何外围元件。

测量结果以9~12位数字量方式串行传送。

如果使用51单片机的话,那么中间那个引脚必须接上4.7K~10K的上拉电阻,否则,由于高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相符合ROM 55H对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。

用于确定挂接在同一总线上DS1820 的个数和识别64 位ROM 地址。

为搜索ROM FOH操作各器件作好准备。

跳过ROM CCH 忽略64 位ROM 地址,直接向DS1820 发温度变换命令。

告警搜索ECH 执行后只有温度超过设定值上限或下限的片子才做出响应。

RAM命令启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75m温度变换44Hs)。

结果存入内部第0、1字节RAM中。

1、复位操作复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

ds8b2中英文数据手册【word版】26p

ds8b2中英文数据手册【word版】26p
CRC能够在总线控制器读取DS18B20时进行数据校验。为校验数据是否被正确读取,总线控制器必须用接受到的数据计算出一个CRC值,和存储在DS18B20的64位ROM中的值(读ROM时)或DS18B20内部计算出的8位CRC值(读存储器时)进行比较。如果计算得到的CRC值和读取出来的CRC值相吻合,数据控制器决定。当在DS18B20中存储的或由其计算到CRC值和总线控制器计算的值不相符时,DS18B20内部并没有一个能阻止命令序列进行的电路。
CRC的计算等式如下:
CRC = X8 + X5 + X4 + 1
单总线CRC可以由一个由移位寄存器和XOR门构成的多项式发生器来产生,见图9。这个回路包括一个移位寄存器和几个XOR门,移位寄存器的各位都被初始化为0。从ROM中的最低有效位或暂存器中的位0开始,一次一位移入寄存器。在传输了56位ROM中的数据或移入了暂存器的位7后,移位寄存器中就存储了CRC值。下一步,CRC的值必须被循环移入。此时,如果计算得到的CRC是正确的,移位寄存器将复0。
CRC发生器图9
单总线系统
单总线系统包括一个总线控制器和一个或多个从机。DS18B20总是充当从机。当只有一只从机挂在总线上时,系统被称为“单点”系统;如果由多只从机挂在总线上,系统被称为“多点”。
所有的数据和指令的传递都是从最低有效位开始通过单总线。
关于单总线系统分三个题目讨论:硬件结构、执行序列和单总线信号(信号类型
产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”(见单总线系统节),DS18B20正在温度转换中返回0,转换结束返回1。如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。寄生电源的总线要求在DS18B20供电节详细解释。

DS18B2传感器如何测量温度

DS18B2传感器如何测量温度

DS18B2传感器如何测量温度DS18B2传感器采用热敏电阻作为敏感元件,当温度发生变化时,热敏电阻的阻值也会随之发生变化。

DS18B2传感器内部有一个精密的电桥,电桥的平衡状态会受到温度变化的影响。

通过测量电桥的平衡状态,可以准确得到当前的温度值。

DS18B2传感器内部包含一个微处理器,用于对电桥的输出信号进行处理,将电信号转换为数字信号。

微处理器会根据预设的算法,将数字信号转换为实际的温度值。

这个过程称为模数转换。

然后,DS18B2传感器通过串行通信接口将温度数据传输给外部设备。

在实际应用中,我通常会使用单片机或其他微控制器作为外部设备,通过编程方式读取DS18B2传感器的温度数据。

在我参与的一个智能家居项目中,需要监测室内温度,以保证室内舒适度。

我们选择了DS18B2传感器作为温度检测设备。

在实际应用中,DS18B2传感器安装在室内,与单片机连接。

单片机通过编程方式,定时读取DS18B2传感器的温度数据,并通过串口通信将数据传输给上位机。

上位机根据接收到的温度数据,控制空调等设备进行温度调节。

通过这个案例,我深刻认识到DS18B2传感器的实际测量过程,以及其在各种环境温度检测领域的广泛应用。

DS18B2传感器以其高精度、高稳定性、广泛的应用范围等优点,成为了温度检测领域的佼佼者。

重点和难点解析:我们需要深入了解DS18B2传感器内部的热敏电阻是如何工作的。

热敏电阻是一种半导体材料,其电阻值随温度变化而变化。

在DS18B2传感器中,热敏电阻作为电桥的一个桥臂,当温度发生变化时,热敏电阻的阻值会发生变化,从而导致电桥的平衡状态发生改变。

通过测量电桥的平衡状态,我们可以得到温度变化的信息。

传感器的信号处理过程也是我们需要关注的重要细节。

在DS18B2传感器中,电桥的输出信号会经过一个微处理器进行处理。

这个微处理器会根据电桥的输出信号,通过预设的算法,将电信号转换为数字信号。

这个过程称为模数转换。

DS18B20介绍、流程图和程序源代码

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,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。

[ZA]dsb2详解及程序029

[ZA]dsb2详解及程序029

最近都在学习和写单片机的程序, 今天有空又模仿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 LSBR0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:高字节:其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨率为10位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int 变量即可).DS18B20 的使用方法:由于DS18B20 采用的是1-Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

ds18b02的简介

ds18b02的简介

TS18B20 数字温度传感器本公司最新推出TS18B20数字温度传感器,该产品采用美国DALLAS公司生产得 DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温与控制领域。

1: 技术性能描述1、1 独特得单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20得双向通讯。

1、2 测温范围-55℃~+125℃,固有测温分辨率0、5℃。

1、3 支持多点组网功能,多个DS18B20可以并联在唯一得三线上,实现多点测温1、4 工作电源: 3~5V/DC1、5 在使用中不需要任何外围元件1、6 测量结果以9~12位数字量方式串行传送1、7 不锈钢保护管直径Φ61、8 适用于DN15~25, DN40~DN250各种介质工业管道与狭小空间设备测温1、9 标准安装螺纹 M10X1, M12X1、5, G1/2”任选1、10 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。

2:应用范围2、1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温与控制领域2、2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温与控制。

2、3 汽车空调、冰箱、冷柜、以及中低温干燥箱等。

2、5 供热/制冷管道热量计量,中央空调分户热能计量与工业领域测温与控制3:产品型号与规格型号测温范围安装螺纹电缆长度适用管道TS18B20 55~125 无 1、5 mTS18B20A 55~125 M10X1 1、5m DN15~25TS18B20B 55~125 1/2”G 接线盒 DN40~ 604:接线说明特点独特得一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3、0 V至5、5 V 无需备用电源测量温度范围为55 ° C至+125 ℃ 。

ds8b20详解及程序

ds8b20详解及程序

最近都在学习和写单片机的程序, 今天有空又模仿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检验值.配置寄存器的命令内容如下:MSBLSBR0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.温度值分辨率配置表4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:高字节:其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨率为10位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int变量即可).DS18B20 的使用方法:由于DS18B20 采用的是1-Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

DS18B 资料及驱动

DS18B 资料及驱动

DS18B首先你可以搭建个读ds18b20的64位ROM的电路,这样你就可以读出每个你要用的DS18B20的序列号了,以上部分我有电路图和程序。

/* 产生复位脉冲初始化DS18B20 */void TxReset(void){uint i;DQ = 0;/* 拉低约900us */i = 100;while (i>0) i--;DQ = 1; // 产生上升沿i = 4;while (i>0) i--;}/* 等待DS18B20应答脉冲*/void RxWait(void){uint i;while(DQ);while(~DQ); // 检测到应答脉冲i = 4;while (i>0) i--;}/* 读取数据的一位,满足读时隙要求DS18B */bit RdBit(void){uint i;bit b;DQ = 0;i++;DQ = 1;i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效b = DQ;i = 8;while(i>0) i--;return (b);}/* 读取数据的一个字节DS18B */uchar RdByte(void){uchar i,j,b;b = 0;for (i=1;i<=8;i++){j = RdBit();b = (j<<7)|(b>>1);}return(b);}/* 写数据的一个字节,满足写1和写0的时隙要求DS18B */void WrByte(uchar b){uint i;uchar j;bit btmp;for(j=1;j<=8;j++){btmp = b&0x01;b = b>>1; // 取下一位(由低位向高位)if (btmp){/* 写1 */DQ = 0;i++;i++; // 延时,使得15us以内拉高DQ = 1;i = 8;while(i>0) i--; // 整个写1时隙不低于60us}else{/* 写0 */DQ = 0;i = 8;while(i>0) i--; // 保持低在60us到120us之间DQ = 1;i++;i++;}}}/* 启动温度转换*/void convert(void){TxReset(); // 产生复位脉冲,初始化DS18B20RxWait(); // 等待DS18B20给出应答脉冲delay(1); // 延时WrByte(0xcc); // skip rom 命令WrByte(0x44); // convert T 命令}/* 读取温度值*/void RdTemp(void){TxReset(); // 产生复位脉冲,初始化DS18B20RxWait(); // 等待DS18B20给出应答脉冲delay(1); // 延时WrByte(0xcc); // skip rom 命令WrByte(0xbe); // read scratchpad 命令tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位)}/*温度转换与显示函数DS18B*/void zhuanxian (void){ uchar j,m,n;delay(1); // 延时1msconvert(); // 启动温度转换,需要750msdelay(1000); // 延时1sRdTemp(); // 读取温度n=(tplsb>>2)&0x03;switch(n){case 0x00:Tabc[2]=0; //小数温度高位Tabc[3]=0;//小数温度低位break;case 0x01:Tabc[2]=2; //小数温度高位Tabc[3]=5;//小数温度低位break;case 0x10:Tabc[2]=5; //小数温度高位Tabc[3]=0;//小数温度低位break;case 0x11:Tabc[2]=7; //小数温度高位Tabc[3]=5;//小数温度低位break;default:break;}m=(tpmsb<<4)|(tplsb>>4);if((m>>7)&0x01)flagT=0; //负温elseflagT=1; //正温n=m&0x7f;Tabc[0]=n/10; //整数温度高位Tabc[1]=n%10;for(j=0;j<4;j++){WriteWord(digbit[j],Tabc[j]); // 数码管显示温度}}当你知道了每个的序列号时,你可以自己编程发匹配rom指令55h,后面跟上你的64位序列号,是哪个1820的号,哪个就响应你了。

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C 语言程序和电路DS18B2C 在外形上和三极管很像,有三只脚。

电压范围为 3.0 V 至5.5 V 无需备用电源 测量温度 位 温度转换为 12 位数字格式最大值为 750 毫秒 用户可定义的非易失性温度报警设置 应用范围包 敏感系统。

F 面是DS18B20勺子程序,本人用过完全可行的: #include<reg51.h> #include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit DQ=P2A 0;void reset(); void write_byte(uchar val); uchar read_byte(void); void read_temp(); void work_temp(); uchar data temp_data[2]={0x00,0x00};uchar datadisplay[5]={0x00,0x00,0x00,0x00,0x00}; // 对于温度显示值值 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0 数部分查表 main() {while(1) {自己添加 ;void delay1(uint t) {for(;t>0;t--); }/////// 温度控制子函数 void reset(){uchar presence=1; while(presence){ while(presence){DQ=1;_nop_();_nop_(); DQ=0;delay1(50); DQ=1; delay1(6);presence=DQ;}delay1(45); presence=~DQ; }//DS18B20//DS18B20 写命令函数 //DS18B20 读 1 字节函数// 温度读取函数 // 温度数据处理函数DQ=1;}void write_byte(uchar val){uchar i;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();DQ=val&0x01;delay1(6);val=val/2;}DQ=1;_nop_();}uchar read_byte(void){uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0; _nop_();_nop_();_nop_();_nop_(); DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)value|=0x80;delay1(6);}DQ=1;return(value);void read_temp(){reset();write_byte(0xcc);write_byte(0xbe);temp_data[0]=read_byte();temp_data[1]=read_byte();reset();write_byte(0xcc);write_byte(0x44);}void work_temp(){if(temp_data[1]>127){ temp_data[1]=(256-temp_data[1]); temp_data[0]=(256-temp_data[0]); n=1; // 需要前面宏定义}display[4]=temp_data[0]&0x0f; // 低位的低4 位display[0]=ditab[display[4]]; // 小数点后的数值display[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4); // 小数display[3]=display[4] / 100; display[1]=display[4] % 100;display[2]=display[1] / 10;display[1]=display[1] % 10;}电路:Bi -ij-F16欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求。

温度传感器DS18B及LCD1602的使用

温度传感器DS18B及LCD1602的使用

西南科技大学实验报告课程名称:单片机原理及其应用 A __________ 实验名称:LCD1602及DS18B2C的应用 _____ 姓名:XX _____________________________ 学号:_________ XXXXXXXXXX ___________ 班级:_________ XXXX __________________ 指导教师:XXX ___________________西南科技大学信息工程学院制实验题目一、实验目的1. 学习和理解液晶显示的原理,并且能够读懂液晶显示的时序图,学会编写有关LCD1602 的读、写等的程序。

2. 学习和理解温度传感器的原理,并尝试着应用,能够根据DS18B2冲存储的十六进制数来计算温度,理解原码和补码的转换。

3. 在实验中,每次出现问题时,能够冷静地面对,通过改正实验中的错误,逐渐积累经验。

二、实验原理1. 1602液晶内部自带80个字节的DDRAM用来存储待显示的字符代码,如下图所示:LCD16字畑行图1 1602的DDRA腑构图第一行的地址是0x00到0x27,第二行的地址从0x40到0x67,其中第一行0x00到0x0F 是与液晶上第一行16个字符显示位置相对应的,第二行0x40到0x4F是与第二行16个字符显示位置相对应的。

而每行都多出来一部分,是为了显示移动字幕设置的。

1602字符液晶是显示字符的,因此它跟ASCII字符表是对应的。

2. 1602基本的读写时序有4 个: (1)读状态;(2)读数据(较少使用);(3)写命令;⑷写数据o (1)读状态:1602液晶有一个状态字字节,通过读取这个状态字的内容,就可知道1602 液晶的一些内部情况,如下表所示:图2 1602读状态⑶写命令:时序要求:RS=L R/W=L,D0~D7=f令码,E=高脉冲(E使能引脚先从低拉高,再从高拉低,形成一个高脉冲)。

(4)写数据:时序要求:RS=H R/W=L,D0~D7=t据,E= 高脉冲3. 1 -Wire总线开始需要检测这条总线上是否存在DS18B20这个器件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近都在学习和写单片机的程序, 今天有空又模仿温度测量显示实验写了一个与基于单总线通信的程序.数字温度传感器(参考:智能温度传感器的原理与应用)是公司生产的-,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。

产品的特点:()、只要求一个口即可实现通信。

()、在中的每个器件上都有独一无二的序列号。

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

()、测量温度范围在-到+℃之间; 在℃范围内误差为±℃;()、数字温度计的分辨率用户可以从位到位选择。

将位的温度值转换为数字量所需进度不超过; ()、内部有温度上、下限告警设置。

引脚分布图详细引脚功能描述:、地信号。

、数据输入出引脚。

开漏单总线接口引脚。

当被用在寄生电源下,此引脚可以向器件提供电源。

漏极开路, 常太下高电平. 通常要求外接一个约Ω的上拉电阻.、可选择的引脚。

电压范围; 当工作于寄生电源时,此引脚必须接地。

存储器结构图暂存储器的头两个字节为测得温度信息的低位和高位字节;第, 字节是和的易失性拷贝, 在每次电复位时都会被刷新;第字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;第字节是前面个字节的检验值.配置寄存器的命令内容如下:和是温度值分辨率位, 按下表进行配置.默认出厂设置是, 即位.温度值分辨率配置表种分辨率对应的温度分辨率为℃, ℃, ℃, ℃(即最低一位代表的温度值)位分辨率时的两个温度字节的具体格式如下:低字节:高字节:, 如: 当分辨率为位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用语言, 直接将结果赋值给一个变量即可).的使用方法:由于采用的是-总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对芯片的访问。

由于是在一根线上读写数据,因此,对读写的数据位有着严格的时序要求。

有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:初始化时序(()实现)、读时序(())、写时序(())。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

与单片机连接电路图:利用软件模拟的单线协议和命令:主机操作必须遵循下面的顺序. 初始化单线总线上的所有操作都是从初始化开始的. 过程如下:)请求: 主机通过拉低单线以上, 产生复位脉冲, 然后释放该线, 进入接收模式. 主机释放总线时, 会产生一个上升沿脉冲.: > () >)响应: 检测到该上升沿后, 延时, 通过拉低总线来产生应答脉冲.: () > ())接收响应: 主机接收到从机的应答脉冲后, 说明有单线器件在线. 至此, 初始化完成.:. 操作命令. 内存操作命令. 数据处理要求有严格的时序来保证数据的完整性. 在单线上, 有复位脉冲, 应答脉冲, 写, 写, 读, 读这种信号类型. 除了应答脉冲外, 其它都由主机产生. 数据位的读和写是通过读、写时隙实现的.) 写时隙: 当主机将数据线从高电平拉至低电平时, 产生写时隙.所有写时隙都必须在以上, 各写时隙间必须保证的恢复进度.写"" : 主机将数据线先拉低, 然后释放后, 将数据线拉高;写"" : 主机将拉低并至少保持以上.)读时隙: 当主机将数据线从高电平拉至低电平时, 产生读时隙. 所有读时隙最短必须持续, 各读时隙间必须保证的恢复进度.读: 主机将拉低至少,. 此时主机马上将拉高, 然后就可以延时后, 读取即可.源代码: (测量范围: 度)<>通过测试当前环境温度^;^;^;数码管的编码[]{,};数码管的编码[]{, , , , , , ,, , };延时函数( ){, ;( ; > ; ){( ; > ; );}}初始化让一段相对长进度低电平(){;;;(>) ;;;(>) ;}向读取一位数据读一位之后则会输出持续一段进度的一位数据(){;;;;;; ;;;(>) ;;}读取一字节数据(){;, ;;(; <; ){();( << ) ( >> ); };}向写入一字节数据( ){;;;( ; < ; ){;>> ;(){;; ;;; (>) ;}{;; (>) ;;; ;}}}向发送温度转换命令 (){();();();();}向发送读取数据命令 (){();();();();}获取当前温度值(){;;, ;();();();;<< ;;* ;* ;;}显示当前温度值( ){[] {, , };[] ;[] ;[] ;( ; < ; ){;(( << ) ( >> ( ))); ;;;( ){[[]];}{[[]];};;();;;;;}}(){;;(){();();( ; < ; ){();}}显示效果:进程安排图:改进代码: 扩大测量范围, 使可测量范围为: 度度, 严格按照上面的进程安排进行软件设计改进代码 <><><>通过测试当前环境温度^;^;^;;数码管的编码[]{,};数码管的编码[]{, , , , , , ,, , };延时函数( ){;(){( ; < ; );}}初始化让一段相对长进度低电平(){;;;(>) ;;;(>) ;}(){;();();;( > ) ;}向读取一位数据读一位之后则会输出持续一段进度的一位数据 (){;;;;;; ;;;(>) ;;}读取一字节数据(){;, ;;(; <; ){();( << ) ( >> );};}向写入一字节数据( ){;;;( ; < ; ){;>> ;(){;; ;;; (>) ;}{;; (>) ; ;; ;}}}向发送温度转换命令 (){();();();();();}向发送读取数据命令 (){();();();();();}获取当前温度值(){;;;, ;();();();;<< ;;;* ;* ( > ? : ); ;};显示当前温度值若先位选再段选( ){;[] {, , , , }; ();[] ;[] ;[] ;[] ;[] ;( < ){;;;;;;;;;();}( ; ; ){;;;( ){(( [] ) ( [ ] ))){;}* [[]];}{[[]];};;(, );;;();}}(){;(){();( ; < ; ){();}();}}改进后的效果图:只有一位小数两位小数, 并消除下一位对上一位的影响。

相关文档
最新文档