您的当前位置:首页正文

基于单片机的无线多路数据(温度)采集系统的设计与实现(毕业论文)

2024-02-20 来源:我们爱旅游
XXX大学毕业设计

前言 ............................................................................................................................................ 4 1 总体方案设计 ...................................................................................................................... 5

1.1 方案论证 ................................................................................................................... 5

1.1.1 传感器 ............................................................................................................ 5 1.1.2 主控部分 ........................................................................................................ 5

2 硬件电路的设计 .................................................................................................................. 6

2.1 电源电路 ................................................................................................................... 6 2.2 温度采集电路 ........................................................................................................... 7

2.2.1 DS18B20简介 ................................................................................................. 7 2.2.2 电路设计 ........................................................................................................ 9 2.2.3 无线传输电路模块 ...................................................................................... 10

3 无线发送与接收电路 ........................................................................................................ 11

3.1 无线发送电路 ......................................................................................................... 11 3.2 无线接收模块 ......................................................................................................... 11 4 显示电路 ............................................................................................................................ 12

4.1 字符型液晶显示模块 ............................................................................................. 12 4.2 字符型液晶显示模块引脚 ..................................................................................... 13 4.3 字符型液晶显示模块内部结构 ............................................................................. 13 5 单片机AT89S52 ................................................................................................................. 14

5.1 AT89S52简介 .......................................................................................................... 14 5.2 AT89S52引脚说明 .................................................................................................. 15 6 软件设计 ............................................................................................................................ 17

6.1 系统概述 ................................................................................................................. 17 6.2 程序设计流程图 ..................................................................................................... 17 6.3 温度传感器多点数据采集 ..................................................................................... 18 7 调试及结果 ........................................................................................................................ 18

7.1 测试环境及工具 ..................................................................................................... 18 7.2 测试方法 ................................................................................................................. 18 7.3 测试结果分析 ......................................................................................................... 18 8 总结 .................................................................................................................................... 19 附录1: 电路原理总图 ......................................................................................................... 20 附录2: 发射部分主程序 ..................................................................................................... 21 附录3: 接收部分主程序 ..................................................................................................... 27 参考文献 .................................................................................................................................. 32

1

XXX大学毕业设计

无线数据采集系统的设计与实现

学生:XX

指导教师:XX

内容摘要:由于数据采集系统的应用范围越来越宽、所涉及到的测量信号和信号源的

类型越来越多、对测量的要求也越来越高,国内现在已有不少数据测量和采集的系统,但很多系统存在功能单一、采集通道少、采集速率低、操作复杂,并且对测试环境要求较高等问题。人们需要一种应用范围广、性价比高的数据采集系统。

在分析了不同类型的单片机的特点及单片机与PC机通信技术的基础上,设计了单片机控制的采集系统,并通过串口通信实现单片机与P(:机之间的通信,实现数据的传送并将数据在PC机上显示及存储,完成单机的多通道数据采集系统的设计及实现。

基于单片机的多通道数据采集系统是由将来自传感器的信号通过放大、线性化、滤波、同步采样保持等处理后,输入A/D转换为数字信号后由单片机采集,然后利用单片机与PC机的通信将数据送到PC机进行数据的存储、后期处理与显示,实现了数据处理功能强大、显示直观、界面友好、性价比高、应用广泛的特点,可广泛应用于工业控制、仪器、仪表、机电一体化、智能家居等诸多领域。

关键词:多通道 数据采集 单片机

2

XXX大学毕业设计

Design and implementation of wireless data acquisition

system

Abstract: since the wide range of data acquisition system, which involves the measurement

signal and the type of signal source more and more, Surveyors are increasingly high requirements of the domestic now have a lot of data acquisition and measurement system But there are many single function systems, collecting less access, low collection rate, complicated operations, and the demands of the test environment and other issues.It requires abroad scope of application, high reliability and low-cost data acquisition system. Based on the analysis of the characteristics of different types of SCM and SCM and PC communication technology, SCM control of the collection system designed and adopted MCU serial communication between PC and communications, Data transmission and display of data stored on the PC.Single completed the multi-channel data acquisition system design and implementation.

Based on SCM′s multi-channel data acquisition system is adopted will come from the sensor signal amplification, linear filtering, After processing maintain synchronous sampling, which converted to digital signal input A/D conversion by SCM Acquisition, Then, SCM and PC to PC communications data to the data storage, post-processing and display. a powerful data processing, visual shows, friendly interface and high performance-price ratio, a wide range of features. can be widely used in industrial control equipment, instruments, and electrical engineering integration, intelligent home and many other fields.

Key words: Multi-channel Data Acquisition Microcontroller

3

XXX大学毕业设计

无线数据采集系统的设计与实现

前言

21世纪的今天,科学技术的发展日新月异,科学技术的进步同时也带动了测量技术的发展,现代控制设备不同于以前,它们在性能和结构发生了翻天覆地的变化。我们已经进入了高速发展的信息时代,测量技术是当今社会的主流,广泛地深入到应用工程的各个领域。

温度是工业、农业生产中常见的和最基本的参数之一,在生产过程中常需对温度进行检测和监控,采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用。伴随工业科技、农业科技的发展,温度测量需求越来越多,也越来越重要。但是在一些特定环境温度监测环境范围大,测点距离远,布线很不方便。这时就要采用无线方式对温度数据进行采集。

多路无线温度采集系统可被广泛应用于温度测量或相应的可转换为温度量或供电故障监控的工业、农业、环保、服务业、安全监控等工程中,例如:城市路灯故障检测和供电线路防盗监视、城市居民小区供热检测、大型仓库温度检测、工业生产测控、农业生产温度测控、环保工程、故障监控工程等。考虑到许多工业环境中对多点温度进行监控,一般需要测量几十个点以上。本文设计多路无线温度监控系统。

本设计是以Atmel公司的AT89S51单片机作为控制核心,提出以DS18B20的单总线分布式温度采集与控制系统。多个温度传感节点通过单总线与单片机相连形成分布式系统。控制器通过温度传感器实时检测各节点的温度变化,并在LCD1602上循环显示各节点温度的变化。通过串口将检测到的温度信息回馈到上位机(PC机),从而远程实现对整个系统的检测。

因为采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用,并且温度参数对工业生产的重要性,所以温度测量系统的精确度和智能化一直受到企业的重视。所以学习并研究温度测量及相关知识可做为一个较为实用的课题的方向,能获得较实用的知识和方法。因此温度测控技术是一个很实用、也很重要的技术,值得去研究掌握。它应用的领域也相当广泛,可以应用到消防电气的非破坏性温度检测,电力、电讯设备的过热故障预知检测,空调系统的温度检测,各类运输工具之组件的过热检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械„等设备温度过热检测。因此前景是相当的可观。

4

XXX大学毕业设计

1 总体方案设计

温度检测系统有则共同的特点:测量点多、环境复杂、布线分散、现场离监控室远等。若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D 转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、测量点多、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降 。所以多点温度检测系统的设计的关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用范围广泛、使用数量庞大,也高居各类传感器之首。 1.1 方案论证 1.1.1 传感器

方案一:采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的。

方案二:采用单片模拟量的温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使得测温装置的结构较复杂。另外,这种测温装置的一根线上只能挂一个传感器,不能进行多点测量。即使能实现,也要用到复杂的算法,一定程度上也增加了软件实现的难度。

方案三:采用数字温度传感器DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线性度较好。在0~100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS1820和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大,且由于AT89S52可以带多个DSB1820,因此可以非常容易实现多点测量。轻松的组建传感器网络。

采用温度芯片DS18B20测量温度,可以体现系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋势。

1.1.2 主控部分

方案一:采用AT89S52八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC机通信.运用主从分布式思想,由一台上位机

5

XXX大学毕业设计

(PC微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。另外AT89C51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟[1]。

方案二:使用MSP430作控制器,德州仪器 (TI) 的超低功率16位RISC 混合信号处理器MSP430产品系列为电池供电测量应用提供了最终解决方案。作为混合信号和数字技术的领导者,TI创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。但在温度采集和实施控制这个重要的场合低功耗相对来说显得就不是那么重要了,而应该考虑它的稳定性、准确性,同时对比AT89S52能够在性能和资源都可以到达一个最佳的状态,可以避免用MSP430的不必要的资源浪费。

综上,我们传感器采用方案二,控制器采用方案一。系统框图如下图。

图1.1.2-1 发射电路系统框图 图1.1.2-2 接收电路系统框图

2 硬件电路的设计

本课题所设计的外围电路包括:电源电路、温度采集、时钟电路、存储电路、报警电路、模拟控制电路、按键电路、显示电路以及串口等电路。下面将依次对各个模块进行说明。 2.1 电源电路

电源变压器是将交流电网220V的电压变为所需要的电压值。交流电经过二极管整流之后,方向单一了,但是电流强度大小还是处在不断地变化之中。这种脉动直流一般是不能直接用来给集成电路供电的,而要通过整流电路将交流电变成脉动的直流电压。由于此脉动的直流电压还含有较大的纹波,必须通过滤波电路加以滤除,从而得到平滑

6

XXX大学毕业设计

的直流电压。滤波的任务,就是把整流器输出电压中的波动成分尽可能地减小,改造成接近稳恒的直流电。但这样的电压还随电网电压波动,一般有±10%左右的波动,负载和温度的变化而变化,因而在整流、滤波电路之后,还需要接稳压电路。

稳压电路的作用是当电网电压波动,负载和温度变化时,维持输出直流电压稳定。220V交流电通过9V变压器变为9V的交流电,9V交流电通过四个二极管的全桥整流后变为9V直流电,然后经过电解电容(470μF)进行一级滤波,以去除直流电里面的杂波,防止干扰。9V直流电出来后再经过三端稳压器LM7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接9V直流电源正极,GND是接地脚,接9V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。5V电源出来再经过电解电容的二级滤波,使5V电源更加稳定可靠。同时在5V稳压电源加上一个10K的电阻和一个红色发光二极管,当上电后,红色发光二极管点亮,表示电源工作正常。此时一个稳定输出5V的电源已经设计好,对于本设计它完全能够满足单片机及集成块所需电源的要求。电源原理图如图2.1-1所示。

[2]

图2.1-1 电源原理图

2.2 温度采集电路 2.2.1 DS18B20简介

温度芯片DS18B20是Dallas公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式。测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。测量温度范围为 -55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。由于每一个DS18B20都有唯一系列号,因此多个DS18B20可以存在同一条单总线上。这允许许

7

XXX大学毕业设计

多不同地方放置温度灵敏器件。此特性的应用范围包括HAVC环境控制,建筑物、设备或机械内的温度检测,以及过程监控和控制中的温度检测等[3]。DS18B20的内部结构如图2.2.1-1所示。

图2.2.1-1 DS18B20方框图

DS18B20有4个主要的数据部件:

A、64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。

B、温度灵敏元件。

C、非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。

D、配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。其中R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。

表 2.2.1-1 分辨率关系表

R0 0 0 1 1 R1 0 1 0 1 分辨率/bit 9 10 11 12 最大转换时间/us 93.75 187.5 375 750 8

XXX大学毕业设计

高速暂存存储器由9个字节组成,其分配如表2.2.1-2所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表2.2.1-2所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。

表2.2.1-2 DS18B20存储器

温度LSB 温度MSB TH TL 保留 保留 计数寄存器 计数寄存器 8位CRC

2.2.2 电路设计

本系统为多点温度测试。DS18B20采用外部供电方式,理论上可以在一根数据总线上挂256个DS18B20,但时间应用中发现,如果挂接25个以上的DS18B20仍旧有可能产生功耗问题。另外单总线长度也不宜超过80M,否则也会影响到数据的传输。在这种情况下我们可以采用分组的方式,用单片机的多个I/O来驱动多路DS18B20。在实际应用中还可以使用一个MOSFET将I/O口线直接和电源相连,起到上拉的作用[4]。电路如图2.2.2-1。

图2.2.2-1 单总线原理图

对DS18B20的设计,需要注意以下问题:

A、对硬件结构简单的单线数字温度传感器DS18B20 进行操作,需要用较为复杂的程序完成。编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。尤其在使用DS18B20 的高测温分辨力时,对时序及电气特性参数要求更高。

B、有多个测温点时,应考虑系统能实现传感器出错自动指示,进行自动DS18B20 序列号和自动排序,以减少调试和维护工作量。

9

XXX大学毕业设计

C、测温电缆线建议采用屏蔽4 芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。DS18B20 在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。若VCC脱开未接,传感器只送85℃的温度值。

D、实际应用时,要注意单线的驱动能力,不能挂接过多的DS18B20,同时还应注意最远接线距离。另外还应根据实际情况选择其接线拓扑结构。

2.2.3 无线传输电路模块

无线传输模块,采用集成芯片PT2262和PT2272来构建收发电路。PT2262/PT2272 是台湾普城公司生产的一种CMOS 工艺制造的低功耗低价位通用编解码电路,PT2262/PT2272 最多可有12 位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441 地址码,PT2262 最多可有6 位(D0-D5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥控发射电路。

编码芯片 PT2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272 接收到信号后,其地址码经过两次比较核对后,VT 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262 不接通电源,其17 脚为低电平,所以315MHz 的高频发射电路不工作,当有按键按下时,PT2262 得电工作,其第17 脚输出经调制的串行数据信号,当17 脚为高电平期间315MHz 的高频发射电路起振并发射等幅高频信号,当17 脚为低平期间315MHz 的高频发射电路停止振荡,所以高频发射电路完全收控于PT2262 的17 脚输出的数字信号,从而对高频电路完成幅度键控(ASK调制)相当于调制度为100%的调幅。

在通常使用中,一般采用8 位地址码和4 位数据码,这时编码电路PT2262 和解码PT2272 的第1~8脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,3 的8 次方为6561,所以地址编码不重复度为6561 组,只有发射端PT2262 和接收端PT2272 的地址编码完全相同,才能配对使用,例如将发射机的PT2262 的第2 脚接地第3 脚接正电源,其它引脚悬空,那么接收机的PT2272 只要第2 脚接地第3 脚接正电源,其它引脚悬空就能实现配对接收。当两者地址编码完全一致时,接收机对应的D1~D4端输出约4V 互锁高电平控制信号,同时VT 端也输出解码有效高电平信号。用户可将这些信号加一级三极管放大,便可驱动继电器等负载进行遥控操纵[5]。

设置地址码的原则是:同一个系统地址码必须一致;不同的系统可以依靠不同的地址码加以区分。至于设置什么样的地址码完全随客户喜欢。

10

XXX大学毕业设计

3 无线发送与接收电路

3.1 无线发送电路 原理如图3.1-1所示。

图3.1-1 PT2262发射原理图

PT2262的发射原理如上图所示,采用8 位地址码和4 位数据码的格式。PT2262的第1~8引脚设置地址为“00000000”,及1~8脚都接地。第10~13引脚为数据输入端,这四个引脚分别与单片机AT89S51的P2.0~P2.3口相连。要发送的数据通过单片机AT89S51的P2.0~P2.3口写入PT2262的数据输入管脚10~13。由于第14脚接地,所以编码启动端一直有效,当PT2262的管脚10~13有输入(有一个为“1”即有编码发出),则输入的4位数据再经过第17脚串行输出通过天线发送出去。 3.2 无线接收模块

无线接收模块电路图如图3.2-1所示:PT2272的接收原理如上图所示,由于PT2262采用8位地址码和4 位数据码的格式,所以PT2272也要采用同样的格式。PT2272要与PT2262的地址相匹配才能进行传输,所以PT2272的地址引脚1~8也要设置为“00000000”,及都接地。数据出端10~13引脚与单片机AT89S51的P1.0~P1.3口相连。接收到的数据再通过单片机的外围接口P1.0~P1.3读入到单片机内部进行处理。第17脚连接到单片机的P3.2(INT0)的外中断0的输入端,同时接一个发光二极管来确定解码有没有效。当解码有效时17脚输出瞬间的高电平同时使单片机产生中断来读取数据

11

XXX大学毕业设计

和二极管瞬间发光。每解码有效一次,发光二极管的闪烁一次。

[6]

图3.2-1 PT2262接收原理图

4 显示电路

4.1 字符型液晶显示模块

图4.1-1 液晶面板

字符型液晶显示模块是一类专门用于显示字母,数字,符号等的点阵式液晶显示模块。在显示器件上的电极图型设计,它是由若干个5*7或5*11等点阵符位组成。每一个点阵字符位都可以显示一个字符。点阵字符位之间有一空点距的间隔起到了字符间距 和行距的作用。

12

XXX大学毕业设计

4.2 字符型液晶显示模块引脚

VSS为地电源,VDD接5V正电源,VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。DB0~DB7为8位双向数据线,BLK和BLA是背光灯电源[7]。模块引脚如表4.2-1。

表4.2-1 字符型液晶显示模块引脚

编号 1 2 3 4 5 6 7 8

4.3 字符型液晶显示模块内部结构

液晶显示模块WM-C1602N的内部结构如图4.3-1分为三部份:一为LCD控制器,二为LCD驱动器,三为LCD显示装置。

符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 数据/命令 读/写 使能信号 Data I/O Data I/O 编号 符号 9 10 11 12 13 14 45 16 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正级 背光源负级

图4.3-1 LCD1602内部结构

13

XXX大学毕业设计

图4.3-2 液晶接口

5 单片机AT89S52

5.1 AT89S52简介

如图5.1-1所示为AT89S52芯片的引脚图。兼容标准MCS-51指令系统的AT89S52单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系统和引脚兼容。

AT89S52单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。AT89S51具有PDIP、TQFP和PLCC三种封装形式。

[8]

14

XXX大学毕业设计

图5.1-1 AT89S52引脚图

上图就是PDIP封装的引脚排列,下面介绍各引脚的功能。 5.2 AT89S52引脚说明

P0口:8位、开漏级、双向I/O口。P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。

P1口:8位、双向I/0口,内部含有上拉电阻。P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。

P2口:具有内部上拉电阻的8位双向I/O口。P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。CPU访问外部16位地址的存储器时,P2

15

XXX大学毕业设计

口提供高8位地址。当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。

P3口:具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。在与FLASH并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O口功能外,还有替代功能,如表5.3-1所示。

表5.3-1 P3口的替代功能

引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 符号 RXD TXD /INT0 /INT1 T0 T1 /WR /RD 说明 串行口输入 串行口输出 外部中断0 外部中断1 T0定时器的外部的计数输入 T1定时器的外部的计数输入 外部数据存储器的写选通 外部数据存储器的读选通

RST:复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。 ALE/

:当访问外部存储器时,ALE(允许地址锁存)是一个用于锁存地址的低

)。在

8位字节的书粗脉冲。在Flash 编程期间,此引脚也可用于输入编程脉冲(

正常操作情况下,ALE以振荡器频率的1/6的固定速率发出脉冲,它是用作对外输出的时钟,需要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。如果希望禁止ALE操作,可通过将特殊功能寄存器中位地址为8EH那位置的“0”来实现。该位置的“1”后。ALE仅在MOVE或MOVC指令期间激活,否则ALE引脚将被略微拉高。若微控制器在外部执行方式,ALE禁止位无效。

:外部程序存储器读选取通信号。当AT89S51在读取外部程序时, 每个机器

周期 将PSEN激活两次。在此期间内,每当访问外部数据存储器时,将跳过两个号。

/Vpp:访问外部程序存储器允许端。为了能够从外部程序存储器的0000H至FFFFH

16

XXX大学毕业设计

单元中取指令,必须接地,然而要注意的是,若对加密位1进行编程,则在复位时,

的状态在内部被锁存。 执行内部程序

应接VCC。不当选择12V编程电源时,在Flash编程期间,这个引

脚可接12V编程电压。

XTAL1:振荡器反向放大器输入端和内部时钟发生器的输入端。 XTAL2:振荡器反相放大器输出端[9]。

6 软件设计

6.1 系统概述

整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。 6.2 程序设计流程图

图6.2-1 发射流程图 图6.2-2 接收流程图

17

XXX大学毕业设计

6.3 温度传感器多点数据采集

DS18B20 可设定9~12 位的分辨率,本系统采用12位分辨率,转换精度为0.0625℃,转换温度信号所需最长时间为750ms。温度数据由2 字节组成,以符号扩展的二进制补码形式存储,最低4 位是小数部分,中间7 位是整数部分, 1 位符号位。DS18B20 内部RAM 由9 个字节的高速缓存器和E2PROM 组成,前2 个字节即为温度数据。通过复位指令、ROM 和RAM 功能命令,即可完成对指定DS18B20温度数据的采集和读取。

在一线制总线上串接多个DS18B20 器件时,需要先发送跳过ROM 指令,将所有传感器都进行一次温度转换,之后通过匹配ROM依次读取每个传感器的温度数据,实现对单I/O 口上的多个DS18B20 器件的操作[10]。

在系统安装及工作之前应将主机逐个与DS1820挂接,以读出其序列号。其工作过程为:主机发出一个脉冲,待“0”电平大于480μs后,复位DS1820,在DS1820所发响应脉冲由主机接收后,主机再发读ROM命令代码33H,然后发一个脉冲(15μs),并接着读取DS1820序列号的一位。用同样方法读取序列号的56位。另外,由于DS1820单线通信功能是分时完成的,遵循严格的时隙概念,系统对DS1820和各种操作必须按协议进行,即:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

7 调试及结果

7.1 测试环境及工具

测试温度:0~100摄氏度(模拟多点不同温度值环境)。

测试仪器及软件:数字万用表,温度计0~100摄氏度,串口调试助手。 测试方法:目测。 7.2 测试方法

使系统运行,观察系统硬件检测是否正常(包括单片机最小系统,键盘电路,显示电路,温度测试电路等)。系统自带测试表格数据,观察显示数据是否相符合即可。

采用温度传感器和温度计同时测量多点水温变化情况(取温度值不同的多点),目测显示电路是否正常。并记录各点温度值,与实际温度值比较,得出系统的温度指标。

使用串口调试助手与单片机通讯,观察单片机与串口之间传输数据正确否。 7.3 测试结果分析

自检正常,各点温度显示正常,串口传输数据正确。

因为芯片是塑料封装,所以对温度的感应灵敏度不是相当高,需要一个很短的时间才能达到稳定。

18

XXX大学毕业设计

8 总结

本文研究的课题是基于单片机的多通道数据采集系统,该系统的实现的功能是将来自传感器的信号通过放大、线性化、滤波、同步采样保持等处理后,输入A/D转换为数字信号后由单片机采集,然后利用单片机与PC机的通信将数据送到PC机进行数据的存储、后期处理与显示,该系统的数据处理功能强大、显示直观、界面友好、性价比商,可广泛应用于工业控制、仪器、仪表、机电一体化、智能家居等诸多领域。

本系统还是一个不完善的系统,还有许多需要改进的地方。设计中所采用的DS18B20搜索算法还存在不足,有时会发生重复或遗漏搜索。在通信协议不完整,没有进行发送超时出错处理。还有各种不足之处有待将来改进。

设计得以顺利完成,得感谢我的指导老师,在这个过程中他都一直指导着我,虽然

他没有时时刻刻在我们身边亲历指导,但是他每天都询问我的进展情况,对我遇到的问题给予我解答,并对我的设计进行一些优化。

19

附录1: 电路原理总图

XXX大学毕业设计

20

XXX大学毕业设计

附录2: 发射部分主程序

#include #include”ds18b20.h”

#define uchar unsigned char

/***********pt2262发射函数***********/ void send_dat(uchar x) {

uchar x1,x2; x1=x&0x0f;

P2=x1;//将数据的低4位先发送出去 x2=x>>4;

P2=x2;//再将数据的高4位发送出去 }

/************主函数******************/ void main() {

while(1) {

read_ds18b20();//读取温度 send_dat(temp1);//发射温度1

send_dat(temp2);//发射温度2 send_dat(temp3);//发射温度3

} }

Ds18b20.h头文件: #ifndef _ds18b20 #define _ds18b20

uchar temperature,y1,y2,x2,y3; #define DQ P1_0 //温度接收口 uchar tpl; uchar tph;

21

XXX大学毕业设计

/************************************************************/ void delay_b(uint t) {

uint i;

while(t--) {

for(i=0;i<125;i++); } }

/************************************************************/ void txreset(void) { }

/************************************************************/ void rxwait(void)

{ uint i; uint i; DQ=0; i=100;

while(i>0) i--; DQ=1; i=4;

while(i>0) i--;

while(DQ);

/************************************************************/

22

while(!DQ); i=4;

while(i>0) i--; }

XXX大学毕业设计

bit rdbit(void)

{ uint i; bit b; DQ=0; i++; DQ=1; i++;i++; b=DQ; i=8; while(i>0) i--; return (b); }

/************************************************************ *Function:读18B20的一个字节

*************************************************************/ uchar rdbyte(void)

{

uchar i,j,b; for(i=1;i<=8;i++)

{

}

return (b); }

j=rdbit();

b=(j<<7) | (b>>1);

/************************************************************ *Function:向18B20写入一个字节

*************************************************************/ void wrbyte(uchar b)

23

XXX大学毕业设计

{

uint i;

uchar j, btm;

for(j=1; j<=8;j++)

{

btm=b&0x01; b=b>>1;

if(btm==1)

{

DQ=0; i++;i++; DQ=1; i=8; while(i>0) i--;

}

else

{

DQ=0; i=8; while(i>0) i--; DQ=1; i++; i++;

} }

}

/************************************************************ *Function:温度转换

*************************************************************/ void convert(void)

24

XXX大学毕业设计

{ }

/************************************************************/ void rdtemp(void) { }

/************************************************************/ void delay_2ms() { }

void disp_led() {

P0=a[y1];

P2=b[0]; delay_2ms(); P2=0XFF;

25

txreset(); rxwait(); delay_b(1); wrbyte(0xcc); wrbyte(0x44);

//延时

txreset(); rxwait();

delay_b(1); //延时 wrbyte(0xcc); wrbyte(0xbe); tpl=rdbyte(); tph=rdbyte();

//动态扫描显示时间

unsigned char i,j; for(i=0;i<8;i++) for(j=0;j<30;j++);

XXX大学毕业设计

P0=a[y2]&0x7f; // 显示带小数点的数 P2=b[1]; delay_2ms(); P2=0XFF; P0=a[y3]; P2=b[2]; delay_2ms(); P2=0XFF;

}

/************************************************************/ void delay_2(uchar a) {

uchar b,c; for(b=0;b/************************************************************/ void read_ds18b20() {

convert(); delay_2(500); rdtemp();

temperature=(tpl&0xf0)/16+(tph&0x07)*16; y1=temperature/10; y2=temperature%10;

//整数 温度十位

//延时函数

}

// 温度个位

x2=(tpl&0x0f)*(100/16);

y3=x2/10; //小数 温度十位

/************************************************************/ #endif

26

XXX大学毕业设计

附录3: 接收部分主程序

#include #include \"lcd1602.h\" #define uchar unsigned char

uchar flag=0,flag_dat=0; //定义flag标志变量表示接收的数据的高4位还是低4位,flag_dat表示接收的是第几个温度传感器的数据 uchar dat,dat1,dat2; uchar temp1,temp2,temp3;

/************显示函数********************/ void display() {

wc51r(0x80);//第一行第一列开始显示 wc51_str(\"T1:\"); wc51_data(temp1/100); wc51_data(temp1%100/10); wc51_data('.'); wc51_data(temp1%10); wc51_str(\" \") wc51_str(\"T2:\"); wc51_data(temp2/100); wc51_data(temp2%100/10); wc51_data('.'); wc51_data(temp2%10);

wc51r(0xC0);//第二行第一列开始显示 wc51_str(\"T3:\"); wc51_data(temp3/100); wc51_data(temp3%100/10); wc51_data('.'); wc51_data(temp3%10); }

27

XXX大学毕业设计

/***************pt2272读函数*************************/ uchar recv_dat() {

uchar y;

y=P1;//读取4位二进制数据 return(y); }

/***********主函数*************************/ void main() {

EA=1;//开总中断 EX0=1;//开外中断0

IT0=1;//设置外中断0位边沿触发方式 while(1) {

if(flag_dat==1) {

temp1=dat*10; }

else if(flag_dat==2) {

temp2=dat*10; }

else if(flag_dat==3) {

temp3=dat*10; }

display(); } }

/*************外中断0函数***********************/

28

XXX大学毕业设计

void int0() {

if(flag==0)

interrupt 0

dat1=recv_dat();//读取低4位数据 else

dat2=recv_dat();//读取高4数据位 flag++;//每中断一次标志位自加1 if(flag==2) {

flag=0;

flag_dat++; if(falg_dat==4) flag_dat=1;

}

dat1=dat1&0x0f; dat2=(dat2&0x0f)>>4; dat=dat1|dat2; }

1602.h头文件: #include

#define uchar unsigned char /*sbit RS=P2^7; sbit RW=P2^6; sbit E=P2^5; */

#define RS P2_5 #define RW P2_6 #define E P2_7

void init();//声明初始化函数

void wc51r(uchar x);//声明写命令函数 void wc51_data(uchar y);//声明写数据函数

29

XXX大学毕业设计

void wc51_str(uchar *p);//声明写字符串函数 void fbusy();//声明查忙函数 void init() {

wc51r(0x01);//清屏

//wc51r(0x30);//使用8位数据,单行显示,5*7点阵 wc51r(0x38);//使用8位数据,双行显示,5*7点阵 //wc51r(0x0e);//显示器开,显示光标,字符不闪烁 wc51r(0x0c);//显示器开 不显示光标,字符不闪烁 wc51r(0x06);//字符不动,光标移动 }

void fbusy()//查忙函数 { }

//写函数命令

void wc51r(uchar x ) {

fbusy(); RS=0; RW=0; E=1; P0=x;

30

do {

P0=0xff;// 作为输入时,应该被拉高,初始化输入端口 RS=0; RW=1; E=0;

E=1;//上升沿时数据才开始建立,也就是读入P0口的数据 _nop_();//数据建立需要一定的时间 最大值100ns

}while(P0_7);//如果查忙标志位为1则忙,查忙标志位为数据输入端的最高位BF

XXX大学毕业设计

E=0; _nop_(); }

//写数据函数

void wc51_data(uchar y) {

fbusy(); RS=1; RW=0; E=1; P0=y; E=0; _nop_(); }

void wc51_str(uchar *p)//输入字符串函数 {

while(*p) {

wc51_data(*p); p++; }

}

31

XXX大学毕业设计

参考文献:

[1] 余永权:单片机原理及应用,电子工业出版社, 1998.12,P57-P62

[2] 诸邦田:电子电路实用抗干扰技术,人民邮电出版社,1994.5,P23-29 [3] 曲喜新:电子元件材料手册.电子工业出版社,1989.4,P17-P22

[4] 黄贤武、郑筱霞、曲 波、刘文杰:传感器实际应用电路设计,电子科技大学出

版社,1997.6,P8-P15

[5] 刘君华:智能传感器系统,西安电子科技大学出版社,1999.3,P137-P146 [6] 汪吉鹏、马云峰:微机原理与接口技术,高等教育出版社,2001.7,P44-P56 [7] 贾振国:DS1820 及高精度温度测量的实现,电子技术应用,2000.1,P9-P14 [8] 伟 正:单线数字温度传感器的原理与应用,电子技术应用,2000.6,P23-P31 [9] 周月霞、孙传友:DS18B20 硬件连接及软件编程,传感器世界,2001.8,P13-P21 [10] 单线数字温度传感器资料,武汉力源电子有限公司,1996.3,P25-P29

32

因篇幅问题不能全部显示,请点此查看更多更全内容