基于AT89C52的数字温度计设计与仿真Word文档下载推荐.docx
《基于AT89C52的数字温度计设计与仿真Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于AT89C52的数字温度计设计与仿真Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
例如:
提高测温精度和分辨力;
增加测试功能;
总线技术的标准化与标准化;
可靠性及平安性设计;
单片测温系统等。
1.2本课题的研究内容
采用智能温度传感器DS18B20,它直接输出数字量,精度高,电路简单,只需要模拟DS18B20的读写时序,根据DS18B20的协议读取转换的温度[2]。
本设计使用了美国Dallas半导体公司的新一代数字式温度传感器DS18B20,它具有独特的单总线接口方式,即允许在一条信号线上挂接数十甚至上百个数字式传感器,从而使测温装置与各传感器的接口变得十分简单,克制了模拟式传感器与微机接口时需要的A/D转换器及其它复杂外围电路的缺点。
工作时由控制信号进展具体测量点识别,这使得布线工作大大简化,可以方便地构成多传感器测量网络。
此外,与传统的热敏电阻传感器相比,DS18B20具有更高的测量精度。
所以,相对于传统温度传感器而言,DS18B20数字温度传感器具有更高的经济性、灵活性、抗干扰性和准确度,在科学研究和生产实际中得到了广泛的应用[3]。
第二章系统硬件设计
2.1总体设计
本方案设计的系统模块由单片机系统、温度传感器模块、数码管显示模块和电源模块组成,其总体架构如图2.1。
图2.1系统构造图
该系统可以实时地显示当前环境的温度。
系统是以AT89C52单片机为核心,在开场运行它时主机先发送初始化命令使设备启动,再发送温度转换命令使数字温度传感器DS18B20把测得的模拟温度转换为串行数字信号供单片机采集。
同时,显示器上显示出目前环境的实际温度,当温度低与或高与设定的温度,系统会通过蜂鸣器发出警报。
2.2AT89C52简介
2.2.1性能特点
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符[4]。
片内有4KB可在线重复编程的快闪擦写存储器;
存储数据保存时间为10年;
宽工作电压范围:
VCC可为2.7V到6V;
全静态工作:
可从0Hz至16MHz;
程序存储器具有3级加密保护;
128*8位内部RAM;
32条可编程I/O线,两个16位定时器/计数器;
中断构造具有5个中断源和2个优先级,可编程全双工串行通道,空闲状态维持低功耗和掉电状态保存存储内容。
2.2.2引脚介绍
AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器[5]。
AT89C52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断构造,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停顿工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89S52。
AT89C52引脚如图2.2所示:
图2.2AT89C52引脚图
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1〞时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;
在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,
此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流〔IIL〕。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入〔P1.0/T2〕和时器/计数器2的触发输入〔P1.1/T2EX〕,具体如下所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能
P1.0T2〔定时器/计数器T2的外部计数输入〕,时钟输出
P1.1T2EX〔定时器/计数器T2的捕捉/重载触发信号和方向控制〕
P1.5MOSI〔在系统编程用〕
P1.6MISO〔在系统编程用〕
P1.7SCK〔在系统编程用〕
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1〞时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器〔例如执行MOVXDPTR〕时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址〔如MOVXRI〕访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1〞时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
P3口亦作为AT89S52特殊功能〔第二功能〕使用,如下所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
2.3DS18B20介绍
2.3.1DS18B20性能特点
采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。
每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。
低压供电,电源范围从3~5V,可以本地供电,也可以直接从数据线上窃取电源〔寄生电源方式〕。
测温范围为-55℃~+125℃,在-10℃~85℃范围内误差为±
0.5℃。
可编辑数据为9~12位,转换12位温度时间为750ms〔最大〕。
用户可自设定报警上下限温度。
报警搜索命令可识别和寻址哪个器件的温度超出预定值。
DS18B20的分辩率由用户通过EEPROM设置为9~12位。
DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进展数据通信[7]。
2.3.2DS18B20内部构造及功能
DS18B20的内部构造如下列图2.3所示,主要包括:
寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码〔CRC〕发生器等7局部
图2.3DS18B20内部构造
温度和数字量的关系如图2.4所示,ROM\RAM操作命令如表2.1\2.2所示。
图2.4温度和数字量的关系
表2.1ROM操作命令
指令
说明
读ROM命令〔33H〕
读18B20的序行号
搜索ROM命令〔F0H〕
识别总线上各器件的编码
匹配ROM命令〔55H〕
用于多个DS18B20的定位
跳过ROM命令〔CCH〕
此命令执行后,存储器操作将针对总线上的所有操作
报警搜索ROM命令〔ECH〕
仅温度超限的器件对此命令做出响应
表2.2RAM操作命令
温度转换〔44H〕
启动温度转换
读暂存器〔BEH〕
读全部暂存器内容,包括CRC字节
写暂存器〔4EH〕
写暂存器第2,3和4个字节的数据
复制暂存器〔48EH〕
将暂存器中的TH,TL和配置存放器内容复制到EEPROM中
读EEPROM〔B8H〕
将TH,TL和配置存放器内容从EEPROM中回读至暂存器
各字节在ROM\RAM中的设置如表2.3所示,温度配置存放器如表2.4所示,分辨率设置如表2.5所示。
表2.3各字节在ROM\RAM中的设置
字节
ROM
RAM
产品代号
温度低8位
1
48位
器件
序列
号
温度高8位
2
TH
3
TL
4
配置存放器
5
保存
6
7
CRC
8
表2.4温度配置存放器
R1
R2
表2.5分辩率设置
分辩率设置/位
测温精度/C
转换时间/ms
9
0.5
93.75
10
0.25
187.5
11
0.125
375
12〔默认〕
0.0625
750
2.3.3DS18B20的通信协议
DS18B20采用严格的单总线通信协议,以保证数据的完整性。
该协议定义了几种信号类型:
复位脉冲、应答脉冲、写0、写1、读0和读1。
除了应答脉冲所有这些信号都由主机发出同步信号。
总线上传输的所有数据和命令都是以字节的低位在前。
1.初始化序列:
复位脉冲和应答脉冲
在初始化过程中,主机通过拉低单总线至少480µ
s,以产生复位脉冲(TX)。
然后主机释放总线并进入接收(RX)模式。
当总线被释放后,5kΩ的上拉电阻将单总线拉高。
DS18B20检测到这个上升沿后,延时15µ
s~60µ
s,通过拉低总线60µ
s~240µ
s产生应答脉冲。
初始化波形如图2.5所示。
图2.5初始化脉冲
2.读和写时序
在写时序期间,主机向DS18B20写入指令;
而在读时序期间,主机读入来自DS18B20的指令。
在每一个时序,总线只能传输一位数据。
读/写时序如图2.6所示。
(1)写时序
存在两种写时序:
“写1〞和“写0〞。
主机在写1时序向DS18B20写入逻辑1,而在写0时序向DS18B20写入逻辑0。
所有写时序至少需要60µ
s,且在两次写时序之间至少需要1µ
s的恢复时间。
两种写时序均以主机拉低总线开场。
在写时序开场后的15µ
s期间,DS18B20采样总线的状态。
如果总线为高电平,那么逻辑1被写入DS18B20;
如果总线为低电平,那么逻辑0被写入DS18B20。
(2)读时序
图2.6DS18B20读/写时序图
DS18B20只能在主机发出读时序时才能向主机传送数据。
所以主机在发出读数据命令后,必须马上产生读时序,以便DS18B20能够传送数据。
所有读时序至少60µ
s,且在两次独立的读时序之间至少需要1µ
每次读时序由主机发起,拉低总线至少1µ
s。
在主机发起读时序之后,DS18B20开场在总线上传送1或0。
假设DS18B20发送1,那么保持总线为高电平;
假设发送0,那么拉低总线。
当传送0时,DS18B20在该时序完毕时释放总线,再由上拉电阻将总线拉回空闲高电平状态。
DS18B20发出的数据在读时序下降沿起始后的15µ
s内有效,因此主机必须在读时序开场后的15µ
s内释放总线,并且采样总线状态。
DS18B20在使用时,一般都采用单片机来实现数据采集。
只需将DS18B20信号线与单片机1位I/O线相连,且单片机的1位I/O线可挂接多个DS18B20,就可实现单点或多点温度检测[8]。
2.4复位电路设计
复位电路工作原理:
电容在上接高电平,电阻在下接地,中间为RST。
这种复位电路的工作原理是:
通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程序,即为低电平,单片机开场正常工作[9]。
复位电路如图2.7所示。
图2.7复位电路
2.5时钟电路设计
时钟电路作用:
单片机外部必须接上振荡器〔也可以是内部振荡器〕,其提供的高频脉冲经过分频处理后,成为单片机内部时钟信号,作为片内各部件协调工作的控制信号。
如果没有时钟信号,触发器的状态就不能改变,单片机内部的所有电路在完成一个任务后将最终到达一个稳定状态而不能再继续进展其它任何工作了。
时钟电路如图2.8所示:
图2.8时钟电路
2.6DS18B20与单片机接口电路设计
温度计电路设计原理图如下列图2.9所示,控制器使用单片机AT89S52,温度传感器使用DS18B20,用4位共阴LED数码管以动态扫描法实现温度显示[10]
图2.9DS18B20与单片机接口电路
第三章系统软件设计
3.1软件设计总体思路及主程序流程图
本系统采用汇编语言编写,主程序主要由三局部构成,系统通电后首先初始化系统,依次完成温度采集、温度处理、数据显示等三项功能。
温度采集局部主要完成温度数据采集任务;
温度处理局部主要是将采集到的温度数据转换成十进制数据;
数据显示局部主要实现温度数据的显示,显示方式为固定显示。
系统软件主流程图如3.1所示:
图3.1系统软件总流程图
3.2底层根本操作
初始化:
初始化是DSl8B20的底层根本操作之一。
通过单线总线进展的所有操作都从一个初始化序列开场。
初始化序列包括一个由CPU发出的复位脉冲及其后由DS18B20发出的存在脉冲。
存在脉冲让CPU知道DS18B20在总线上且已做好操作准备。
数据写:
数据写是DS18B20的底层根本操作之一,所有的指令、数据发送均由该操作完成。
DS18B20的写操作都是逐位进展的,因此,采用C5l中的位右移操作来实现。
数据读:
数据读是DS18B20的底层根本操作之一,温度值和其它状态信息的传回均由该操作完成。
3.3指令操作
DSl8B20提供了一系列指令来控制传感器的工作。
下面只简单介绍本系统所用到的最根本的几条。
1.SkipROM[CCH]
用于1条I/O总线上只挂1个DS18B20的情况,使DS18B20跳过多个传感器的识别过程。
如果一条I/O总线上挂了不止1个传感器,总线上就会发生数据冲突。
2.ConvertT[44H]
启动一次温度转换过程。
温度转换命令被执行后,DS18B20保持等待状态。
3.ReadScratchpad[BEH]
用于读取暂存器的内容。
温度转换的结果和其它状态信息均以此命令读出。
读取将从字节0开场,一直进展下去,直到字节8读完。
如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
3.4仿真结果
本论文设计在Proteus上仿真实现了所需要求,仿真结果如图3.2、图3.3所示
图3.2仿真实验图
图3.3仿真实验图
总结
程序在编译过程中,出现了一些语法错误,经过细心修改得以纠正。
但是,将程序下载到单片机之后,发现串口显示模块一直显示“127.5〞,经过推断得知,读取的温度值为全“1〞,出现这个问题,全是因为DS18B20有严格的时序和通信协议,在每次读取温度数据时,都有其严格的时序要求,经过检查,发现程序中有一个地方少加了一个1毫秒左右的延时,按照DS18B20的时序原理,把忘记加的延时加上之后,就可以让单片机读取传感器的温度值了。
此次数字温度计设计,让我学会了标准化程序的编写、程序调试的各种方法以及解决调试过程中出现的一系列的问题。
更重要的是让我明白程序的优化是多么重要。
要想编写出一个系统的程序,就必须十分清楚硬件电路中所用芯片的工作原理以及使用它们的一些考前须知,比方这次设计中所用的DS18B20数字温度传感器,它的时序要求十分严格,由于它是采用单总线构造的输入输出方法,它的时序中所用到的延时必然很关键,时间过长了会使整个温度计的反响时间变慢,延时时间过短会使传感器不能正常工作。
本课题的重点、难点是:
〔1〕初步接触温度传感器,要对传感器的原理、构造、应用等各方面从头开场琢磨;
〔2〕了解并掌握了传感器的根本理论知识,更深入的掌握单片机的开发应用和PC编程控制。
为以后从事单片机软硬件产品的设计开发、PC软件开发打下了良好的根底,树立了独立从事产品研发的信心,并在这种能力上得到了比拟充分的锻炼。
参考文献
[1]陈跃东.DS18B20集成温度传感器原理及其应用[J].XX工程科技学院学报,2002.8(4):
34-38.
[2]周月霞,孙传友.DSl8B20硬件连接及软件编程[J].传感器世界杂志,2001.12(3):
25-29.
[3]魏英智.DSl8B20在温度控制中的应用[J].XX科技学院学报,2005.46(3):
92-93.
[4]谢维成,杨加国.单片机原理与应用及C51程序设计[M].:
清华大学,2006.
[5]赵亮,侯国锐.单片机C语言编程与实例[M].:
人民邮电,2003.
[6]X粤,倪伟.DSISB20在分布式测温系统中的应用[J].XX工学报,2002.11(5):
57-59.
[7]藏荣,游风荷,周景霞.由单片机和多片DS1820组成的多点电温度测控系统[J].国外电子元器件,2002
(1):
60-62.
[8]况荣华,容太平.I2C总线在单片机上的实现[J].国外电子元器件,2001(6):
46-49.
[9]陈世利等.SP1串行Flash在数据存储系统中的应用[J].国外电子元器件.2001(10):
20-23.
[10]邓建华.可缩程看门狗监控EEPROM芯片[J],电子世界,2001(5):
31-32.
[11]何立民.单片机应用技术选编[M].航空航天大学出版,1996.
[12]吴江,陈尚松.单总线技术在测控系统中的应用[J].电测与仪表,1999(9).
附件
附件1:
源程序清单
TEMP1EQU5AH;
符号位和百位公用的存放单元
TEMP2EQU5BH;
十位存放单元
TEMP3EQU5CH;
个位存放单元
TEMP4EQU5DH;
TEMP5EQU5EH
TEMP6EQU5FH;
数据临时存放单元
TEMP7EQU60H
TEMP8EQU61H
ORG0000H
AJMPMAIN
ORG0020H
MAIN:
MOVS