![单片机课程设计(论文)基于DS18B20的温度采集系统设计_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/02aa03be-77a6-46db-bab2-f6b096b3356c/02aa03be-77a6-46db-bab2-f6b096b3356c1.gif)
![单片机课程设计(论文)基于DS18B20的温度采集系统设计_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/02aa03be-77a6-46db-bab2-f6b096b3356c/02aa03be-77a6-46db-bab2-f6b096b3356c2.gif)
![单片机课程设计(论文)基于DS18B20的温度采集系统设计_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/02aa03be-77a6-46db-bab2-f6b096b3356c/02aa03be-77a6-46db-bab2-f6b096b3356c3.gif)
![单片机课程设计(论文)基于DS18B20的温度采集系统设计_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/02aa03be-77a6-46db-bab2-f6b096b3356c/02aa03be-77a6-46db-bab2-f6b096b3356c4.gif)
![单片机课程设计(论文)基于DS18B20的温度采集系统设计_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/02aa03be-77a6-46db-bab2-f6b096b3356c/02aa03be-77a6-46db-bab2-f6b096b3356c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、( 基于ds18b20的温度采集系统设计)课程设计说明书系(部): 信息工程系 班 级: 自动化082班 学生姓名: 学号指导教师: 时间:2010年12月13日 到 2010 年 12 月24日课 程 设 计 任 务 书题 目 基于ds18b20的温度采集系统设计 系 (部) 信息工程系 专 业 自动化 班 级 082班 学生姓名 学 号 080819611 12 月 13 日至 12 月 24 日 共 2 周指导教师(签字) 系 主 任(签字) 年 月 日一、设计内容及要求利用ds18b20实现温度采集,并用数码管显示。能实现温度上下限的设置,并能够超限报警(用proteus实现)二、设计
2、原始资料单片机原理及应用教程 范立南 2006年 1月单片机原理及应用教程 刘瑞新 2003年07月三、设计完成后提交的文件和图表1计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序 2图纸部分:具体电路原理图打印版四、进程安排教学内容 学时 地点资料查阅与学习讨论 1天 单片机实验室分散设计 5天 单片机实验室编写报告 3天 单片机实验室成果验收 1天 单片机实验室 五、主要参考资料电子设计自动化技术基础马建国、孟宪元编 清华大学出版 2004年4月 实用电子系统设计基础 姜威 2008年1月 单片机系统的proteus设计与仿真 张靖武 2007年4月指导老师成绩答辩小
3、组成绩总成绩目录摘要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.设计总结附录:总程序参考文献摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控
4、制,智能化控制方向发展。本文利用单片机结合传感器技术开发设计,把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器ds18b20测量环境温度,同时51单片机在现代电子产品中广泛应用以及其技术已经非常成熟,ds18b20可以直接读出被测温度值,而且采用一线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点 关键词: 单片机控制、温度检测、温度传感器、低成本、易使用 abstract 1.系统方案 1.1 设计的任务书 利用ds18b20实现温度采集,并用数码管显示。(用proteus实现)1.2 ds18b20芯片介绍(1)ds18b20基本知识 ds18b20数字温度计
5、是dallas公司生产的1wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 (2)ds18b20产品的特点l 只要求一个端口即可实现通信.l 在ds18b20中的每个器件上都有独一无二的序列号。 l 实际应用中不需要外部任何元器件即可实现测温。 l 测量温度范围在55。c到125。c之间。 l 数字温度计的分辨率用户可以从9位到12位选择。 l 内部有温度上、下限告警设置。 (3)ds18b20的引脚介绍 to92封装的ds18b20的引脚排列见图1,其引脚功能描述见表1。(底视图)图1 表1ds
6、18b20详细引脚功能描述 序号名称引脚功能描述1gnd地信号2dq数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3vdd可选择的vdd引脚。当工作于寄生电源时,此引脚必须接地。(4) ds18b20的使用方法 由于ds18b20采用的是1wire总线协议方式,即在一根数据线实现数据的双向传输,而对at89s51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对ds18b20芯片的访问。 由于ds18b20是在一根i/o线上读写数据,因此,对读写的数据位有着严格的时序要求。ds18b20有严格的通信协议来保证各
7、位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 ds18b20的复位时序 ds18b20的读时序 对于ds18b20的读时序分为读0时序和读1时序两个过程。 对于ds18b20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让ds18b20把数据传输到单总线上。ds18b20在完成一个读时序过程,至少需要60us才能完成。 ds18b
8、20的写时序 对于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.
9、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
10、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 wend
11、u,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 ;亮
12、黄灯 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
13、 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校验正确?移入温度暂存器nyn(3)ds18b20感应(写)温度子程序复位延时16us以上把一个字节data 分成8个bit环移给c 写入一个bit等待100微妙重新释放总线置r2为8写入下一个bit写完8 bit重新释放总线返回3.
14、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.老师说我扫描时间的问题。我改了改采集温度的时
15、间延时。可是结果只显示0.0或-0.1.(6) 最后我选择用硬件仿真。结果发现proteus上的数码管我接的是共阳的,实验台上的数码管是共阴的。接着我改了改码表。和一些小地方。显示的温度还是有85.0.后来老师说那是ds18b20上电复位的一个必要状态。不过可以屏蔽掉。5.设计总结 经过将近1周的单片机课程设计,终于完成了我的温度采集系统设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把仿真和硬件都做了出来,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙
16、的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是bcd码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。 附录一 程序总清单 org 0000h tmpl equ 29h ;用于保存读出
17、温度的低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
18、 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:
19、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 ;准备
20、读温度前先复位 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,$ ;等待
21、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 m
22、ov 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 ;读低
23、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 ;取出高四位,即个
24、位部分 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 ;延时 ;判百位
25、有无部分(有百位只能为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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出租车买卖合同范本
- 北京市居住房出租合同范本
- 消防喷淋改造协议书范本
- 班组安全协议书范本
- 生猪养殖场租赁合同范本
- 苏科版数学七年级下册《数学活动 拼图·公式》听评课记录5
- 重庆老式实木地板施工方案
- 初中母题数学试卷
- 人教版数学八年级上册听评课记录《13-3等腰三角形》(第1课时)
- 2024北京通州区六年级(上)期末数学试题及答案
- 中医膏方临床应用与制备工艺规范 DB32/T 4870-2024
- JJG(交通) 208-2024 车货外廓尺寸动态现场检测设备
- 苏北四市(徐州、宿迁、淮安、连云港)2025届高三第一次调研考试(一模)英语试卷(含答案)
- TSG07-2019锅炉安装工艺+焊接专用工艺卡+施工记录表
- 2024-2025学年陕西省西安市浐灞区数学三年级第一学期期末统考试题含解析
- 2025年信息系统集成服务公司组织架构和业务流程
- 护理人员的职业安全防护
- 西藏自治区拉萨市城关区多校2024-2025学年六年级上学期期中英语试题
- 胸外科讲课全套
- 医疗器械GSP相关
- 2023年海南省公务员录用考试《行测》真题卷及答案解析
评论
0/150
提交评论