单片机多机温度.docx
《单片机多机温度.docx》由会员分享,可在线阅读,更多相关《单片机多机温度.docx(29页珍藏版)》请在冰点文库上搜索。
单片机多机温度
摘要
本设计将采用2片单片机,组成多机温度检测系统——亦即采用AT89S528位单片机作为控制核心设计了温度测量系统。
该系统由温度检测模块、微控制器模块、串口通信模块、数码管显示和报警模块等四部分组成。
要求该系统能够对0℃~100℃范围的温度进行测量,且精度误差小于0.5℃,此外可以实现任意设定温度的上下限报警功能。
还要同时利用4位八段数码管来实时显示环境温度。
本系统由下位单片机采集温度,通过串行通信传送至上位单片机,而用上位单片机用数码管显示温度大小。
(即由下位AT89S52单片机通过p2.3口不断循环采集数字化温度传感器DS18B20的温度数据,然后转换成十进制温度值,通过串行口发送至上位AT89S52单片机,由上位机通过串行口接收数据,再与报警温度进行比较,判断是否进行报警,上位机同时驱动四位八段数码管将温度显示出来。
)
然而实现本系统的主要难点则在于温度的采集和传送。
DS18B20只需要接到单片机的一个I/O口上,由于单总线为开漏所以需要外接一个4.7K的上拉电阻。
其功能强大,但却需要不断地发送采集命令以及循环读取它传出的数值,然后进行换算成十进制温度。
众所周知,单片机串口通信是单片机一个非常有用的功能,可以构建多机系统来实现更为强大的功能,而且通过MAX232可以进行远距离的通信,实现远程控制。
当然,我们设计的该系统结构简单,成本较低,同时也具有较好的应用价值。
不过毕竟我们对于此类设计与实验理解的都不够透彻,再加上我们对此门课程的理解能力有限,所以,可能会在一定的方面出现不足,还望老师体谅。
关键词:
AT89S51单片机串口通信18B20Max232温度测量
目录
1概述1
1.1设计目的及意义1
1.2任务及要求1
1.3下位机温度采集发送系统2
1.4上位机显示及报警系统2
2系统总体方案及硬件设计3
2.1方案论证及系统总体方案3
2.2主要硬件简介7
3软件设计11
3.1功能分析11
4实验仿真13
5课程设计体会14
参考文献15
附1源程序代码16
附2系统原理图24
1概述
1.1设计目的及意义
随着工业化需求的提高,分布式系统的发展以及控制设备与监控设备的需要,多机通信系统设计的监控系统逐步普及,并且要求其具有良好的人机操作界面、强大的IQ设备驱动能力,可与各种智能仪表、PLC、智能模块、板卡、变频器等进行实时通信。
单片机具有的接口丰富,稳定性高,价格低廉,在信息处理速度方面已达到GHz(如:
DSP)的性能,并且它与A\D转换,温度检测等一系列小的模组组合可以快速完成大量基础性的工作。
他们自身集成的或者可通过扩展实现的多点通信功能(如:
CAN总线,485,RS-232)使得在构建小型网络进行交互通信,多点监控方面,尤其在检测大量数据(如:
温度,湿度,模拟量,数字量)并且需要互传数据的工业现场中发挥了重要的作用。
采用两块单片机检测温度系统的设计是实现多级通信的基础,能让我们更好的理解多机通信的原理及实现方法。
本设计的目的就是用两块单片机通过它们之间的串口通信来检测系统的温度。
它分为两部分:
A机和B机。
A机用来检测系统的温度,检测时采用的是DS18b20单线数字温度计,温度数据信息经A机处理后通过单片机的RXD、TXD串行发端传输数据,最终由B机显示所测温度。
1.2任务及要求
基本要求:
(1)采用2片单片机,组成多机温度检测系统;
(2)下位单片机采集温度,通过串行通信传送至上位单片机;
(3)上位单片机用数码管显示温度大小;
(4)基本范围0~100摄氏度;
(5)精度误差小于0.5摄氏度;
(6)可以任意设定温度的上下限报警功能。
1.3下位机温度采集发送系统
本系统由下位单片机采集温度,通过串行通信传送至上位单片机,而用上位单片机用数码管显示温度大小。
下位机温度采集发送系统是本系统的主要核心之一,它的主要功能是采集DS18B20的温度数据,继而进行转换,并通过串口发送出去。
该温度测量系统采用8051内核的AT89S52八位单片机实现的。
温度采集发送系统由温度检测模块、下位控制器模块、发送放大模块三部分组成。
如下图1-3温度测量系统的系统框图:
图1-3温度测量系统的系统框图
温度检测模块中温度传感器DS18B20采集温度数据,通过P2.3口传给下位单片机,微控制模块进行数据转换,得出十进制温度值,然后通过串行口经MAX232将数据发送出去。
1.4上位机显示及报警系统
上位机系统的主要功能是接收下位机发送过来的温度数据,与报警温度进行比较,判断是否发送报警信号,并同时直接驱动四位八段数码管进行显示。
上位机系统由串口接收模块、处理控制模块、数码管显示模块和报警模块四部分组成。
如图1-4上位机系统框图:
图1-4上位机系统框图
串行口接收数据后进行判断是否报警,并由P0口和P2.0~P2.3直接驱动数码管显示温度数据。
报警控制模块通过按钮电路可以改变报警温度的上下限实现系统的灵活功能。
2系统总体方案及硬件设计
2.1方案论证及系统总体方案
通信有并行通信和串行通信两种方式。
在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。
1)并行通信
并行通信通常是将数据字节的各位多条数据线同时进行,如下图。
并行通信控制简单、传输速度快、由于传输线较多,长距离传送使成本较高,且接收方的各位同时接收存在困难。
在组成通信网络中一般不采用此种形式。
图2-1并行通信示意图
2)串行通信
串行通信时将数据字节分为一位一位的形式在一条传输线上逐个的传送。
并且根据主从设备是否公用时钟线分为同步通信和异步通信。
如图2所示。
其特点是:
传输线少,长距离传送时成本低,但数据的传送控制比并行通信复杂。
3
图2-2串行通信示意图
3)8051的串行口结构及系统通信原理
8051的串行口有两个物理上独立的接受、发送缓冲器SBUF,它们占用同一地址99H‘接收器是双缓冲接收,发送缓冲器因为发送时CPU是主动地,不会产生从跌错误。
MCS-51单片机为异步通信,在串行通信中,收发双发对发送或接收数据的速率要有约定。
通过软件可以对单片机串行口便成为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,有定时器T1的溢出率来决定。
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1.串行口控制和终端控制。
具体步骤如下:
1、确定T1的工作方式(编程TMOD寄存器);2、计算T1的初值,转载TH1、TL1;3、启动T1(编程TCON的TR1位);4、确定串行口控制(编程SCON寄存器);5、串行口在中断方式工作时,要进行总段设置(编程IE、IP寄存器)。
4)单片机最小系统设计
最小应用系统设计是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
本次设计采用的是AT89C52,其特点是8字节FLASH闪速存储器,256字节,32个I/O口线,3个16位定时/计数器,掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位.主演的是它与C51系列产品指令和引脚完全兼容.
最小系统的时钟电路采用12MHZ晶振,机器周期为1us,连接两个30pF的电容,连接到AT89S52的XATL1,XATL2上面,如下图所示。
复位电路采用的是上电+按钮电平复位,是利用电容充电来实现上电复位。
当按钮按下后,电源施加在单片机复位端RST上,实现单片机复位功能.。
图2-3单片机最小系统设计图
5)DS18B20与AT89S52单片机接口电路的设计
DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,DS18B20与AT89C52单片机的接口电路如下图所示,其中DS18B20与单片机的接口为P2.3。
图2-4DS18B20模块设计
6)下位机与上位机串行通信电路设计
本系统采用的是下位机采集温度信息并换算,通过串行口发送至上位机,因此需用到单片机的串行口。
单片机的串行口是一个可编程的全双工串行通信接口。
它可用作异步通信方式,与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的AT89S52多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
AT89S52单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。
SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。
它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
本系统串行通信具体设计如下图,图中标号IRXD和ITXD分别代表下位机得RXD口和TXD口。
图2-5串行通信设计
7)LED显示电路设计
上位机接收到温度数据后需要直接驱动四位八段数码管将温度值显示出来,本系统采用的是共阴四位八段数码管,其具体设计如图2-6所示:
图2-6数码管显示电路设计
8)键盘电路设计
本系统只需用键盘实现简单的改变报警上下限,所以只需要简单的四个按钮即可,键盘电路具体设计如图2-7所示:
图2-7键盘电路设计
2.2主要硬件简介
(1)单片机的简介
所谓单片机,全称则是单片机微型计算机,又称控制器。
它是在一块半导体芯片上集成了CPU,ROM,RAM,I\O、定时器\计数器、终端系统、AD魔术转换器等功能部件,构成了一台完整的数字电子机。
目前单片机已成功地运用在智能仪表、机电设备、过程控制、数据处理自动检测和家用电器等各个方面。
单片机在控制领域中,有着如下几个特点:
1)小巧灵活,成本低,已于产品化,能方便的组成各种智能式控制设备及各种仪表仪器。
2)面向控制,能针对性的解决从简单到复杂的各类控制任务,因而得到最佳的性能价格比。
3)抗干扰能力强,适应温度范围宽,在各种恶劣的环境下都能可靠的进行作业,这是其他各种机种都无法比拟的。
4)可以很方便地实现多机和分布式控制,使整个控制系统的效率和性能大为提高和改善。
AT89S52单片机是Atmel公司推出的和龚云鹏80C51产品为完全兼容的8为机,其特有的布尔处理机,在逻辑处理与控制方面具有突出特点。
特点为——
*与MCS-51单片机产品兼容
*8K字节在系统可编程Flash存储器
*1000次擦写周期
*全静态操作:
0Hz~33Hz
*三级加密程序存储器R
*32个可编程I/O口线
*三个16位定时器/计数器
*八个中断源
*全双工UART串行通道
*8位微控制器
*低功耗空闲和掉电模式
*掉电后中断可唤醒
*8K字节在系统可编程
*看门狗定时器
*双数据指针
*掉电标识符图
图2-6为AT89S52的引脚图:
图2-6AT89S52引脚图
AT89S52是一个低功耗,高性能的CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,该器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统以及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
他的最小系统设计简单主要有:
电源电路,复位电路,时钟电路三部分组成。
(2)DS18B20简介
数字化温度传感器是DALLAS最新单线数字温度传感器,支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
其适合于现场温度测量,可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。
第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。
第六、七、八个字节用于内部计算。
第九个字节是冗余检验字节。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
(3)显示电路、按键与报警电路
LED数码管虽然显示内容有限,但其具有寿命长、故障少、视觉大、可视距离远、成本低、亮度高等优点,对于本设计,很满足要求。
B机的温度显示有四位数码管显示,用P1口发送形码,P2口发送扫描码,采用动态扫面方式。
由于MCS-51的I\O口驱动能力有限,所以在P1口加了上拉电阻。
图2-7LED电路
按键采用独立按键并直接接在I\O上的方式,程序设计时应注意先写1,再管脚。
报警电路很简单,采用三个红、黄、绿色二级管显示。
绿色:
正常运行。
红色:
温度超标。
黄色:
温度过低。
硬件电路如下图所示:
图2-8独立按键
图2-9报警指示
3软件设计
3.1功能分析
本系统需要实现的功能可划分为以下六个部分:
1)温度数据采集
2)温度数据换算
3)温度数据传送与接收
4)温度显示
5)报警上下限调整
6)温度数据与报警上下限比较以及报警
系统又分为上位机和下位机两部分,易知前三个要求属于下位机的功能范畴,要求三至要求六属于上位机的功能范畴。
根据下位机的功能范畴,可设计出其工作流程图如下:
图3-1下位机工作流程图
由流程图可知,可将下位机的程序划分为若干个实现单一功能的子程序,如DS18B20初始化程序、温度采集程序、温度换算程序、串口初始化程序和串口发送程序等。
根据上位机的功能范畴,可将上位机得工作流程设计如下:
图3-2上位机工作流程图
4实验仿真
5课程设计体会
通过这次单片机课程设计,我们不仅加深了对单片机理论的理解,更将很多理论知识很好地应用到实际当中。
其实说实在的,这门在当初学习之际,我们并非带有多大的兴致,不过经过了这次课程设计,我们真正学到了好多以前所并没有发现的。
此外,两人一组的团队,我们还学会了如何培养坚持不懈的学习精神和团队协作能力,在遇到挫折和困难时,能够坚持到底,从而不断地战胜自己,超越自己。
这次的课程设计,让我坚定的相信,在以后的课堂上把理论知识学透彻是多么的重要。
此外,我们还到图书馆里去查阅了好多相关的资料,希望可以在此次设计中帮到我们,是我们能够少遇到点挫折和困难。
在这次设计系统中,温度检测模块、微控制器模块、串口通信模块、数码管显示和报警模块等四部分均有各自的独特之处。
其中上下位单片机的温度数据测量、传输和温度显示在焊接过程中较为困难。
而且,串口通信是我们的一大难点,不断的仿真和不断的错误和失败告诉我们基础知识的不踏实,会给该次设计增加不少的难度。
本次设计我们使用的语言明确、精确、可读性强,但由于单片机的硬件资源有限,在数据定义和特殊寄存器的选用及修改上比较固定,对于新手的我们,自然吃了不少的苦头,不断的失败,不断的更改,不断地仿真出错,都一而再再而三的考验着我们的耐性。
不过,“失败是成功之母”——经历数次的失败,最终我们还是迎来了成功的喜悦,也许这是对我们不懈努力的犒赏吧!
最终的调试过程,对于我们来说也真的是很大的难点,总会因为这般抑或是那般的“不幸”而是焊接的物品不能正常工作。
要说这还得多谢同学额的帮助,对于调试的问题,我们和同学探讨了之后,终于找到不足之处的所在,这也使得这次的设计得以画上它所应有的真正的句号。
其实现在想想,也许学习单片机也确有它独特的自我意义,不过就是因为当时学习的时候不明白这样的道理,才没能好好学习理论知识,以致为这次的设计凭空增添了原本不需要的繁琐步骤。
我想,无论是在这次课程设计中学到的知识技巧还是团队协作能力与耐性的培训,都会为以后我们真正踏入社会所作的工作打下很好的基石。
可以使我们在以后的工作之中少走好多弯路,早日踏上成功的阶梯。
骄傲的总计一下,其实不管怎样,这次的课程设计我们还是圆满成功的。
参考文献
[1]祝木田.单片机原应用教程.北京:
中国财经经济出版社,2005.8
[2]李广弟.单片机基础.北京:
北京航空航天大学出版社,1999.10
[3]沈德金.单片机应用程序实例.北京:
北京航空航天大学出版社,1990
[4]胡汉才.单片机原理及接口技术.北京:
清华大学出版社,1996
[5]康华光.模拟电子技术基础.北京:
高等教育出版社,2006
[6]余修武.单片机原理及应用.成都:
电子科技大学出版社,2008.1
[7]李秀忠.单片机应用技术.北京:
人民邮电出版社,2007.12
[8]三恒星科技.MCS-51单片机原理与应用实例.北京:
电子工业出版设,2008.1
[9]王为青.51单片机应用开发案例精选.北京:
人民邮电出版社,2007.8
附1源程序代码
测温程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P2^0;//ds18b20端口
uinttemp;//温度值
ucharstart='Z';//发送首部标志
voiddelay1(uintMS);//1ms延时
unsignedintReadTemperature(void);//18b20读取温度
voidInit_DS18B20(void);//18b20初始化
unsignedcharReadOneChar(void);//18b20读取一个字节
voidWriteOneChar(unsignedchardat);//18b20写一个字节
voiddelay(unsignedinti);//短延时
//串口初始化
voidUARTinit(void)
{
SCON=0x50;
TMOD|=0x20;
TH1=0xFD;
TR1=1;
TI=1;
}
main()
{
unsignedintTempH,TempL;
UARTinit();
P2=0x00;
while
(1)
{delay1(1000);
temp=ReadTemperature();
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
printf("%c",start);
delay1(100);
printf("%d",TempH);
delay1(100);
printf("%d",TempL);
}
}
/******************************************************************/
/*延时函数*/
/******************************************************************/
voiddelay(unsignedinti)//延时函数
{
while(i--);
}
/******************************************************************/
/*初始化*/
/******************************************************************/
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(10);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(5);
}
/******************************************************************/
/*读一个字节*/
/******************************************************************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/******************************************************************/
/*写一个字节*/
/******************************************************************/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(5);
}
/******************************************************************/
/*读取温度*/
/******************************************************************/
unsignedintReadTemperature(void)
{
un