单片机课程设计书 DS18B20

  • 格式:doc
  • 大小:134.00 KB
  • 文档页数:15

长沙学院《单片机原理与接口技术》课程设计书设计题目:DS18B20数字温度计设计者:班级:学号:指导老师目录第一章设计任务第二章方案论证第三章硬件设计3.1 DS18B20简介3.2 DS18B20与单片机接口电路3.3 LED显示电路设计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.1 DS18B20简介一、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.2 DS18B20与单片机接口电路注:由于找不到DS18B20protues模拟仿真,故只能手画一个。

3.3 LED显示电路设计(采用五个共阴极LED进行温度显示)3.4 总电路图设计第四章软件设计4.1 主程序框图3.2 初始化、读写各子程序单片机要采用严格的时序信号初始化DS18B20和按位发出读、写DS18B20的命令和数据。

1、DS18B20初始化汇编程序(严格按照DS18B20初始化时序来写)ORG 1000HCHUSHI18b20:CLR EA ;使用DS18B20时一定用禁止任何中断产生L0:CLR P1.6 ;DS18B20总线为低复位电平MOV R2,#300 ;设置时间常数L1:CLR P1.6DJNZ R2,L1 ;总线复位低电平保持600usSETB P1.6 ;释放DS18B20总线MOV R2,#30L4:DJNZ R2,L4 ;释放DS18B20总线保持60usCLR CORL C,P1.6JC L0 ;判断DS18B20是否发送了低电平的存在脉冲,如没发送则重新开始初始化MOV R6,#80L5:ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3:MOV R2,#240L2:DJNZ R2,L2RET2、从DS18B20中读出一个字节的数据的汇编程序ORG 1200HRDBYTE:RLOP:MOV R0,#8H ;设置读位数,即一个字节ACALL RDBIT ;调用读一位子程序RRC A ;把读到的C依次右移,以送给ADJNZ B RLOP ;判断读完八位了没?RETRDBIT: ;读一位的子程序, 要严格按DS18B20写时序来写MOV R0,#23 ;设置时间常数CLR P1.6 ;开始读NOP ;延迟1usNOP ;延迟1usNOP ;1usNOP ;1usSETB P1.6 ;释放总线,准备接收严格按DS18B20发送的一位信号MOV C,P1.6 ;把读到的位放入C中NOP ;延迟1usNOP ;延迟1usNOP ;1usNOP ;1usRDDLT: DJNZ R0,RDDLT ;写等待46usSETB P1.6 ;准备读下一位RET3、向DS18B20中写出一个字节的命令或数据的汇编程序写字节程序(待写内容在C中)ORG 1500HWRBYTE:MOV R0,#8H ;设置写位的个数WLOP:RRC A ;把要写的位放到C中ACALL WRBIT ;调用写一位子程序DJNZ R0,WLOP ;判断是否读完8位RETORG 1600HWRBIT: ;写一位子程序(待写内容在C中)MOV R0,#28 ;设置时间常数CLR P1.6 ;写开始NOP ;延迟1usNOP ;延迟1usNOP ;1usNOP ;1usMOV P1.6,C ;将C中内容送到总线WRLT:DJNZ R0,WRLT ;写等待56usSETB P1.0 ;释放总线,准备下次写操作RET3.3、设置高速缓冲存储器模块模块功能:设置DS18B20报警温度-50℃、110℃和配置寄存器中的分辨率(12位),其最小分度为0.625℃)ORG 1800HSHEZHI:LCALL CHUSHI ;调用初始化子程序MOV A,#0CCH ;将跳过ROM命令放入A中,准备写入DS18B20LCALL WRBYTB ;调用写字节子程序,将跳过ROM命令发送给DS18B20MOV A,#4EH ; 将写高速缓冲存储器命令放入A中,准备写入DS18B20LCALL WRBYTB ; 调用写字节子程序,将写高速缓冲存储器命令发送给DS18B20MOV A,#6E ;将上限温度110℃写入A中LCALL WRBYTB ;将6E写入高速缓冲存储器的字节2中MOV A,#0B2H ;将下限温度-50℃写入A中LCALL WRBYTB ;将下限温度-50℃写入高速缓冲存储器的字节3中MOV A,#0FFH ;选择12位温度分辨率LCALL WRBYTB ;将FFH写入高速缓冲存储器的字节4中LCALL CHUSHI ;调用初始化子程序停止写操作RET3.4 测温模块模块功能:用89C51单片机控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来。

测温模块程序ORG 0500HGET_TEMP:CLR EA ;使用DS18B20一定要禁止任何中断LCALL CHUSHI ;调用初始化程序MOV A,#0CCHLCALL WRBYTE ;送入跳过ROM命令MOV A,#44H ;将启动温度转换命令存入A中LCALL WRBYTE ;送入启动温度转换命令ACALL DELAY ;延时一秒,以给DS18B20足够的转换温度的时间LCALL CHUSHI ;温度转换完了,再次初始化MOV A,#0BEHLCALL WRBYTE ;送入读温度暂存器命令LCALL RDBYTE ;读出高速缓冲存储器0字节数据放于A中MOV R7,A ; 将读出的0字节数据存入R7中LCALL RDBYTE ; 读出高速缓冲存储器1字节数据放于A中MOV R6,A ; 将读出的1字节数据存入R6中RETDELAY: ;延时一秒子程序MOV R0,100DDL1:MOV R1,100DDL2:MOV R2,100DDL3:DJNZ R2,DL3DJNZ R1,DL2DJNZ R0,DL1RET3.5显示模块模块功能:1、将单片机中读到的二进制温度数据进行转换,先转换成十六进制,再将十六进制转换成BCD码。

2、将转换好的BCD码,送入五个LED中,进行动态扫描显示。

显示模块程序:;ORG 0700HXIANSHI:mov A,R7 ;将R7H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abMOV C,FJC NNmov b_bit,a ;十位在aSJMP AAANN:MOV b_bit,#10AAA:mov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop: mov a,a_bit ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码mov p3,a ;送出个位的7段代码clr p2.7 ;开个位显示acall d1ms ;显示1mssetb p2.7mov a,b_bit ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码mov p3,a ;送出十位的7段代码clr p2.6 ;开十位显示acall d1ms ;显示1mssetb p2.6djnz r1,dplop ;100次没完循环djnz r0,dpl1 ;4个100次没完循环ret;1MS延时D1MS: MOV R7,#80DJNZ R7,$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主程序ORG 0000HAJMP MAINMAIN:CLR EA ; 使用DS18B20一定要禁止任何中断LCALL SHEZHI ;设置DS18B20报警温度和配置寄存器中的分辨率SETR P1.0JNB P1.0,$ ;等待按钮按下ACALL DELAY ;延时40ms,以避开触电抖动JB P1.0,,$ ;等待按钮放开ACALL DELAY ;延时LCALL GET_TEMP ; 控制DS18B20测量温度,并将DS18B20测得温度读取到单片机中来LCALL XIANSHI ; 将测得的温度在LED中显示出来END第五章课程设计总结本次课程设计,我整整。