您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 项目3_数字温度传感器DS18B20应用实例
提高项目3数字温度传感器S18B20程序设计实验指导白林峰DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供单片机处理,可实现温度的精度测量与控制。DS18B20封装外形见图3-1所示。3.1单总线温度传感器DS18B20简介图3-1DS18B20外形及引脚排列DS18B20引脚功能描述序号名称描述1GND地信号2DQ数据输入输出引脚3Vdd(Vcc)电源输入引脚,当工作于寄生电源模式时,此引脚必须接地值得一提的是DQ引脚的I/O为数据输入/输出端(即单总线),该引脚为漏极开路输出,常态下呈高电平。而单总线技术是DS18B20的一个特点,也是目前的技术热点之一。DS18B20的内部框图如图3-2所示,主要包括寄生电源、温度传感器、存放中间数据的高速贮存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验码发生器和64位编号ROM等7部分。下面重点说明高速贮存器。图3-2DS18B20内部电路3.3.1内部结构高速寄存器RAM由9个字节的存储器组成。见表3-1所示。其中,第0、1字节是温度转换有效位,第0字节的低3位存放了温度的高位,高5位存放温度的正负值;第1字节的高4位存放温度的低位,后4位存放温度的小数部分;第2和第3个字节是DS18B20的与内部E2PROM的有关的TH和TL,用来存储温度上限和下限,可以通过程序设计把温度的上下限从单片机中读到TH和TL中,并通过程序再复制到DS18B20内部E2PROM中,同时TH和TL在器件加电后复制E2PROM的内容;第4个字节是配置寄存器,第4个字节的数字也可以更新;第5,6,7三个字节是保留的。表3-1-3高速寄存器RAM字节地址编号寄存器内容功能0温度值低位LSB高5位是温度的正正负号,低3位为温度的高位1温度值高位MSB高4位为温度的低位,低4位为温度小数部分2高温度值(TH)温度上限,最保存在ROM中3低温度值(TL)温度下限,最保存在ROM中4配置寄存器5、6、7保留8CRC校验值3.1.2硬件连接DS18B20可以作为单片机外设,单片机为主器件,DS18B20为从器件。上图接法是单片机与一个DS18B20通信,单片机只需要一个I/O口就可以控制DS18B20,为了增加单片机I/O口驱动的可靠性,总线上接有上拉电阻。如果要控制多个DS18B20进行温度采集,只要将所有DS18B20的DQ全部连接到总线上就可以了,在操作时,通过读取每个DS18B20内部芯片的序列号来识别。3.2单总线数据传输原理单总线协议规定一条数据线传输串行数据,时序有严格的控制,对于DS18B20的程序设计,必须遵守单总线协议。DS18B20操作主要分初始化、写数据、读数据。下面分别介绍操作步骤。一、初始化时序对DS18B20初始化的不得是:单片机感知DS18B20存在并为下一步操作做准备,同时启动DS18B20,程序设计依据时序进行。设P1.0口与DS18B20的数据DQ连接,初始化过程如下:(1)先将数据线置高电平1,然后延时(可有可无);(2)数据线拉到低电平0。然后延时750µs(该时间范围可以在480~960µs),调用延时函数决定。(3)数据线拉到高电平1。如果单片机P1.0接DS18B20的DQ引脚,则P1.0此时设置高电平,称为单片机对总线电平管理权释放。此时,P1.0的电平高低由DS18B20的DQ输出决定;(4)延时等待。如果初始化成功则在15~60ms总线上产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断。(5)若单片机读到数据线上的低电平0后,说明DS18B20存在并相应,还要进行延时,其延时的时间从发出高电平算起(第⑤步的时间算起)最少要480µs。(6)将数据线再次拉到高电平1,结束初始化步骤。过程对应程序Init_DS18B20(void{ucharx=255;DQ=1;delay(10);//稍做延时DQ=0;delay(80);DQ=1;delay(20);while(DQ&&x--);delay(80);DQ=1;}二、对DS18B20写1字节数据(1)数据线先置低电平0,发送的起始信号。(2)延时确定的时间为15µs;(3)按低位到高位顺序发送数据(一次只发送一位)。(4)延时时间为45µs,等待DS18B20接收;(5)将数据线拉到高电平1,单片机释放总线;(6)重复①~⑤步骤,直到发送完整个字节;(7)最后将数据线拉高,单片机释放总线。过程voidwrite_OneChar(uchardat){uchari=0;for(i=8;I0;i--){DQ=0;delay(5);DQ=dat&0x01;delay(15);DQ=1;dat=1;}delay(4);}对应程序三、对DS18B20读1字节数据(1)将数据线拉高,时序图见图3-1-5所示;(2)延时2µs,(3)将数据线拉低到0,(4)延时6µs,延时时比写数据时间短;(5)将数据线拉高到1,释放总线(6)延时4µs(7)读数据线的状态得到一个状态位,并进行数据处理。(8)延时30µs。(9)重复①~⑦步骤,直到读取完一个字节。。过程对应程序ucharread_OneChar(void){uchari=0;uchardat=0;for(i=8;i0;i--){DQ=0;//给脉冲信号dat=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}3.3DS18B20的指令集DS18B20指令主要有ROM操作指令、温度操作指令两类。每一个DS18B20都有自己独立的编号,存放在DS18B20内部64位ROM中,ROM操作指令主要对其内部64位的编号操作。内部编号由厂家生产过程中固化,器件编号唯一。格式见表3-2所示。8位CRC码48位序列号8位产品类型标号表3-233H读ROM。读DS18B20温度传感器ROM中的编码(即64位地址)55H匹配ROM。发出此命令之后,接着发出64位ROM编码,访问单总线上,与该编码相对应的DS18B20并使之做出响应,为下一步对该DS18B20的读/写做准备F0H搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作各器件做好准备CCH跳过ROM。忽略64位ROM地址,直接向DS18B20发温度变换命令,适用于一个从机工作。ECH告警搜索命令。执行后只有温度超过设定值上限或下限的芯片才做出响应一、ROM操作指令(5个)二、温度操作指令(4个)温度操主要对高速寄存器操作,指令共六个,见下表指令代码作用44H启动DS18B20进行温度转换,12位转换时最长为750ms(9位为93.75ms),结果存入内部9字节的RAM中BEH读暂存器。读内部RAM中9字节的温度数据4EH写暂存器。发出向内部RAM的第2,3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。48H复制暂存器。将RAM中第2,3字节的内容复制到E2PROM中B8H重调E2PROM。将E2PROM中内容恢复到RAM中的第3,4字节。B4H读供电方式。读DS18B20的供电模式。寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1。图3-3DS18B20硬件连接图3.3实验任务P1.0P1.1P1.2P1.3P1.4P1.5P1.62345678P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8RESETXTAL2XTAL1EAALEPSEN39383736353433323130292827262524232221P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD1011121314151617P1.7119189C130PC230PCY12MHzR110KC34.7μICSTC89C51VCC+VCCGNDVCCI/O123P1.0DS18B204.7kP1.0电路如图所示,请你设计程序,利用三位数码管显示温度,小数点1位。要求先仿真,最后下载实现。
本文标题:项目3_数字温度传感器DS18B20应用实例
链接地址:https://www.777doc.com/doc-3419633 .html