基于AT89C51单片机的多点温度测量系统设计 2文档格式.docx
- 文档编号:19201510
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:234.61KB
基于AT89C51单片机的多点温度测量系统设计 2文档格式.docx
《基于AT89C51单片机的多点温度测量系统设计 2文档格式.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的多点温度测量系统设计 2文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
。
2系统硬件设计
多点温度测量电路主要由以下几部分组成:
两个温度传感器DS18B20及其选择开关电路,控制器单片机AT89C51、扫描驱动电路、数码管LED显示器、报警电路、报警温度控制电路及电源电路等。
单片机
AT89C51
DS18B20
LED显示器
扫描驱动
温度控制电路
报警电路
电源
多点温度计组成方框图
温度传感器从测试点采集温度,然后把温度转换成电压(或电流),温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏,不同的温度传感器,输出电压的范围也差别很大。
单片机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
INIT:
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,$
SETBTEMPDIN
MOVR6,#32H
DJNZR6,$
MOVR6,#3CH
LOOP1820:
MOVC,TEMPDIN
JCINITDS1820OUT
DJNZR6,LOOP1820
MOVR6,#064H
SJMPINITDS1820
RET
INITDS1820OUT:
读DS18B20的程序,从DS18B20中读出一个字节的数据
READDS1820:
MOVR7,#08H
READDS1820LOOP:
CLRTEMPDIN
MOVR6,#07H
MOVC,TEMPDIN
RRCA
DJNZR7,READDS1820LOOP
写DS18B20的程序,从DS18B20中写一个字节的数据
WRITEDS1820:
WRITEDS1820LOP:
MOVTEMPDIN,C
MOVR6,#34H
SETBTENPDIN
DJNZR7,WRITEDS1820LOP
READTEMP
READTEMP:
LCALLINITEDS1820
MOVA,#0CCH
LCALLWRITEDS1820
MOVA,#44H
READTEMP1:
LCALLINITDS1820
MOVA,#0BEH
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
MOVA,TEMPH
ADDCA,#00H
MOVTEMPHC,#0BH
SJMPTEMPCH
TEMPC1:
MOVTEMPHC,#0AH
TEMPC11:
MOVA,TEMPHC
SWAPA
MOVTEMPHC,A
ANLA,#0FH
MOVDPTR,#TEMPDOTTAB
MOVCA,@A+DPTR
MOVTEMPLC,A
ANLA,#0F0H
ORLA,TEMPL
LCALLHEX2BCD1
ORLA,TEMPHC
ORLA,TEMPLC
MOVA,R7
JZTEMPC12
MOVR7,A
MOVA,TEMPHC
ORLA,R7
TEMPC12:
小数部分码表
TEMPDOTTAB:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,09H,09H
显示区BCD码温度值刷新子程序
DISPBCD:
MOVA,TEMPLC
MOV70H,A
MOVA,TEMPLC
MOV71H,A
MOV72H,A
MOV73H,A
CJNZA,#010H,DISPBCD0
SJMPDISPBCD2
DISPBCD0:
ANLA,#0FH
JNZDISPBCD2
SWAPA
MOV73H,#0AH
DISPBCD2:
显示子程序
显示数据在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
JBACC.1,LOOP5
CLRP1.7
LOOP5:
LCALLDLIMS
INCR1
JNBACC.3,ENDOUT
RLA
MOVR5,A
AJMPPLAY
ENDOUT:
MOVP1,#0FEH
MOVP3,#0FEH
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
单字节十六进制转BCD
HEX2BCD1:
MOVB,#064H
DIVAB
MOVR7,A
MOVA,#0AH
XCHA,B
ORLA,B
CalculateCRC—8Values.UsesTheCCITT—8Polynomial,ExpressedAs
X^8+X^5+X^4+1
CRC8CAL:
PUSHACC
MOVR7,#08H
CRC8LOOP1:
XRLA,B
JNCCRC8LOOP2
XRLA,#18H
CRC8LOOP2:
RRCA
MOVB,A
POPACC
RRA
PUSHACC
DJNZR7,CRC8LOOP1
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于AT89C51单片机的多点温度测量系统设计 基于 AT89C51 单片机 多点 温度 测量 系统 设计