基于DS18B20在单片机AT89S52上实现的数字式温度计.doc_第1页
基于DS18B20在单片机AT89S52上实现的数字式温度计.doc_第2页
基于DS18B20在单片机AT89S52上实现的数字式温度计.doc_第3页
基于DS18B20在单片机AT89S52上实现的数字式温度计.doc_第4页
基于DS18B20在单片机AT89S52上实现的数字式温度计.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于DS18B20在单片机AT89S52上实现的数字式温度计功能要求数字式温度计要求测温范围为-50110,精度误差在0.1以内,LED数码管直读显示并通口串口发送到PC机上显示方案论述 在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。 本数字温度设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55125,最大分辩率可达0.0625。DS18B20可以直接读出被测温度值,而且采用1-wire与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。系统硬件电路的设计温度计电路设计原理图如下图所示,控制器使用单片机AT89S52,温度传感器使用DS18B20,用4位共阴LED数码管以动态扫描法实现温度显示基于DS18B20在单片机AT89S52上实现的数字式温度计温度传感器工作原理 DS18B20功能特点1采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。2每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。3低压供电,电源范围从35V,可以本地供电,也可以直接从数据线上窃取电源(寄生电源方式)。4测温范围为-55+125,在-1085范围内误差为0.5。5可编辑数据为912位,转换12位温度时间为750ms(最大)6用户可自设定报警上下限温度7报警搜索命令可识别和寻址哪个器件的温度超出预定值。8DS18B20的分辩率由用户通过EEPROM设置为912位9DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。DS18B20内部结构及功能DS18B20的内部结构如下图所示,主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分温度和数字量的关系ROM操作命令指令说明读ROM命令(33H)读18B20的序行号搜索ROM命令(F0H)识别总线上各器件的编码匹配ROM命令(55H)用于多个DS18B20的定位跳过ROM命令(CCH)此命令执行后,存储器操作将针对总线上的所有操作报警搜索ROM命令(ECH)仅温度超限的器件对此命令做出响应RAM操作命令指令说明温度转换(44H)启动温度转换读暂存器(BEH)读全部暂存器内容,包括CRC字节写暂存器(4EH)写暂存器第2,3和4个字节的数据复制暂存器(48EH)将暂存器中的TH,TL和配置寄存器内容复制到EEPROM中读EEPROM(B8H)将TH,TL和配置寄存器内容从EEPROM中回读至暂存器字节ROMRAM0产品代号温度低8位148位器件序列号温度高8位2TH3TL4配置寄存器5保留6保留7CRC保留8CRC温度配置寄存器的格式如下0R1R211111分辩率设置如表R1R2分辩率设置/位测温精度/C转换时间/ms0090.593.7501100.25187.510110.1253751112(默认)0.0625750DS18B20的通信协议DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的低位在前,高位在后。1 复位和应答脉冲时隙每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传输一位数据。2 写时隙当主机将单总线DQ从逻辑高拉为逻辑低时,即启动一个写时隙,所有的写时隙必须在60120us完成,且在每个循环之间至少需要1us的恢复时间。写0和写1时隙如图所示。在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。3 读时隙 DS18B20器件仅在主机发出读时隙时,才向主机传输数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us。在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。DS18B20发出的数据,在起始时隙之后保持有效时间为15us。因而主机在读时隙期间,必须释放总线。并且在时隙起始后的15us之内采样总线的状态。 单片机程序设计 DOUT BIT P1.7 ;定义P1.7为与DS18B20的通信口 ORG 0000H MOV TMOD,#20H ;定时器T1工作于方式2 MOV TH1,#0E6H ;传输速率为1200波特 MOV TL1,#0E6H SETB TR1 ;启动定时器T1 MOV SCON,#40H ;串行口工作于方式1 MOV R0,#38H ;将温度的最高位符号位放入Ro寄存器MAIN: LCALL RESET ;调用复用子程序 MOV A,#0CCH ;写跳过ROM命令 LCALL WRITE ;调用写子程序 MOV A,#44H ;启动温度转换 LCALL WRITE LCALL RESET ;调用复用子程序 MOV A,#0CCH ;写跳过ROM命令 LCALL WRITE MOV A,#0BEH ;发读存储器命令 LCALL WRITE LCALL READ ;调用读子程序 MOV 32H,3DH ;温度值存储在32H,33H单元 LCALL READ MOV 33H,3DH LCALL CONVERT ;温度转换子程序 LCALL DISPLAY ;调用显示子程序 LCALL SEND ;把温度发送到PC SJMP MAINRESET: CLR DOUT MOV R2,#200NE1: NOP DJNZ R2,NE1 SETB DOUT MOV R2,#30 DJNZ R2,$ ;控制适当的延时 CLR C MOV C,DOUT JC NE3 MOV R6,#80NE5: MOV C,DOUT JC NE3 DJNZ R6,NE5 SJMP RESETNE3: MOV R2,#250 DJNZ R2,$ ;控制适当的延时 RETWRITE: MOV R3,#8 ;定义循环次数WR1: SETB DOUT MOV R4,#8 RRC A ;把对DS18B20操作的命令一位一位的从A移到CY位中 CLR DOUT DJNZ R4,$ ;控制适当的延时 MOV DOUT,C ;把CY位中的命令通过P1.7口发给DS18B20 MOV R4,#20 DJNZ R4,$ ;控制适当的延时 DJNZ R3,WR1 ;循环八次 SETB DOUT RETREAD: MOV R6,#8 ;定义循环次数RE1: CLR DOUT MOV R4,#6 SETB DOUT DJNZ R4,$ ;控制适当的延时 MOV C,DOUT ;把从P1.7的数读到CY位中 RRC A ;把数据一位一位从CY位移到A中 MOV R5,#30 DJNZ R5,$ ;控制适当的延时 DJNZ R6,RE1 ;循环八次 MOV 3DH,A ;把读到的数据从A中放在3DH中 SETB DOUT RETCONVERT: MOV A,33H ADD A,#00H DA A MOV 33H,A ANL A,#0F0H SWAP A MOV 38H,A ;33H高4位 MOV A,33H ANL A,#0FH MOV 37H,A ;33H低4位 MOV A,32H ADD A,#00HDA A MOV 32H,A ANL A,#0F0H SWAP A MOV 36H,A ;32H高4位 MOV A,32H ANL A,#0FH MOV 35H,A ;32H低4位 RETDISPLAY: MOV B,#10H ;数码管位选信号起始的位 MOV A,35H ;显示温度的小数位 LCALL REVEAL LCALL DELAY MOV A,36H ;显示温度整数位的低位 LCALL REVEAL LCALL DELAY MOV A,37H ;显示温度整数位的高位 LCALL REVEAL LCALL DELAY MOV A,38H ;显示温度的符号位 LCALL REVEAL LCALL DELAY RETREVEAL: MOV DPTR,#TAB ;查表字形码 MOVC A,A+DPTR MOV P2,A ;P2口段选 MOV A,B ;循环右移数码管位选信号 RR A MOV B,A MOV P1,A ;P1口位选 RETDELAY: MOV R6,#70D2:MOV R7,#10D1:NOP NOP NOP DJNZ R7,D1 DJNZ R6,D2 RETSEND: MOV A,R0 ;将存放温度的起始位放入A中 MOV DPTR,#TAB2 ;从表中查找温度对应的ASCII码 MOVC A,A+DPTR MOV SBUF,A ;将温度发送到发送缓冲区SBUF JNB TI,$ ;一帧未发完继续查询 CLR TI ;一帧发完了就清发送中断标志位为0 DEC R0 ;将R0的地址减一以读取下一位的温度值 CJNE R0,#34H,J1 ;温度未发完则继续发,直到把温度的四位值全部发完 MOV R0,#38H ;修改R0的起始地址为存放温度的首地址 RETJ1:SJMP SENDTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79HTAB2:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;09的ASCII码表 ENDPC程序设计 stack segment stack stack dw 32 dup(?) stack ends data segment data ends code segment begin proc far assume ss:stack,cs:code,ds:data push ds mov ax,0 push ax mov ax,data mov ds,axMAIN: MOV DX,3FBH ;操作对象为线路控制寄存器LCR MOV AL,80H ;通过给DLAB置1选波特率除数锁存器 OUT DX,AL MOV DX,3F8H ;操作对象为波特率除数锁存器的低8位 MOV AL,60H ;波特率为1200 OUT DX,AL MOV DX,3F9H ;操作对象为波特率除数锁存器的高8位 MOV AL,00H OUT DX,AL MOV DX,3FBH ;每帧8位,1个停止位,无校验位 MOV AL,03H OUT DX,AL MOV DX,3FCH ;Moderm控制寄存器LCR MOV AL,03H OUT DX,AL MOV DX,3F8H ;接收缓冲区RDR IN AL,DXAGAIN: MOV CX,4 ;循环输出四次后会回车换行再输出REC: MOV DX,3FDH ;传输线状态寄存器LSRWAIT: IN AL,DX TEST AL,01H ;检测接收数据准备好了没有 JZ WAIT ;为0表示接收数据未准备好则等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论