欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    单片机课程设计(论文)-基于DS18B20的温度采集系统设计.doc

    • 资源ID:3916486       资源大小:376.50KB        全文页数:21页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计(论文)-基于DS18B20的温度采集系统设计.doc

    ( 基于DS18B20的温度采集系统设计)课程设计说明书系(部): 信息工程系 班 级: 自动化082班 学生姓名: 学号指导教师: 时间:2010年12月13日 到 2010 年 12 月24日课 程 设 计 任 务 书题 目 基于DS18B20的温度采集系统设计 系 (部) 信息工程系 专 业 自动化 班 级 082班 学生姓名 学 号 080819611 12 月 13 日至 12 月 24 日 共 2 周指导教师(签字) 系 主 任(签字) 年 月 日一、设计内容及要求利用DS18B20实现温度采集,并用数码管显示。能实现温度上下限的设置,并能够超限报警(用proteus实现)二、设计原始资料单片机原理及应用教程 范立南 2006年 1月单片机原理及应用教程 刘瑞新 2003年07月 三、设计完成后提交的文件和图表1计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序 2图纸部分:具体电路原理图打印版四、进程安排教学内容 学时 地点资料查阅与学习讨论 1天 单片机实验室分散设计 5天 单片机实验室编写报告 3天 单片机实验室成果验收 1天 单片机实验室 五、主要参考资料电子设计自动化技术基础马建国、孟宪元编 清华大学出版 2004年4月 实用电子系统设计基础 姜威 2008年1月 单片机系统的PROTEUS设计与仿真 张靖武 2007年4月指导老师成绩答辩小组成绩总成绩目录摘要1.系统方案 1.1设计任务 1.2 DS18B20芯片介绍2.仿真图设计。 1.1仿真设计总图 1.2仿真设计中出现的问题3.软件设计 3.1主程序设计3.1.1主程序流程图设计3.1.2主程序程序设计 3.2子程序设计 3.2.1子程序流程图设计 3.2.2子程序程序设计4.系统调试与分析5.设计总结附录:总程序参考文献摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本文利用单片机结合传感器技术开发设计,把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器DS18B20测量环境温度,同时51单片机在现代电子产品中广泛应用以及其技术已经非常成熟,DS18B20可以直接读出被测温度值,而且采用一线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点 关键词: 单片机控制、温度检测、温度传感器、低成本、易使用 Abstract 1.系统方案 1.1 设计的任务书 利用DS18B20实现温度采集,并用数码管显示。(用proteus实现)1.2 DS18B20芯片介绍(1)DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 (2)DS18B20产品的特点l 只要求一个端口即可实现通信.l 在DS18B20中的每个器件上都有独一无二的序列号。 l 实际应用中不需要外部任何元器件即可实现测温。 l 测量温度范围在55。C到125。C之间。 l 数字温度计的分辨率用户可以从9位到12位选择。 l 内部有温度上、下限告警设置。 (3)DS18B20的引脚介绍 TO92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。(底视图)图1 表1DS18B20详细引脚功能描述 序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。(4) DS18B20的使用方法 由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 DS18B20的复位时序 DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。 对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。 DS18B20的写时序 对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。 2仿真图设计 2.1仿真图总图2.2仿真图设计中的问题及解决方案(1)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。(2)开始在p.0-p2.3都接了三极管,基极接的p2.0-p2.3,发射极接的电源,集电极接的数码管的片选口。可是都导不通。不管是把p2.0-p2.3置1还是清0.后来直接把三极管删了。(3)后来在p.0-p2.3都接了非门,可是还导不通。不管是把p2.0-p2.3置1还是清0.后来直接把非门删了。(4)直接用导线连接p2.0-p2.3和数码管的片选口,还是不对。结果忘了改晶振频率。3. 软件设计 3.1主程序设计3.1.1主程序流程图设计3.1.2主程序程序设计 ORG 0000HSJMP STARTORG 0050HSTART: ;设置初值 MOV SP,#70H MOV LED_0,#00H MOV LED_1,#00H CLR SOUND MOV H_TEM,#60 ;高温报警温度设置 MOV L_TEM,#40 ;低温报警温度设置MAIN: LCALL GET_TEMPER ;读出传感器感应温度 MOV A,TEMPER_L MOV C,40H ;将28H中的最低位移入C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV TEMPER_L,A ;循环右移实现把用两个字节存放的温度存到29H中来WAIT: SETB ALARM_L ;关黄灯 SETB ALARM_H ;关红灯 CLR SOUND ;关报警 MOV WENDU,29H ;读取转换结果 MOV A,#99 ;由于选用了两位数码管,设置读数上限为99度 MOV R7,WENDU SUBB A,R7 JC OUT ;判断是否高于99,如高于99输出恒定符号 CLR C MOV A,H_TEM DEC A MOV R0,WENDU SUBB A,R0 ;判断是否高于高温上限 JC HALM MOV R1,L_TEM MOV A,WENDU ;判断是否低于高温报警温度(或下限温度) SUBB A,r1 JC LALM NOP LCALL DISP LJMP MAINLALM: ;低温报警 JNB CLOSE,CL ;关闭报警声 CLR ALARM_L ;亮黄灯 SETB SOUND ;开报警声 LCALL DISP ;显示报警温度 LJMP MAINHALM: ;高温报警 JNB CLOSE,CL ;关闭报警声 MOV R2,#235 ;置计数值 SETB SOUND ;开报警声 DV: LCALL DELAY1mS ;延时1毫秒 DJNZ R2,DV CPL ALARM_H ;标志位取反 LCALL DISP ;显示报警温度 SJMP CL CL: LJMP MAINOUT: ;超过99度上限显示 LCALL GET_TEMPER_2 MOV A,TEMPER_L MOV C,40H ;将28H中的最低位移入C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV TEMPER_L,A LCALL DISP_2 ;调用超限显示 LJMP WAIT3.2子程序设计3.2.1子程序流程图设计(1)读转换温度子程序 (2)单片机读DS18B20的子程序Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?结束CRC校验正确?移入温度暂存器NYN13(3)DS18B20感应(写)温度子程序复位延时16us以上把一个字节DATA 分成8个BIT环移给C 写入一个BIT等待100微妙重新释放总线置R2为8写入下一个BIT写完8 BIT重新释放总线返回3.2.2子程序程序设计6系统调试与分析(1) 刚开始什么都不显示,原因是用作驱动的三极管没导通。后来把三极管成了非门。(2) 换成非门后,显示乱码。直接用导线连接p2.0-p2.3和数码管的片选口。(3) 换成导线后直接挨个出0,改了改延时又先挨个出0,出完0后再挨个显85.0.再改了改延时变成了先挨个出0,出完0后再挨个显85.0.再挨个显示温度。总之不能显示个静态的温度。(4) 在老师的帮助下。我改了改显示子程序,显示完小数部分后延时小一点最后确定为400多us,再把p口重置。结果显示就是一个静态温度了。(5) 不过每次运行一开始会先出现85.0.老师说我扫描时间的问题。我改了改采集温度的时间延时。可是结果只显示0.0或-0.1.(6) 最后我选择用硬件仿真。结果发现proteus上的数码管我接的是共阳的,实验台上的数码管是共阴的。接着我改了改码表。和一些小地方。显示的温度还是有85.0.后来老师说那是ds18b20上电复位的一个必要状态。不过可以屏蔽掉。5.设计总结 经过将近1周的单片机课程设计,终于完成了我的温度采集系统设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把仿真和硬件都做了出来,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。 附录一 程序总清单 ORG 0000H TMPL EQU 29H ;用于保存读出温度的低8位 TMPH EQU 28H ;用于保存读出温度的高8位 BIAOZHI EQU 38H ;是否检测到DS18B20标志位 DATAIN BIT P3.7 ;定义位地址MAIN: LCALL GET_TEMPER ;调用读温度子程序 LCALL CVTTMP ;调用转换子程序 LCALL DISPLAY ;调用数码管显示子程序 AJMP MAIN;= ;复位初始化子程序 INIT_1820: SETB DATAIN NOP CLR DATAIN ;主机发出延时复位低脉冲 MOV R0,#6BH;107 1us MOV R1,#04H;4 1us TSR1:DJNZ R0,$; 2us 107=214us MOV R0,#6BH;107 DJNZ R1,TSR1;2us ( 214+2+1)4=868 SETB DATAIN ;拉高数据线 NOP NOP NOP MOV R0,#32HTSR2:JNB DATAIN,TSR3 ;等待DS18B20回应 1us DJNZ R0,TSR2 ;2us (2+1)32=96us JMP TSR4 ; 延时TSR3: SETB BIAOZHI ; 置标志位,表示DS1820存在 JMP TSR5TSR4: CLR BIAOZHI ; 清标志位,表示DS1820不存在 JMP TSR7TSR5:MOV R0,#6BH;1us TSR6:DJNZ R0,$ ;2us (2+1) 107=321us ; 时序要求延时一段时间TSR7:SETB DATAIN RET;= ;读转换温度子程序( 让DS18B20感应温度,再读其温度)GET_TEMPER:SETB DATAIN LCALL INIT_1820 JB BIAOZHI,TSS2 RET TSS2:MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE MOV A,#44H ;发出温度转换指令 LCALL WRITE ACALL DISPLAY ;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒 LCALL INIT_1820 ;准备读温度前先复位 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE MOV A,#0BEH ;发出读温度命令 LCALL WRITE LCALL READ ;将读出的温度数据保存 RET ;DS18B20感应(写)温度子程序WRITE: MOV R2,#8 ;一共8位数据 CLR CWR1: CLR DATAIN ;开始写入DS18B20总线要处于复位(低)状态 MOV R3,#08 DJNZ R3,$ ;总线复位保持16微妙以上 RRC A ;把一个字节DATA 分成8个BIT环移给C MOV DATAIN,C ;写入一个BIT MOV R3,#50 DJNZ R3,$ ;等待100微妙 SETB DATAIN ;重新释放总线 NOP DJNZ R2,WR1 ;写入下一个BIT SETB DATAIN RET ;单片机读ds18b20的子程序 READ: MOV R4,#2 ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 MOV R1,#29H ;低位存入29H,高位存入28HRE00: MOV R2,#8 ;数据一共有8位RE01: CLR C SETB DATAIN NOP NOP ;延时 CLR DATAIN NOP NOP NOP ;延时 SETB DATAIN MOV R3,#9 DJNZ R3,$ ;延时 MOV C,DATAIN MOV R3,#23 DJNZ R3,$ ;延时 RRC A DJNZ R2,RE01 ;减1不为0转移,为0则读完8位 MOV R1,A DEC R1 ;读高8位 DJNZ R4,RE00 RET;=;转换子程序(先判断正负,在分别取小数个位十位百位,再看百位或是为不存在的时候符号的位子)CVTTMP:MOV A,TMPH ;读高8位 ANL A,#080H ;取符号位 JZ TMPC1 ;判0转移,即为正数转移,负数顺序执行 ;为负数的情况 CLR C MOV A,TMPL ;读低8位 CPL A ADD A,#1 ;求其补码 MOV TMPL,A ;求补再送回 MOV A,TMPH ;读低8位 CPL A ADDC A,#0 ;由于不考虑符号位,则可看成正数 MOV TMPH,A ;再送回 MOV 73H,#0BH ;显示负号(即把负号存在73H中) SJMP TMPC2 ;为正数的情况TMPC1: MOV 73H,#0AH ;正数符号不显示TMPC2:;取小数部分 MOV A,TMPL ;读低8位 ANL A,#0FH ;取出低四位,即小数部分 MOV DPTR,#TMPTAB ;把表头地址给数据指针 MOVC A,A+DPTR ;查表 MOV 70H,A ;把小数部分存到70H ;取个位十位部分 MOV A,TMPL ;再读低8位 ANL A,#0F0H ;取出高四位,即个位部分 SWAP A ;交换到低四位 MOV TMPL,A MOV A,TMPH ;读高8位 ANL A,#0FH ;取其低四位,即十位 SWAP A ;交换到高四位 ;把十位个位合起部分 ORL A,TMPL ;把十位和个位合起来 ;百位部分BCD码转换部分 BCD1:MOV B,#100 DIV AB JZ BCD2 ;判0转移,即百位为0转移,为1顺序执行 MOV 73H,A ;存百位数到73H ;十位部分BCD码转换部分 BCD2:MOV A,#10; XCH A,B DIV AB MOV 72H,A ;存十位数到72H MOV 71H,B ;存个位数到71H NOP ;延时 ;判百位有无部分(有百位只能为1) BCD3:MOV A,73H ANL A,#0FH ;取出百位(虽然百位数只用四位二进制表示,也得清除百位之外的影响) CJNE A,#1,BCD4 ;比较不为1转移,即无百位 SJMP BCD5 ;有百位则个位十位都显示 BCD4:MOV A,72H ANL A,#0FH ;取出十位(虽然十位数也只用四位二进制表示,也得清除其他位的影响) JNZ BCD5 ;判1转移,即十位是1返回 MOV A,73H ;十位为0,读 73H里存的符号 MOV 72H,A ;把百位的符号移到十位 MOV 73H,#0AH ;百位不显示 BCD5:RET ;小数部分码表 由于四位二进制数可以表示16个数 TMPTAB:DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;=;显示子程序DISPLAY: ;显示小数部分 MOV R1,#70H; MOV A,R1MOV DPTR,#TAB;MOVC A,A+DPTR;MOV P1,A;MOV P2,#0F1H ;置p2.0为1,即最右的一块数码管显示小数部分LCALL D1S ;延时 MOV P2,#0F0H ;重置p2口,消除影响;显示个位部分MOV R1,#71H;MOV A,R1;MOV DPTR,#TAB;MOVC A,A+DPTR;MOV P1,A; MOV P2,#0F2H ;置p2.1为1,即倒数第二块数码管显示个位部分 CLR P1.7 ;亮小数点 LCALL D1S ;延时 MOV P2,#0F0H ; 重置p2口,消除影响 ;显示十位部分 MOV R1,#72H; MOV A,R1;MOV DPTR,#TAB;MOVC A,A+DPTR;MOV P1,A; MOV P2,#0F4H ;置p2.2为1,即正数第二块数码管显示十位部分 LCALL D1S ;延时 MOV P2,#0F0H ; 重置p2口,消除影响;显示百位部分 MOV R1,#73H; MOV A,R1;MOV DPTR,#TAB;MOVC A,A+DPTR;MOV P1,A; MOV P2,#0F8H ;置p2.3为1,即第一块数码管显示百位部分 LCALL D1S ;延时 MOV P2,#0F0H ;重置p2口, 消除影响 RET;数码管共阳级码表TAB:DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,0FFH,0BFH;=;延时子程序D1S:MOV R6,#2 ;1usD1MS:MOV R4,#50 ;1usDL:NOP ;1usNOP ;1us DJN Z R4,DL ;2us,循环共执行【(1+1+2 )x50】=200us DJNZ R6,D1MS ;2us,循环共执行【(1+1+200+2)x2】=408usRET END参考文献电子设计自动化技术基础 马建国、孟宪元编 2004年4月 实用电子系统设计基础 姜威编 2008年1月 单片机系统的PROTEUS设计与仿真 张靖武编 2007年4月21

    注意事项

    本文(单片机课程设计(论文)-基于DS18B20的温度采集系统设计.doc)为本站会员(小小飞)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开