单总线数字温度计单片机课程设计.docx
- 文档编号:9932940
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:14
- 大小:553.37KB
单总线数字温度计单片机课程设计.docx
《单总线数字温度计单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单总线数字温度计单片机课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
单总线数字温度计单片机课程设计
单片机课程设计
DS1820单总线数字温度计
一统设计目的,用途,功能
1,目的:
.S1820温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。
锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。
2,用途:
温度是工业控制中主要的被控参数之一。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
3,功能.:
DS1820温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。
可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。
二试验原原理
DS1820单总线数字温度计引脚图
DS1820单总线数字温度计一般说明:
DS1820数字温度计提供9位温度读数,指示器件的温度信息经过单线接口送入DS1820或从DS1820送出因此从中央处理器到DS1820仅需连接一条
线和地读写和完成温度变换所需的电源可以由数据线本身提供而不需要外部电源因为每一个DS1820有唯一的系列号siliconserialnumber因此多个DS1820可以存在于同一条单线总线上这允许在许多不同的地方放置温度灵敏器件此性的应用范围包括HVAC环境控制建筑物设备或机械内的温度检测以及过程监视控制中的温度检测特性独特的单线接口只需1个接口引脚即可通信多点multidro能力使分布式温度检测应用得以简化不需要外部元件可用数据线供电不需备份电源
图1的方框图表示DS1820的主要部件DS1820有三个主要的数据部件164位激光laseredROM;2温度灵敏元件和3非易失性温度告警触发器TH和TL
64位激光ROM
每一DS1820包括一个唯一的64位长的ROM编码开绐的8位是单线产品系列编码
DS1820编码是10h接着的48位是唯一的系列号最后的8位是开始56位CRC见图564位ROM和ROM操作控制部分允许DS1820作为一个单线器件工作并循单线总线系统一节中所详述的单线协议直到ROM操作协议被满足DS1820控制分的功能是不可访问的此协议在ROM操作协议流程图图6中叙述单线总线主机必须首先操作五种ROM操作命令之一1ReadROM(读ROM),2)MatchROM(匹配ROM),3)SearchROM(搜索ROM),4)SkipROM(跳过ROM),或5)AlarmSearch告警搜索在成功地执行了ROM操作序列之后DS1820特定的功能便可访问然后总线上主机可提供六个存贮器和控制功能命令之一
DS1820内部结构框图如图1所示。
DS1820测温原理如图2所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
在正常测温情况下,DS1820的测温分辩率为0.5℃以9位数据格式表示,其中最低有效位(LSB)由比较器进行0.25℃比较,当计数器1中的余值转化成温度后低于0.25℃时,清除温度寄存器的最低位(LSB),当计数器1中的余值转化成温度后高于0.25℃,置位温度寄存器的最低位(LSB),如-25.5℃对应的9位数据格式如下:
2提高DS1820测温精度的途径
2.1DS1820高精度测温的理论依据
DS1820正常使用时的测温分辨率为0.5℃,这对于水轮发电机组轴瓦温度监测来讲略显不足,在对DS1820测温原理详细分析的基础上,我们采取直接读取DS1820内部暂存寄存器的方法,将DS1820的测温分辨率提高到0.1℃~0.01℃.
DS1820内部暂存寄存器的分布如表1所示,其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。
首先用DS1820提供的读暂存寄存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度整数部分T整数,然后再用BEH指令读取计数器1的计数剩余值M剩余和每度计数值M每度,考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度T实际可用下式计算得到:
T实际=(T整数-0.25℃)+(M每度-M剩余)/M每度
三温度传感器ds1820的汇编程序
这是关于DS18B20的读写程序,数据脚P3.4,晶振12MHZ
温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒
可以将检测到的温度直接显示到连接到AT89C2051的两个数码管上
显示温度00到99度,很准确哦~~无需校正!
ORG 0000H
;单片机内存分配申明!
TEMPER_L EQU 29H ;用于保存读出温度的低8位
TEMPER_H EQU 28H ;用于保存读出温度的高8位
FLAG1 EQU 38H ;是否检测到DS1820标志位
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
MAIN:
LCALL GET_TEMPER;调用读温度子程序
;显示范围00到99度,显示精度为1度
;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位
;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
;这个转化温度的方法非常简洁,无需乘于0.0625系数
MOV A,29H
MOV C,40 ;将28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
LCALL DISPLAY ;调用数码管显示子程序
AJMP MAIN
;这是DS18B20复位初始化子程序
INIT_1820:
SETB P3.4
NOP
CLR P3.4
;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1:
MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P3.4 ;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P3.4,TSR3;等待DS1820回应
DJNZ R0,TSR2 ;延时
LJMP TSR4
TSR3:
SETB FLAG1 ;置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ;清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#117
TSR6:
DJNZ R0,TSR6 ;时序要求延时一段时间
TSR7:
SETB P3.4
RET
;读出转换后的温度值
GET_TEMPER:
SETB P3.4
LCALL INIT_1820;先复位DS1820
JB FLAG1,TSS2
RET ;判断DS1820是否存在?
若DS1820不存在则返回
TSS2:
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
LCALL DISPLAY
LCALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_18200;将读出的温度数据保存到35H/36H
RET
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8 ;一共8位数据
CLR C
WR1:
CLR P3.4
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.4,C
MOV R3,#23
DJNZ R3,$
SETB P3.4
NOP
DJNZ R2,WR1
SETB P3.4
RET
;读DS1820的程序,从DS1820中读出两个字节的温度数据
READ_18200:
MOV R4,#2 ;将温度高位和低位从DS1820中读出
MOV R1,#29H ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOV R2,#8 ;数据一共有8位
RE01:
CLR C
SETB P3.4
NOP
NOP
CLR P3.4
NOP
NOP
NOP
SETB P3.4
MOV R3,#9
RE10:
DJNZ R3,RE10
MOV C,P3.4
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;显示子程序
DISPLAY:
MOV A,29H ;将29H中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在a
MOV A_BIT,B ;个位在b
MOV DPTR,#NUMTAB ;指定查表启始地址
MOV R0,#4
DPL1:
MOV R1,#250 ;显示1000次
DPLOP:
MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
CLR P3.7 ;开个位显示
ACALL D1MS ;显示1ms
SETB P3.7
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P1,A ;送出十位的7段代码
CLR P3.5 ;开十位显示
ACALL D1MS ;显示1ms
SETB P3.5
DJNZ R1,DPLOP ;250次没完循环
DJNZ R0,DPL1 ;4个250次没完循环
RET
;1MS延时(按12MHZ算)
D1MS:
MOV R7,#80
DJNZ R7,$
RET
;7段数码管0~9数字的共阳显示代码
NUMTAB:
DB081H,0CFH,092H,086H,0CCH,0A4H,0A0H,08FH,080H,084H
END
温度控制流程图
四:
总结及体会
在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。
这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
经过一个学期的学习和实践,我们终于做出了这个项目。
由于刚接触单片机,所以从选择硬件到程序编写调试我们遇到了许多的困难,而且理论和实际有一定的差距,但我们通过交流和向他人请教,最终把所有的问题都解决了。
在操作的过程中,我们感到了自己的动手能力上有不足,但我们增强了自己的动手能力。
更重要的是,在实验中我们不抛弃,不放弃,遇到困难从来不灰心,最终享受到了成功的喜悦。
只要抱着这种精神,我们相信以后的学习生活会做得更好!
五:
参考文献
《单片机课程设计》`《单片微型计算机原理及应用》
《DS1820中文资料》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总线 数字 温度计 单片机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)