基于AT89C51单片机的多点温度测量系统设计 (2)_第1页
基于AT89C51单片机的多点温度测量系统设计 (2)_第2页
基于AT89C51单片机的多点温度测量系统设计 (2)_第3页
基于AT89C51单片机的多点温度测量系统设计 (2)_第4页
基于AT89C51单片机的多点温度测量系统设计 (2)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机应用系统设计课 题:基于AT89C51单片机的多点温度测量系统设计 姓 名: 班 级: 学 号: 指导老师: 日 期: 引 言在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都需要多点温度测量系统。因此,多点温度测量技术实现尤为重要。美国Dallas公司推出的数字温度传感器DSl8B20,电源供电范围3.05.5V;温度测量范围为-55+125;具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信;在-10+85温度范围内具有0.5精度;用户可编程设定912位的分辨率。以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统1。1

2、DS18B20简介DSl8B20是美国Dallas半导体公司推出的一种智能数字温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现912位的数字值读数方式;可以分别在93.75ms和750 ms内完成9位和12位的数字量;从DS18B20读出信息或写入DS18B20信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。使用DS18B20可使系统结构更趋简单,可靠性更高2。 DSl8B20的内部结构如图所示,主要包括寄生电源电路、64位只读存储器(ROM)和单线接口、存储器和控制逻辑、存放中间数

3、据的高速暂存存储器、温度传感器、报警上限寄存器TH、报警下限寄存器TL、配置寄存器和8位CRC(循环冗余校验码)发生器。DSl8B20的核心是其数字温度传感器,精度可以通过用户编程配置为9、10、11和12位,其分别对应于O.5、O.25、O.125和O.062 5,可以满足各种不同的分辨率要求。开始一次温度转换时,微处理器需要向DSl8B20发出Convert T指令。转换完成之后,该温度数据存放在高速暂存存储器的温度寄存器中,占用2字节,并且DSl8B20返回到空闲状态。当DSl8B20采用外部供电方式时,主机可以在发送温度转换指令后发起一次读时隙。若此时该DSl8820已经完成温度转换,

4、它将会返回1,否则返回O。2 系统硬件设计多点温度测量电路主要由以下几部分组成:两个温度传感器DS18B20及其选择开关电路,控制器单片机AT89C51、扫描驱动电路、数码管LED显示器、报警电路、报警温度控制电路及电源电路等。单片机AT89C51DS18B20LED显示器 扫描驱动DS18B20温度控制电路报警电路电 源多点温度计组成方框图温度传感器从测试点采集温度,然后把温度转换成电压(或电流),温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏,不同的温度传感器,输出电压的范围也差别很大。单片机AT89C51是多点温度测量电路的控制核心,它将采集到的数字

5、温度电压值,经过计算处理,得到相应的温度值,经扫描驱动送到LED显示器以数字形式显示测量的温度。LED显示器用于显示测量温度的结果。报警温度控制电路用于在不同应用中灵活设定报警温度,在超过设定范围时,报警电路进行报警。多点温度测量电路原理图3 系统软件设计3.1系统流程图温度计主程序流程图 读出温度子程序流程图发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束温度转换命令子程序流程图 计算温度子程序流程图 显示数据刷新子程序流程图3.2多点温度测量系统程序;常数定义TMEL EQU 0E0H ;20ms,定时器0时间常数TMEH EQU 0B1HTMEPHEAD EQU 36H;工

6、作内存定义BITST DATA 20HTIMEISOK BIT BITST.1TEMPONEOK BIT ITST.2TEMPL DATA 26HTEMPH DATA 27HTEMPHC DATA 28HTEMPLC DATA 29H; 引脚定义TEMPDIN BIT P3.7; 中断向量区ORG 000HLJMP STARTORG 00BH LJMP T0IT;系统初始化ORG 100HSTART: MOV SP,#60HCLSMEM: MOV R0,#20H MOV R1,#60HCLSMEM1: MOV R0,#00H INC R0 DJNZ R1,CLSMEM1 MOV TMOD,#0

7、0100001B MOV TH0,#TIMEL MOV TL0,#TIMEH SJMP INITERROR: NOP LJMP START NOPINIT: NOP SETB ET0 SETB TR0 SETB EA MOV PSW,#00H CLR TEMPONEOK LJMP MAIN; 定时器0中断服务程序T0IT: PUSH PSW MOV PSW,#10H MOV TH0,#TIMEH MOV TL0,#TIMEL INC R7 CJNE R7,#32H,T0ITI MOV R7,#00H SETB TIMEISOKTOIT1: POP PSW RETI; 主程序MAIN: LCAL

8、L DISP1 JNB TIME1SOK,MAIN CLR TIME1SOKJNB TEMPONEOK,MAIN2LCALL READTEMP1LCALL CONVTEMPLCALL DISPBCDLCALL DISP1 MAIN2: LCALL READTEMPSETB TEMPONEOKLJMP MAIN;子程序区; RESET DS18B20INITDS1820: SETB TEMPDINNOP NOPCLR TEMPDINMOV R6,#0A0HDJNZ R6,$MOV R6,#0A0HDJNZ R6,$SETB TEMPDIN MOV R6,#32H DJNZ R6,$MOV R6,

9、#3CHLOOP1820: MOV C,TEMPDINJC INITDS1820OUTDJNZ R6,LOOP1820MOV R6,#064HDJNZ R6,$SJMP INITDS1820RET;INITDS1820OUT: SETB TEMPDINRET; 读DS18B20的程序,从DS18B20中读出一个字节的数据READDS1820: MOV R7,#08HSETB TEMPDINNOPNOPREADDS1820LOOP: CLR TEMPDINNOPNOPNOPSETB TEMPDINMOV R6,#07HDJNZ R6,$MOV C,TEMPDINMOV R6,#3CHDJNZ R

10、6,$RRC ASETB TEMPDINDJNZ R7,READDS1820LOOPMOV R6,#3CHDJNZ R6,$RET; 写DS18B20的程序,从DS18B20中写一个字节的数据WRITEDS1820: MOV R7,#08HSETB TEMPDINNOPNOPWRITEDS1820LOP: CLR TEMPDINMOV R6,#07HDJNZ R6,$RRC AMOV TEMPDIN,CMOV R6,#34HDJNZ R6,$SETB TENPDINDJNZ R7,WRITEDS1820LOPRET; READ TEMPREADTEMP: LCALL INITEDS1820MO

11、V A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#44HLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$RETREADTEMP1: LCALL INITDS1820MOV A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#0BEHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV R5,#09HMOV R0,#TEMPHEADMOV B,#00HREADTEMP2: LCALL READDS1820MOV R0,AINC R0REA

12、DTEMP21:LCALL CRC8CALDJNZ R5,READTEMP2MOV A,BJNZ READTEMPOUTMOV A,TEMPHEAD+0MOV TEMPL,AMOV A,TEMPHEAD+1MOV TEMPH,AREADTEMPOUT: RET; 处理温度BCD码子程序CONVTEAMP: MOV A,TEMPHANL A,#80HJZ TEMPC1CLR CMOV A,TEMPLCPL AADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BHSJMP TEMPCHTEMPC1: MO

13、V TEMPHC,#0AHTEMPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FHMOV DPTR,#TEMPDOTTABMOVC A,A+DPTRMOV TEMPLC,AMOV A,TEMPLANL A,#0F0HSWAP AMOV TEMPL,AMOV A,TEMPHANL A,#0FHSWAP AORL A,TEMPLLCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHCMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP AORL A,TEMPLC

14、MOV TEMPLC,AMOV A,R7JZ TEMPC12ANL A,#0FHSWAP AMOV R7,AMOV A,TEMPHCANL A,#0FHORL A,R7MOV TEMPHC,ATEMPC12: RET; 小数部分码表TEMPDOTTAB: DB 00H, 01H, 01H, 02H, 03H, 03H, 04H,04H,05H,06HDB 06H,07H,08H,09H,09H; 显示区BCD码温度值刷新子程序DISPBCD: MOV A,TEMPLCANL A,#0FHMOV 70H,AMOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,AMOV A,TE

15、MPHCANL A,#0FHMOV 72H,AMOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,AMOV A,TEMPHCANL A,#0F0HCJNZ A,#010H,DISPBCD0SJMP DISPBCD2DISPBCD0: MOV A,TEMPHC ANL A,#0FH JNZ DISPBCD2 MOV A,TEMPHC SWAP AANL A,#0FHMOV 73H,#0AHMOV 72H,ADISPBCD2: RET; 显示子程序; 显示数据在70H73H单元内,用4位LED共阳数码管显示,P1口输出段码数据,;P3口作扫描控制,每个LED数码管亮1ms时间再

16、逐位循环。DISP1: MOV R1,#70H MOV R5,#0FEHPLAY: MOV P1,#0FFH MOV A,R5 MOV P3,A MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR MOV P1,A MOV A,R5 JB ACC.1,LOOP5 CLR P1.7LOOP5: LCALL DLIMS INC R1 MOV A,R5 JNB ACC.3,ENDOUT RL A MOV R5,A AJMP PLAYENDOUT: MOV P1,#0FEH MOV P3,#0FEHRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82

17、H,0F8H,80H,90H,0FFH,0BFH;共阳段码表 “0” “1” “2” “3” “4” “5” “6” “7” “8” “9” “不亮” “” DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2 DJNZ R6,DL1 RET; 单字节十六进制转BCDHEX2BCD1: MOV B,#064H DIV AB MOV R7,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RET; Calculate CRC8 Values. Uses The CCITT8 Polynomial,Expresse

18、d As; X8+X5+X4+1CRC8CAL: PUSH ACCMOV R7,#08HCRC8LOOP1: XRL A,BRRC AMOV A,BJNC CRC8LOOP2XRL A,#18HCRC8LOOP2: RRC AMOV B,APOP ACCRR APUSH ACCDJNZ R7,CRC8LOOP1POP ACCRETEND 4 软硬件结合把实验板正、负极接在直流稳压电源上(5V),然后打开“WAVE 6000”软件进行硬件检查,先检查LED的连接是否正确。因为用P2口进行列扫描,P1口输出段码,可编程给P3口直接置0则可以检查。通过检查发现LED输出全为“8”,则硬件电路基本是正

19、确的。4.1软件的检查基本硬件检查完毕后,进行软件检查,首先对程序进行检查,改正程序中存在的错误语句,直到程序编译全通过。下一步则进行程序执行,结果只LED 显示为乱码,于是检查软件“09”的数值表示正确与否。通过计算无误,然后检查硬件发现问题出在P1口的输出上,因为共阳极LED表示顺序“dp 、g 、f 、e 、d 、c 、b 、a”则应是P1.0对应a、P1.1对应b、P1.7对应dp,这样输出的数值才正确。于是重新焊接硬件错误的部分。全部改过来后,重新执行程序,又出现问题,首先数码管的b段亮度较弱,经检查发现244上接的电阻大小不一致,与b段相对应的那个电阻比其他的大,然后更换了电阻;对

20、相应的线进行修改之后又发现有一路不能正常测量温度,对电路进行检查发现开关的其中一路没有导通。排除问题后本设计正常运行。4.2 烧写程序软件检查完毕则烧写程序。程序烧写完毕后把AT89S52 安装在实验板上,重新接通电源,但LED显示还是4个“8”,于是用示波器检查电路的晶振,接好后示波器上显示正弦波,则表明晶振是起振的。于是检查复位电路,用电压表直接给它进行复位,则实验板上的LED显示4个“0”,并且开始显示周围温度。则确定问题一定在复位电路上,于是检查复位电路并连接好,电路开始正常工作。5系统仿真Proteus软件是Labcenter公司的一款电路设计与仿真软件,它包括ISIS、ARES等软

21、件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境8。本设计的核心部分为八点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在Keil下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。仿真中的一个画面如下面图3中的效果所示,此时采集的是第5通路的测量温度。6系统运行与数据分析根据系统软硬件设计方案搭建实际系统电路,依次采集八路温度测量数据,并在LED数码管上显示,同时与现场温度计测量值进行比较,系统运行结果如下,见表2:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论