基于ATC单片机的多点温度测量系统设计.docx
- 文档编号:3465550
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:242.36KB
基于ATC单片机的多点温度测量系统设计.docx
《基于ATC单片机的多点温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《基于ATC单片机的多点温度测量系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于ATC单片机的多点温度测量系统设计
课题:
基于AT89C51单片机地多点温度测量系统设计姓名:
班级:
学号:
指导老师:
日期:
引言
在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都需要多点温度测量系统.因此,多点温度测量技术实现尤为重要.美国Dallas公司推出地数字温度传感器DSl8B20,电源供电范围3.0~5.5V;温度测量范围为-55~+125℃;具有独特地单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器地通信;在-10~+85℃温度范围内具有±0.5℃精度;用户可编程设定9~12位地分辨率.以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统[1].
1DS18B20简介
DSl8B20是美国Dallas半导体公司推出地一种智能数字温度传感器.与传统地热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现9~12位地数字值读数方式;可以分别在93.75ms和750ms内完成9位和12位地数字量;从DS18B20读出信息或写入DS18B20信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接地DS18B20供电,而无需额外电源.使用DS18B20可使系统结构更趋简单,可靠性更高[2].
DSl8B20地内部结构如图所示,主要包括寄生电源电路、64位只读存储器(ROM)和单线接口、存储器和控制逻辑、存放中间数据地高速暂存存储器、温度传感器、报警上限寄存器TH、报警下限寄存器TL、配置寄存器和8位CRC(循环冗余校验码)发生器.DSl8B20地核心是其数字温度传感器,精度可以通过用户编程配置为9、10、11和12位,其分别对应于O.5℃、O.25℃、O.125℃和O.0625℃,可以满足各种不同地分辨率要求.开始一次温度转换时,微处理器需要向DSl8B20发出ConvertT指令.转换完成之后,该温度数据存放在高速暂存存储器地温度寄存器中,占用2字节,并且DSl8B20返回到空闲状态.当DSl8B20采用外部供电方式时,主机可以在发送温度转换指令后发起一次读时隙.若此时该DSl8820已经完成温度转换,它将会返回"1",否则返回"O".
2系统硬件设计
多点温度测量电路主要由以下几部分组成:
两个温度传感器DS18B20及其选择开关电路,控制器单片机AT89C51、扫描驱动电路、数码管LED显示器、报警电路、报警温度控制电路及电源电路等.
单片机
AT89C51
DS18B20
LED显示器
扫描驱动
DS18B20
温度控制电路
报警电路
电源
多点温度计组成方框图
温度传感器从测试点采集温度,然后把温度转换成电压(或电流),温度传感器输出电压地大小随温度地高低变化而变化,电压值地变化范围从几个微伏到几个毫伏,不同地温度传感器,输出电压地范围也差别很大.单片机AT89C51是多点温度测量电路地控制核心,它将采集到地数字温度电压值,经过计算处理,得到相应地温度值,经扫描驱动送到LED显示器以数字形式显示测量地温度.LED显示器用于显示测量温度地结果.报警温度控制电路用于在不同应用中灵活设定报警温度,在超过设定范围时,报警电路进行报警.
多点温度测量电路原理图
3系统软件设计
3.1系统流程图
温度计主程序流程图读出温度子程序流程图
发DS18B20复位命令
发跳过ROM命令
发温度转换开始命令
结束
温度转换命令子程序流程图
计算温度子程序流程图显示数据刷新子程序流程图
3.2多点温度测量系统程序
;常数定义
TMELEQU0E0H;20ms,定时器0时间常数
TMEHEQU0B1H
TMEPHEADEQU36H
;工作内存定义
BITSTDATA20H
TIMEISOKBITBITST.1
TEMPONEOKBITITST.2
TEMPLDATA26H
TEMPHDATA27H
TEMPHCDATA28H
TEMPLCDATA29H
;引脚定义
TEMPDINBITP3.7
;中断向量区
ORG000H
LJMPSTART
ORG00BH
LJMPT0IT
;系统初始化
ORG100H
START:
MOVSP,#60H
CLSMEM:
MOVR0,#20H
MOVR1,#60H
CLSMEM1:
MOV@R0,#00H
INCR0
DJNZR1,CLSMEM1
MOVTMOD,#00100001B
MOVTH0,#TIMEL
MOVTL0,#TIMEH
SJMPINIT
ERROR:
NOP
LJMPSTART
NOP
INIT:
NOP
SETBET0
SETBTR0
SETBEA
MOVPSW,#00H
CLRTEMPONEOK
LJMPMAIN
;定时器0中断服务程序
T0IT:
PUSHPSW
MOVPSW,#10H
MOVTH0,#TIMEH
MOVTL0,#TIMEL
INCR7
CJNER7,#32H,T0ITI
MOVR7,#00H
SETBTIMEISOK
TOIT1:
POPPSW
RETI
;主程序
MAIN:
LCALLDISP1
JNBTIME1SOK,MAIN
CLRTIME1SOK
JNBTEMPONEOK,MAIN2
LCALLREADTEMP1
LCALLCONVTEMP
LCALLDISPBCD
LCALLDISP1
MAIN2:
LCALLREADTEMP
SETBTEMPONEOK
LJMPMAIN
;子程序区
;RESETDS18B20
INITDS1820:
SETBTEMPDIN
NOP
NOP
CLRTEMPDIN
MOVR6,#0A0H
DJNZR6,$
MOVR6,#0A0H
DJNZR6,$
SETBTEMPDIN
MOVR6,#32H
DJNZR6,$
MOVR6,#3CH
LOOP1820:
MOVC,TEMPDIN
JCINITDS1820OUT
DJNZR6,LOOP1820
MOVR6,#064H
DJNZR6,$
SJMPINITDS1820
RET
;
INITDS1820OUT:
SETBTEMPDIN
RET
;读DS18B20地程序,从DS18B20中读出一个字节地数据
READDS1820:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
READDS1820LOOP:
CLRTEMPDIN
NOP
NOP
NOP
SETBTEMPDIN
MOVR6,#07H
DJNZR6,$
MOVC,TEMPDIN
MOVR6,#3CH
DJNZR6,$
RRCA
SETBTEMPDIN
DJNZR7,READDS1820LOOP
MOVR6,#3CH
DJNZR6,$
RET
;写DS18B20地程序,从DS18B20中写一个字节地数据
WRITEDS1820:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
WRITEDS1820LOP:
CLRTEMPDIN
MOVR6,#07H
DJNZR6,$
RRCA
MOVTEMPDIN,C
MOVR6,#34H
DJNZR6,$
SETBTENPDIN
DJNZR7,WRITEDS1820LOP
RET
;READTEMP
READTEMP:
LCALLINITEDS1820
MOVA,#0CCH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVA,#44H
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
RET
READTEMP1:
LCALLINITDS1820
MOVA,#0CCH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVA,#0BEH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVR5,#09H
MOVR0,#TEMPHEAD
MOVB,#00H
READTEMP2:
LCALLREADDS1820
MOV@R0,A
INCR0
READTEMP21:
LCALLCRC8CAL
DJNZR5,READTEMP2
MOVA,B
JNZREADTEMPOUT
MOVA,TEMPHEAD+0
MOVTEMPL,A
MOVA,TEMPHEAD+1
MOVTEMPH,A
READTEMPOUT:
RET
;处理温度BCD码子程序
CONVTEAMP:
MOVA,TEMPH
ANLA,#80H
JZTEMPC1
CLRC
MOVA,TEMPL
CPLA
ADDA,#01H
MOVTEMPL,A
MOVA,TEMPH
CPLA
ADDCA,#00H
MOVTEMPH,A
MOVTEMPHC,#0BH
SJMPTEMPCH
TEMPC1:
MOVTEMPHC,#0AH
TEMPC11:
MOVA,TEMPHC
SWAPA
MOVTEMPHC,A
MOVA,TEMPL
ANLA,#0FH
MOVDPTR,#TEMPDOTTAB
MOVCA,@A+DPTR
MOVTEMPLC,A
MOVA,TEMPL
ANLA,#0F0H
SWAPA
MOVTEMPL,A
MOVA,TEMPH
ANLA,#0FH
SWAPA
ORLA,TEMPL
LCALLHEX2BCD1
MOVTEMPL,A
ANLA,#0F0H
SWAPA
ORLA,TEMPHC
MOVTEMPHC,A
MOVA,TEMPL
ANLA,#0FH
SWAPA
ORLA,TEMPLC
MOVTEMPLC,A
MOVA,R7
JZTEMPC12
ANLA,#0FH
SWAPA
MOVR7,A
MOVA,TEMPHC
ANLA,#0FH
ORLA,R7
MOVTEMPHC,A
TEMPC12:
RET
;小数部分码表
TEMPDOTTAB:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,09H,09H
;显示区BCD码温度值刷新子程序
DISPBCD:
MOVA,TEMPLC
ANLA,#0FH
MOV70H,A
MOVA,TEMPLC
SWAPA
ANLA,#0FH
MOV71H,A
MOVA,TEMPHC
ANLA,#0FH
MOV72H,A
MOVA,TEMPHC
SWAPA
ANLA,#0FH
MOV73H,A
MOVA,TEMPHC
ANLA,#0F0H
CJNZA,#010H,DISPBCD0
SJMPDISPBCD2
DISPBCD0:
MOVA,TEMPHC
ANLA,#0FH
JNZDISPBCD2
MOVA,TEMPHC
SWAPA
ANLA,#0FH
MOV73H,#0AH
MOV72H,A
DISPBCD2:
RET
;显示子程序
;显示数据在70H—73H单元内,用4位LED共阳数码管显示,P1口输出段码数据,;P3口作扫描控制,每个LED数码管亮1ms时间再逐位循环.
DISP1:
MOVR1,#70H
MOVR5,#0FEH
PLAY:
MOVP1,#0FFH
MOVA,R5
MOVP3,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
MOVA,R5
JBACC.1,LOOP5
CLRP1.7
LOOP5:
LCALLDLIMS
INCR1
MOVA,R5
JNBACC.3,ENDOUT
RLA
MOVR5,A
AJMPPLAY
ENDOUT:
MOVP1,#0FEH
MOVP3,#0FEH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;共阳段码表“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“—”
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;单字节十六进制转BCD
HEX2BCD1:
MOVB,#064H
DIVAB
MOVR7,A
MOVA,#0AH
XCHA,B
DIVAB
SWAPA
ORLA,B
RET
;CalculateCRC—8Values.UsesTheCCITT—8Polynomial,ExpressedAs
;X^8+X^5+X^4+1
CRC8CAL:
PUSHACC
MOVR7,#08H
CRC8LOOP1:
XRLA,B
RRCA
MOVA,B
JNCCRC8LOOP2
XRLA,#18H
CRC8LOOP2:
RRCA
MOVB,A
POPACC
RRA
PUSHACC
DJNZR7,CRC8LOOP1
POPACC
RET
END
4软硬件结合
把实验板正、负极接在直流稳压电源上(5V),然后打开“WAVE6000”软件进行硬件检查,先检查LED地连接是否正确.因为用P2口进行列扫描,P1口输出段码,可编程给P3口直接置0则可以检查.通过检查发现LED输出全为“8”,则硬件电路基本是正确地.
4.1软件地检查
基本硬件检查完毕后,进行软件检查,首先对程序进行检查,改正程序中存在地错误语句,直到程序编译全通过.下一步则进行程序执行,结果只LED显示为乱码,于是检查软件“0—9”地数值表示正确与否.通过计算无误,然后检查硬件发现问题出在P1口地输出上,因为共阳极LED表示顺序“dp、g、f、e、d、c、b、a”则应是P1.0对应a、P1.1对应b、……、P1.7对应dp,这样输出地数值才正确.于是重新焊接硬件错误地部分.全部改过来后,重新执行程序,又出现问题,首先数码管地b段亮度较弱,经检查发现244上接地电阻大小不一致,与b段相对应地那个电阻比其他地大,然后更换了电阻;对相应地线进行修改之后又发现有一路不能正常测量温度,对电路进行检查发现开关地其中一路没有导通.排除问题后本设计正常运行.
4.2烧写程序
软件检查完毕则烧写程序.程序烧写完毕后把AT89S52安装在实验板上,重新接通电源,但LED显示还是4个“8”,于是用示波器检查电路地晶振,接好后示波器上显示正弦波,则表明晶振是起振地.于是检查复位电路,用电压表直接给它进行复位,则实验板上地LED显示4个“0”,并且开始显示周围温度.则确定问题一定在复位电路上,于是检查复位电路并连接好,电路开始正常工作.
5系统仿真
Proteus软件是Labcenter公司地一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB地设计,而ISIS模块用来完成电路原理图地绘制与仿真.Proteus地软件仿真基于VSM技术,它与其他软件最大地不同也是最大地优势就在于它能仿真大量地单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等.通过Proteus软件地使用我们能够轻易地获得一个功能齐全、实用方便地单片机实验环境[8].
本设计地核心部分为八点温度数据地快速准确读取,完成电路设计和软件编程后,将程序在Keil下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现.仿真中地一个画面如下面图3中地效果所示,此时采集地是第5通路地测量温度.
6系统运行与数据分析
根据系统软硬件设计方案搭建实际系统电路,依次采集八路温度测量数据,并在LED数码管上显示,同时与现场温度计测量值进行比较,系统运行结果如下,见表2:
表2传感器与温度计数据对照
测量结果数据与温度计直接测量吻合,符合仿真结果,本系统地测量范围为0-99℃,DS18B20数字值读取位数为8位,精确到1℃,满足日常测量应用.另外可以通过改变DS18B20数字值读取位数提高精度,也可以根据实际应用要求扩大量程.在系统基础上可以加入开关控制测量通路选择,并实现超过测量范围蜂鸣器报警.
7结论
该温度测量系统结构简单、程序设计方便,基于仿真系统构建地实际电路运行良好,8支DS18B20地读取时间与1支DS18B20地读取时间基本相等,测温迅速准确.本设计采用Proteus仿真地好处在于可以迅速观察到设计效果,同时可以通过改变元器件参数使整个电路性能达到最优化.避免了多次购买元器件及制板,节省了设计时间与经费,提高了设计效率和质量.
8参考文献
[1]高玉芹.基于AVR单片机和DS18B20地多点温度测量系统[J].仪表技术,2005(3):
15-18.
[2]周润景,张丽娜.基于Proteus地电路及单片机系统设计与仿真[M].北京:
北京航空航天大学出版社,2006:
321-339.
[3]蒋鸿宇,王勇,植涌.由DS1820构成地多点温度测量系统[J].单片机及嵌入式系统应用,2007
(1):
59-61.
[4]谢维成,杨加国.单片机原理与应用及C51程序设计[M].北京:
清华大学出版社,2006,35-38.
[5]赵海兰,赵祥伟.智能温度传感器DS18B20地原理与应用[J].现代电子技术,2003(4):
32-34.
[6]金奎焕李允俊任正权.如何使用KEIL8051C编译器2002:
7-81077-239-2
[7]胡汉才.单片机原理及其接口技术.清华大学出版社,1996:
274-279
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ATC 单片机 多点 温度 测量 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)