您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 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,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。2、DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图1所示。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号,不同的器件地址序列号不同。8位产品系列号48位产品序号8位CRC编码DS18B20高速暂存器共9个存储单元,如表所示:序号寄存器名称作用序号寄存器名称作用0温度低字节以16位补码形式存放4、5保留字节1、21温度高字节6计数器余值2TH/用户字节1存放温度上限7计数器/℃3HL/用户字节2存放温度下限8CRCCRC校验以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只图1DS18B20引脚分布图要将测到的数值乘于0.0625即可得到实际温度(等价说明:高8位字节的低3位和低8位字节的高4位组成温度整数值的二进制数;或者说:12位测量时,所测数值乘以0.0625(=1/16),即右移4位后去掉了二进制数的小数部分);如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度(等价说明:当温度小于0时,整数部分就是各位取反,小数部分则是各位取反后加1)。高8位SSSSS262524低8位232221202-12-22-32-4说明:温度测量分辨率有四种,即9位测量分辨率0.5℃;10位测量分辨率0.25℃;11位测量分辨率0.125℃;12位测量分辨率0.0625℃;9~12位的测量,无论采用哪种分辨率,温度整数的有效位均是表中26~20;以12位为例:温度值二进制数十六进制数+125℃000001111101000007D0H+25.0625℃00000001100100010191H+10.125℃000000001010001000A2H+0.5℃00000000000010000008H0℃00000000000000000000H-0.5℃1111111111111000FFF8H-10.125℃1111111101011110FF5EH-25.0625℃1111111001101111FF6FH-125℃1111110010010000FC90H1、DS18B20控制方法在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5kΩ左右的上拉电阻。DS18B20有六条控制命令,如下表所示:指令约定代码操作说明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2RAM中重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPUCPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。Initializationprocedure“resetandpresencepulses”开始发一个DS18B20序列号执行期间匹配命令延时1s启动在线DS18B20温度AD转换发跳过ROM命令、发转换命令初始化DS18B20读在线DS18B20序号发出搜索ROM命令DS18B20复位所有在线DS18B20访问完?存在一个DS18B20?初始化DS18B20发读暂存RAM指令读匹配的DS18B20温度YYNN多点温度检测软件流程图YN读DS18B20温度的流程图DS18B20是否存在?(读DS18B20测量温度子程序)GET-TEMPATURE开始YN数据端置位读温度值返回复位DS18B20(调用RESETDS18B20)写温度转换命令44H(调用WRITE18B20)写跳过ROM匹配命令0CCH(调用WRITE18B20)延时750μs?(读温度前)复位DS18B20(调用RESETDS18B20)写跳过POM匹配命令0CCH(调用WRITE18B20)写读温度字节命令0BEH(调用WRITE18B20)读温度(调用READ18B20)确保DS18B20在输出低电平表示存在时数据线不被拉高(DS18B20复位子程序)RESETDS18B20开始设置标志位表示存在延时(480μs,960μs)数据端(先置位后)清零数据端为低电平?YYNNDS18B20复位流程图数据端置位(拉高数据线)延时300μs?清除标志位表示不存在延时(180μs)数据端置位(拉高数据线)DS18B20复位结束RESETDS18B20:SETBP2.2NOPCLRP2.2;主机发出延时537微秒的复位低脉冲MOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBP2.2;然后拉高数据线NOPNOPNOPMOVR0,#25HTSR2:JNBP2.2,TSR3;等待DS18B20回应DJNZR0,TSR2LJMPTSR4;延时TSR3:SETBFLAG1;置标志位,表示DS1820存在CLRP1.7;检查到DS18B20就点亮P1.7LEDLJMPTSR5TSR4:CLRFLAG1;清标志位,表示DS1820不存在CLRP1.1LJMPTSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;时序要求延时一段时间TSR7:SETBP2.2RET循环右移一次写DS18B20(子程序)开始进位标志位清零延时30μs数据端清零指令字节写完?YN进位标志位值送数据端延时(15μs)数据端置位(拉高数据线)DS18B20写返回写DS18B20指令字节的流程图存低位字节数据一个字节是否读完?布尔累加器C清零YN读DS18B20两个温度字节的流程图是低位字节数据?(读DS18B20的温度字节子程序)READ18B20开始读数据端(数据)数据端清零YN延时(10μs)数据端置位DS18B20读返回延时(2μs)数据端置位延时(3μs)延时(25μs)保存所读一位数据存高位字节数据C51程序#includeAT89X52.H#includeINTRINS.hunsignedcharcodedisplaybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodedisplaycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};unsignedcharcodedotcode[32]={0,3,6,9,12,16,19,22,25,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,94,97};unsignedchardisplaycount;unsignedchardisplaybuf[8]={16,16,16,16,16,16,16,16};unsignedchartimecount;unsignedcharreaddata[8];sbitDQ=P3^7;bitsflag;bitresetpulse(void){unsignedchari;DQ=0;for(i=255;i0;i--);DQ=1;for(i=60;i0;i--);return(DQ);for(i=200;i0;i--);}Voidwritecommandtods18b20(unsignedcharcommand){unsignedchari;unsignedcharj;for(i=0;i8;i++){if((command&0x01)==0){DQ=0;for(j=35;j0;j--);DQ=1;}Else{DQ=0;for(j=2;j0;j--);DQ=1;for(j=33;j0;j--);}command=_cror_(command,1);}}unsignedcharreaddatafromds18b20(void){unsignedchari;unsignedcharj;unsignedchartemp;temp=0;for(i=0;i8;i++){temp=_cror_(temp,1);DQ=0;_nop_();_nop_();DQ=1;for(j=10;j0;j--);if(DQ==1){temp=temp|0x80;}else{temp=temp|0x00;}for(j=200;j0;j--);}return(temp);}voidmain(void){TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;ET0=1;EA=1;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0x44);TR0=1;while(1){;}}voidt0(void)interrupt1using0{unsignedcharx;unsignedintresult;TH0=(65536-4000)/256;TL0=(65536-4000)%256;if(displaycount==2){P0=displaycode[displaybuf[displaycount]]|0x80;}else{P0=displayco
本文标题:DS18B20介绍、流程图和程序源代码
链接地址:https://www.777doc.com/doc-4648097 .html