基于labview的串口温度采集系统设计

更新时间:2024-01-11 23:15:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

基于labview的串口温度采集系统设计

邹海军 07082232

(指导教师:徐静云)

摘要:系统利用DSl8B20数字温度传感器和STC公司的STC89C52单片机设计成智能温度采集模块,采集环境温度,将测得数据经串口传送给计算机。创新之处是采用虚拟仪器技术,利用LabVlEW软件编写相应上位机软件,控制采集模块进行温度采集,串口的数据传输,然后对数据处理和显示。

关键词:DSl8B20;温度传感器;STC89C52;单片机;Labview;串口通信

Design of serial temperature acquisition system

based on labview

Zou Haijun 07082232

(Teacher:Xu Jingyun )

Abstract:This system uses DSl8B20 digital temperature sensor and STC's microcontroller STC89C52 to design a smart temperature acquisition module, collecting surrounding's temperature, measured data will be

transmitted to the computer through the serial port. Innovations is the use of virtual instrument technology, software development using LabVlEW

corresponding PC software to control the temperature acquisition module collecting, serial data transfer, then data processing and display.

Keywords:DS18B20;temperature sensor;STC89C52;MCU;Labview; Serial Communication

0 引言

在生产生活中温度测量有着及其重要的意义。本文使用STC89C52单片机作为温度测量和传输的主控芯片,温度传感器采用单总线方式的集成数字温度传感器DSl8B20。由STC89C52和DSl8B20组成温度测量单元。采集得到的数据利用单片机经串口通讯的方式传输至计算机的串口。计算机上位机软件采用基于图形化编辑语言的LabVIEW软件编写,利用其所带的串口操作模块进行数据采集、处理和显示,实现了基于Labview的串口温度测量。

1 硬件设计

该温度测量系统是由上位机和温度测量单元组成。上位机即计算机,实现对温度测量单元控制,通过串口程序发送命令、接收测量数据,对测量数据处理显示。温度测量单元,接收上位机命令,按照命令进行温度测量和数据传输等操作。

1.1系统组成

实现单点温度测量,采用如图1所示结构。上位机和温度测量单元采用RS232串行通信标准。图中上位机发送的信息可以被温度测量单元所接收,温度测量单元发送的信息也可以被上位机接收。温度测量单元中主控单片机串行口采用方式1。

1

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

图1 单点测温系统结构框图

1.2温度测量单元硬件

温度测量单元硬件设计主要分为三个部分;单片机控制单元、温度测量单元和串口通讯。

STC89C52是一种低功耗,高性能CMOS8位微控制器。具有以下标准功能:8k字节Flash,256字节RAM,32位I/0口线,2个16位定时器/计数器,5个中断源2级中断优先权,1个全双工串行口。目前支持5l单片机编译器的语言主要有汇编语言、c语言等。

单片机部分的电路设计如图2所示,主要包括复位电路、晶振电路。

VCCVCCU1P10P11P12P13P14P15P16+C1R131K123456781312151422ufS1SW-PBP10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR8051P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728R2R3R4R5R6R7R8R9P00P01P02P03P04P05P06P0731RSTX1X2191891716RSTRXDTXDALE/PPSEN10113029P30P31R1210KC2X130pY111.0592MC3X230p10K10K10K10K10K10K10K10K

图2 单片机部分电路

温度测量部分,温度传感器采用单总线方式的集成数宁温度传感器DSl8B20。DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线(和地线),DSl8B20的电源可以由数据线本身提供而不需要外部电源。DSl8B20的测量范围从一55摄氏度到+125摄氏度,增量值为0.5摄氏度。可在1s(典型值)内把温度变换成数字。电路原理图如图3所示。

2

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

VCCR14.7KJ1321DS18B20P10

图3 温度测量电路

串口通信采用Max232实行电平转换,电路原理图如图5所示。

C41uf1345P31111012915M1C1+C1-C2+C2-T1INT2INR1OUTR2OUTGNDMAX232VDDVCC216C6+VCCC7++C5+1uf1uf1ufT1OUTT2OUTR1INR2INVEE147138C861ufP30594837261J4DB9图4 串口电路

2 软件设计 2.1下位机软件

下位机软件由C语言编写,主要包括DSl8B20的读写和串口通信两个部分。串行通信采用中断方式,波特率为9600,测温单元主控单片机串行口工作在方式1。完整程序见附录。程序流程图如下:

图5 程序流程图

3

+

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

2.2上位机软件

上位机软件采用LabVIEW编写。LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编程语言,它广泛应用于工业界、学术界和研究实验室,被视为一个标准的数据采集和仪器控制软件。LabVIEW有一个完成任何编程任务的庞大函数库。LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储等等,是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。

图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。利用LabVIEW,可产生独立运行的可执行文件,它是一个真正的32位编译器。

图6 上位机界面

3 结束语

本系统利用数字化的温度传感器和单片机组成测温单元,实时、方便、可靠的实现对单点温度测量,通过RS232串口将数据传送给计算机。在虚拟仪器开发平台下编写了控制软件,计算机实现控制测温单元,与测温单元通信,计算机将接收到的数据进行处理、显示。该系统具有模块化、体积小、可靠性高、可扩展功能强等优点.

参考文献:

[1]张毅刚等.单片机原理与应用设计.北京:电子工业出版社,2008.4

[2]求是科技.8051系列单片机C程序设计完全手册.北京:人民邮电出版社,2006.4

[3]张桐等.精通LabVIEW程序设计.北京:电子工业出版社,2008.12

4

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

附录:

#include

#include #define uchar unsigned char #define uint unsigned int

sbit DQ=P2^7; uint h,temp; bit flag;

uchar code dian_table[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //温度小数部分用查表法 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};

//显示单元数据,共4个数据和一个运算暂用 uchar idata temp_display[]={0x30,0x31,0x32,0x33,0x34,

0x35,0x36,0x37,0x38,0x39};

void delay(uint t) //11us延时函数 {for (;t>0;t--);}

void ow_reset(void) //DS18B20复位函数 { char presence=1; while(presence) { while(presence)

{ DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0; delay(50); //550 us

DQ=1; delay(6); //66 us

presence=DQ; //presence=0 复位成功,继续下一步 } delay(45); //延时500 us presence=~DQ;

} DQ=1; //拉高电平 }

void write_byte(uchar val) //DS18B20写命令函数 { uchar i;

for(i=8;i>0;i--)

{ DQ=1;_nop_();_nop_(); //从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us

DQ=val&0x01; //最低位移出 delay(6); //66 us val=val/2; //右移1位 }DQ=1; delay(1); }

5

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

uchar read_byte(void) //DS18B20读1字节函数 { uchar i;

uchar value=0; for(i=8;i>0;i--)

{ DQ=1;_nop_();_nop_(); value>>=1;

DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us if(DQ)value|=0x80;

delay(6); //66 us }DQ=1;

return(value); }

read_temp() //读出温度函数

{ ow_reset(); //总线复位 delay(200);

write_byte(0xcc); //发命令 write_byte(0x44); //发转换命令 ow_reset(); delay(1);

write_byte(0xcc); //发命令 write_byte(0xbe);

temp_data[0]=read_byte(); //读温度值的低字节 temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1];

temp<<=8; temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 }

work_temp(uint tem) //温度数据处理函数 { uchar n=0;

if(tem>6348) // 温度值正负判断

{tem=65536-tem;n=1;} // 负温度求补码,标志位置1 display[4]=tem&0x0f; // 取小数部分的值

display[0]=dian_table[display[4]]; // 存入小数部分显示值 temp_display[0]=display[0]+0x30;

display[4]=tem>>4; // 取中间八位,即整数部分的值 display[3]=display[4]/100; // 取百位数据暂存 temp_display[4]=display[3]+0x30;

display[1]=display[4]0; // 取后两位数据暂存 display[2]=display[1]/10; // 取十位数据暂存 temp_display[3]=display[2]+0x30; display[1]=display[1];

temp_display[2]=display[1]+0x30;

6

-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------

}

void init() //串口初始化

{ SCON= 0x50; //串口方式1 允许接收 PCON=0; //SMOD=0

TMOD= 0x20; //定时器1定时方式2 TH1= 0xfd; //11.0592MHz 9600波特率 TL1= 0xfd; TR1= 1; EA = 1; ES = 1; }

void main() //主函数 { uint i; init();

ow_reset(); //开机先转换一次 write_byte(0xcc); //Skip ROM write_byte(0x44); //发转换命令 while(1)

{ work_temp(read_temp()); //处理温度数据 if(flag==1)

{ for(i=0;i<5;i++)

{ SBUF=temp_display[4-i]; while(!TI); TI=0; }

flag=0; } } }

void serial() interrupt 4 //串口中断 { if(RI)

{ RI = 0; flag=1; } }

7

temp_display[1]='.';

if(!display[3])

{ temp_display[4]=' '; //最高位为0时不显示 if(!display[2]) {

temp_display[3]=' '; //次高位为0时不显示

} }

if(n){temp_display[4]='-';} //负温度时最高位显示\

本文来源:https://www.bwwdw.com/article/v2no.html

Top