单片机课程设计书 DS18B20

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

长沙学院《单片机原理与接口技术》课程设计书设计题目:DS18B20数字温度计设计者:班级:学号:指导老师目录第一章设计任务第二章方案论证第三章硬件设计3.1DS18B20简介3.2DS18B20与单片机接口电路3.3LED显示电路设计3.4总电路的设计第四章软件设计3.1主程序框图3.2各模块公用子程序:初始化子程序、读字节子程序、写子程序3.3设置高速缓冲存储器模块3.4测温模块3.5显示模块3.6主程序第五章课程设计总结参考文献第一章设计任务设计功能要求:利用89C51单片机、DS18B20温度传感器,制作数字温度计。要求测温范围为-50~110℃,精度误差在0.1℃以内,LED数码管直接显示测量温度值。第二章方案论证A、分析本次设计任务可知:1、本设计要利用DS18B20测量温度,需要用89C51单片机控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来。2、本设计要用LED显示温度,可用五个共阳极LED,采用动态扫描法显示读取到单片机中的温度。显示格式举例如下:(1)温度为正值————101.1、99.2第四个LED总是显示点号。(2)温度为负值————-23.1第一个总是显示一横,第四个总是显示点号。B、经以上分析可得:可将本设计功能分为两大模块:1、DS18B20设置模块2、测温电路及其程序3、显示电路及其程序3、在硬件电路上还要加上必要的基础电路:(1)时钟电路本次设计采用时钟频率为:12MHZ(2)按键测温电路及其程序按一次按钮即测一次温度并将测得的温度显示出来)第三章硬件设计3.1DS18B20简介一、DS18B20内部结构简要介绍:DS18820的内部结构上图所示:主要有64位光刻ROM、温度传感器、非易失性温度报警触发器TH和TL、配置寄存器等组成。1.64位光刻ROM是生产厂家给每一个出厂的DS18820命名的产品序列号,可以看作为该器件的地址序列号。其作用是使每一个出厂的DS18820地址序列号都各不相同,这样,就可以实现一根总线上挂接多个DS18820的目的。2.DS18820中的温度传感器完成对温度的测量,输出格式为:16位符号扩展的二进制补码。当测温精度设置为12位时,分辨率为O.0625℃,即O.0625℃/LSB。3.DS18820中的低温触发器TL、高温触发器TH,用于设置低温、高温的报警数值。DS18820完成一个周期的温度测量后,将测得的温度值和TL、TH相比较,如果小于TL,或大于TH,则表示温度越限,将该器件内的告警标志位置位,并对主机发出的告警搜索命令作出响应。需要修改上、下限温度值时,只需使用一个功能命令即可对TL、TH写入,十分方便。4.DS18820中的高速暂存器是一个9字节的存储器开始两个字节为被测温度的数字量。第3、4、5字节分别为TH、TL、配置寄存器的复制,每一次上电复位时被重写。配置寄存器有R0、R1组成,其值决定温度转换的精度位数、转换时间等。第7字节为测温计数的剩余值。第8字节为测温时每度的计数值。第9字节读出的是前8个字节的CRC校验码,通过此码,可判断通讯是否正确。二、DS18B20是可编程的数字温度传感器,其工作是依靠主控MCU给它发控制命令进行德,DS18B20与MCU之间的通信要求遵循如下的操作流程:(1)初始化;(2)ROM存储器操作命令;(3)RAM存储器和控制操作命令;(4)处理/数据;主控MCU对DS18B20的每一次完整的操作都应遵循上面的流程进行。3.2DS18B20与单片机接口电路注:由于找不到DS18B20protues模拟仿真,故只能手画一个。3.3LED显示电路设计(采用五个共阴极LED进行温度显示)3.4总电路图设计第四章软件设计4.1主程序框图3.2初始化、读写各子程序单片机要采用严格的时序信号初始化DS18B20和按位发出读、写DS18B20的命令和数据。1、DS18B20初始化汇编程序(严格按照DS18B20初始化时序来写)ORG1000HCHUSHI18b20:CLREA;使用DS18B20时一定用禁止任何中断产生L0:CLRP1.6;DS18B20总线为低复位电平MOVR2,#300;设置时间常数L1:CLRP1.6DJNZR2,L1;总线复位低电平保持600usSETBP1.6;释放DS18B20总线MOVR2,#30L4:DJNZR2,L4;释放DS18B20总线保持60usCLRCORLC,P1.6开始设置DS18B20报警温度和配置寄存器中的分辨率测温按钮是否按下?NY将测得的温度在LED中显示出来结束控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来JCL0;判断DS18B20是否发送了低电平的存在脉冲,如没发送则重新开始初始化MOVR6,#80L5:ORLC,P1.6JCL3DJNZR6,L5SJMPL0L3:MOVR2,#240L2:DJNZR2,L2RET2、从DS18B20中读出一个字节的数据的汇编程序ORG1200HRDBYTE:RLOP:MOVR0,#8H;设置读位数,即一个字节ACALLRDBIT;调用读一位子程序RRCA;把读到的C依次右移,以送给ADJNZBRLOP;判断读完八位了没?RETRDBIT:;读一位的子程序,要严格按DS18B20写时序来写MOVR0,#23;设置时间常数CLRP1.6;开始读NOP;延迟1usNOP;延迟1usNOP;1usNOP;1usSETBP1.6;释放总线,准备接收严格按DS18B20发送的一位信号MOVC,P1.6;把读到的位放入C中NOP;延迟1usNOP;延迟1usNOP;1usNOP;1usRDDLT:DJNZR0,RDDLT;写等待46usSETBP1.6;准备读下一位RET3、向DS18B20中写出一个字节的命令或数据的汇编程序写字节程序(待写内容在C中)ORG1500HWRBYTE:MOVR0,#8H;设置写位的个数WLOP:RRCA;把要写的位放到C中ACALLWRBIT;调用写一位子程序DJNZR0,WLOP;判断是否读完8位RETORG1600HWRBIT:;写一位子程序(待写内容在C中)MOVR0,#28;设置时间常数CLRP1.6;写开始NOP;延迟1usNOP;延迟1usNOP;1usNOP;1usMOVP1.6,C;将C中内容送到总线WRLT:DJNZR0,WRLT;写等待56usSETBP1.0;释放总线,准备下次写操作RET3.3、设置高速缓冲存储器模块模块功能:设置DS18B20报警温度-50℃、110℃和配置寄存器中的分辨率(12位),其最小分度为0.625℃)ORG1800HSHEZHI:LCALLCHUSHI;调用初始化子程序MOVA,#0CCH;将跳过ROM命令放入A中,准备写入DS18B20LCALLWRBYTB;调用写字节子程序,将跳过ROM命令发送给DS18B20MOVA,#4EH;将写高速缓冲存储器命令放入A中,准备写入DS18B20LCALLWRBYTB;调用写字节子程序,将写高速缓冲存储器命令发送给DS18B20MOVA,#6E;将上限温度110℃写入A中LCALLWRBYTB;将6E写入高速缓冲存储器的字节2中MOVA,#0B2H;将下限温度-50℃写入A中LCALLWRBYTB;将下限温度-50℃写入高速缓冲存储器的字节3中MOVA,#0FFH;选择12位温度分辨率LCALLWRBYTB;将FFH写入高速缓冲存储器的字节4中LCALLCHUSHI;调用初始化子程序停止写操作RET3.4测温模块模块功能:用89C51单片机控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来。测温模块程序ORG0500HGET_TEMP:CLREA;使用DS18B20一定要禁止任何中断LCALLCHUSHI;调用初始化程序MOVA,#0CCHLCALLWRBYTE;送入跳过ROM命令MOVA,#44H;将启动温度转换命令存入A中LCALLWRBYTE;送入启动温度转换命令ACALLDELAY;延时一秒,以给DS18B20足够的转换温度的时间LCALLCHUSHI;温度转换完了,再次初始化MOVA,#0BEHLCALLWRBYTE;送入读温度暂存器命令LCALLRDBYTE;读出高速缓冲存储器0字节数据放于A中MOVR7,A;将读出的0字节数据存入R7中LCALLRDBYTE;读出高速缓冲存储器1字节数据放于A中MOVR6,A;将读出的1字节数据存入R6中RETDELAY:;延时一秒子程序MOVR0,100DDL1:MOVR1,100DDL2:MOVR2,100DDL3:DJNZR2,DL3DJNZR1,DL2DJNZR0,DL1RET3.5显示模块模块功能:1、将单片机中读到的二进制温度数据进行转换,先转换成十六进制,再将十六进制转换成BCD码。2、将转换好的BCD码,送入五个LED中,进行动态扫描显示。显示模块程序:;ORG0700HXIANSHI:movA,R7;将R7H中的十六进制数转换成10进制movb,#10;10进制/10=10进制divabMOVC,FJCNNmovb_bit,a;十位在aSJMPAAANN:MOVb_bit,#10AAA:mova_bit,b;个位在bmovdptr,#numtab;指定查表启始地址movr0,#4dpl1:movr1,#250;显示1000次dplop:mova,a_bit;取个位数MOVCA,@A+DPTR;查个位数的7段代码movp3,a;送出个位的7段代码clrp2.7;开个位显示acalld1ms;显示1mssetbp2.7mova,b_bit;取十位数MOVCA,@A+DPTR;查十位数的7段代码movp3,a;送出十位的7段代码clrp2.6;开十位显示acalld1ms;显示1mssetbp2.6djnzr1,dplop;100次没完循环djnzr0,dpl1;4个100次没完循环ret;1MS延时D1MS:MOVR7,#80DJNZR7,$RET;实验板上的7段数码管0~9数字的共阴显示代码TEMP_TAB:DB00H,01H,02H,03H,04H,05H,06H,07HDB08H,09H,10H,11H,12H,13H,14H,15HDB16H,17H,18H,19H,20H,21H,22H,23HDB24H,25H,26H,27H,28H,29H,30H,31HDB32H,33H,34H,35H,36H,37H,38H,39HDB40H,41H,42H,43H,44H,45H,46H,47HDB48H,49H,50H,51H,52H,53H,54H,55HDB56H,57H,58H,59H,60H,61H,62H,63HDB64H,65H,66H,67H,68H,69H,70Hnumtab:DB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,040H;040H为横线,作为负号使用RET3.6主程序ORG0000HAJMPMAINMAIN:CLREA;使用DS18B20一定要禁止任何中断LCALLSHEZHI;设置DS18B20报警温度和配置寄存器中的分辨率SETRP1.0JNBP1.0,$;等待按钮按下ACALLDELAY;延时40ms,以避开触电抖动JBP1.0,,$;等待按钮放开ACALLDELAY;延时LCALLGET_TEMP;控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来LCALLXIANSHI;将测得的温度在LED中显示出来END第五章课程设计总结本次课程设计,我整整

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功