毕业设计(论文)-基于单片机温度数据无线传输系统设计.doc_第1页
毕业设计(论文)-基于单片机温度数据无线传输系统设计.doc_第2页
毕业设计(论文)-基于单片机温度数据无线传输系统设计.doc_第3页
毕业设计(论文)-基于单片机温度数据无线传输系统设计.doc_第4页
毕业设计(论文)-基于单片机温度数据无线传输系统设计.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

毕 业 设 计(论 文) 设计(论文)题目: 基于单片机温度数据 无线传输系统设计 学生姓名: 指导教师: xxx 二级学院: 机电工程学院 专业: 自动化 班级: 08自动化(1) 学号: xXXXX 提交日期: 2012年5月8日 答辩日期: 2012年 5月19日 金陵科技学院学士学位论文 目录目 录摘 要IIIabstractIV1 绪 论12 总体方案设计22.1 方案论证22.1.1 传感器22.1.2 主控部分22.2 总结33 硬件电路的设计43.1 单片机介绍43.1.1 STC89C52简介43.1.2 STC89C52引脚说明43.2 电源电路63.3 温度采集电路73.3.1 DS18B20简介73.3.2 DS18B20硬件连接电路设计83.4 无线发送与接收电路93.4.1 KYL-610无线数据传输模块主要特征93.4.2 接口定义93.4.3 软件设置103.4.4 硬件使用方法103.5 数码管显示电路113.5.1 LED数码管简介113.5.2 数码管显示电路硬件设计124 软件设计144.1系统概述144.2 程序设计流程图144.3 数据采集程序设计154.3.1 DS18B20初始化154.3.2 DS18B20读一个字节164.3.3 DS18B20写一个字节164.3.4 温度数值显示处理程序174.4 串口通信程序设计184.4.1 发送端程序设计184.4.2 接收端程序设计204.5 上位机软件设计214.5.1 界面设计214.5.2 温度曲线绘制215 调试及结果235.1 测试环境及工具235.2 测试方法235.3 测试结果分析236 总 结24附录1:电路原理图25附录2:单片机主程序26附录3:上位机程序31参考文献35致 谢36IV金陵科技学院学士学位论文 摘要基于单片机温度数据无线传输系统设计摘 要本设计用廉价51单片机和无线射频模块KYL-610为主要硬件,设计了包括温度采集,温度显示,系统控制,串口通信等外围电路。单片机STC89C52作为主单片机完成测量和控制以及与PC的数据通信功能。温度传感器使用DALLAS公司的DS18B20,将它采集到的温度数据直接送到单片机,KYL-610模块将单片机的待传数据调制成射频调制信号,再无线远程发送到PC机端的KYL-610模块,解调后通过RS232串口接至上位机,实现数据传输,最后经过处理的温度数据实时显示在电脑屏幕上供用户察看。该系统实现了数据处理功能强大、显示直观、界面友好、性价比高、应用广泛的特点,可广泛应用于工业控制、仪器、仪表、机电一体化、智能家居等诸多领域。关键词:单片机;DS18B20;无线传输;上位机显示金陵科技学院学士学位论文 AbstractDesign of temperature wireless data transmission system based on MCUabstractThis design with the cheap 51 MCU and RF module of KYL-610 as the main hardware, including of temperature acquisition, temperature display, system control, serial communication, and other peripheral circuits. The MCU STC89C52 as a master MCU complete the measurement and control as well as data communication with the PC. The temperature sensor DS18B20 which come from DALLAS company, send temperature data collected to the MCU directly. The module KYL-610 modulate the MCU data which wait to be sent into the RF modulation signal, and then Wireless send to the module KYL-610 of PC, after demodulation connect to position machine through the serial port to realize data transmission.At last, the temperature data will real-time display on computer screen for users. This system has realized the data processing function is powerful, intuitive, user-friendly, cost-effective, application of a wide range of characteristics, can be widely used in industrial control, instruments, instrumentation, electromechanical integration, intelligent home furnishing and many other areas.Keywords: MCU; DS18B20; wireless transmission; PC display金陵科技学院学士学位论文 第1章 绪论1 绪 论21世纪的今天,科学技术的发展日新月异,科学技术的进步同时也带动了测量技术的发展,现代控制设备不同于以前,它们在性能和结构发生了翻天覆地的变化。我们已经进入了高速发展的信息时代,测量技术是当今社会的主流,广泛地深入到应用工程的各个领域。温度是工业、农业生产中常见的和最基本的参数之一,在生产过程中常需对温度进行检测和监控,采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用。伴随工业科技、农业科技的发展,温度测量需求越来越多,也越来越重要。但是在一些特定环境温度监测环境范围大,测点距离远,布线很不方便。这时就要采用无线方式对温度数据进行采集。本设计是以STC公司的STC89C52单片机作为控制核心,提出以DS18B20的温度采集无线传输系统。控制器通过温度传感器实时检测温度变化,并在数码管上显示温度的变化。通过串口将检测到的温度信息回馈到上位机(PC机),从而远程实现对整个系统的检测。系统采用基于无限网络的设计思想和温度采集技术。无线传输避免了远距离布线所带来的施工困难,成本高的缺点。该系统与传统的温度检测相比,输出温度采用数字显示,并且可省去人工现场抄表的麻烦,具有读数方便,测温准确,测温范围广,测量距离远等主要特点。因为采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用,并且温度参数对工业生产的重要性,所以温度测量系统的精确度和智能化一直受到企业的重视。所以学习并研究温度测量及相关知识可做为一个较为实用的课题的方向,能获得较实用的知识和方法。因此温度测控技术是一个很实用、也很重要的技术,值得去研究掌握。它应用的领域也相当广泛,可以应用到消防电气的非破坏性温度检测,电力、电讯设备的过热故障预知检测,空调系统的温度检测,各类运输工具组件的过热检测,保全与监视系统的应用,医疗与健诊的温度测试,化工、机械等设备温度过热检测。因此前景是相当的可观。36金陵科技学院学士学位论文 第2章 总体方案设计2 总体方案设计2.1 方案论证温度检测系统有则共同的特点:环境复杂、布线分散、现场离监控室远等。若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降。所以温度检测无线传输系统的设计的关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用范围广泛、使用数量庞大,也高居各类传感器之首。2.1.1 传感器方案一:采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,随着环境温度的变化,它的阻值也发生线性变化,用处理器采集电阻两端的电压,然后根据某个公式就可以计算出当前环境温度,但热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的。方案二:采用单片模拟量的温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使得测温装置的结构较复杂。另外,这种测温装置的一根线上只能挂一个传感器,不能进行多点测量。即使能实现,也要用到复杂的算法,一定程度上也增加了软件实现的难度。方案三:采用数字温度传感器DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线性度较好。在0100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS1820和微控制器STC89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接1。这样,测温系统的结构就比较简单,体积也不大。采用温度芯片DS18B20测量温度,可以体现系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋势。2.1.2 主控部分方案一:采用STC89C52八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对DS18B20控制工作,还可以与PC机通信。另外STC89C52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。方案二:利用ARM处理器的强大功能,通过读取温度传感器数据,并与设定值进行比较,然后对温度进行控制。通过内嵌的操作系统CLinux获得极好的实时性,并且通过TCP/IP协议能与PC机很快的通讯。其优势不只是温度控制精度高,而且能够通过现场跟远程两种方式来设定控制温度。ARM嵌入式温度控制系统对软件要求比较高,与网络技术结合紧密,适合远程控制,但是开发复杂,并且对工程人员要求很高。方案三:使用MSP430作控制器,德州仪器 (TI) 的超低功率16位RISC 混合信号处理器MSP430产品系列为电池供电测量应用提供了最终解决方案。作为混合信号和数字技术的领导者,TI创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。但在温度采集和实施控制这个重要的场合低功耗相对来说显得就不是那么重要了,而应该考虑它的稳定性、准确性,同时对比STC89C52能够在性能和资源都可以到达一个最佳的状态,可以避免用MSP430的不必要的资源浪费。2.2 总结综上,我们传感器采用方案三,控制器采用方案一。系统框图如下图2.1。图2.1 电路系统框图金陵科技学院学士学位论文 第3章 硬件电路的设计3 硬件电路的设计3.1 单片机介绍3.1.1 STC89C52简介如图3.1所示为STC89C52芯片的引脚图2。兼容传统8051指令系统的STC89C52单片机是新一代低功耗、高性能、超强抗干扰的单片机,片内含8KB在线可编程Flash存储器。STC89C52单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含512B的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有3个16位可编程定时/计数器;具有EEPROM功能;具有看门狗功能;共有6个中断源,其中T2是52单片机特有的。STC89C52具有PDIP、TQFP和PLCC三种封装形式。图3.1 STC89C52引脚图上图是PDIP封装的引脚排列,下面介绍各引脚的功能。3.1.2 STC89C52引脚说明P0口(32脚-39脚):8位、开漏级、双向I/O口。P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每个引脚可吸收8个TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程校验时,P0口输出代码字节数据(需要外接上拉电阻)。P1口(1脚-8脚):8位、双向I/0口,内带上拉电阻。P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平,然后单片机内部才可以正确读出外部信号。此外,P1.0引出脚的第二功能为T2定时器/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制器。 在对Flash ROM编程和程序校验时,P1可接收低8位地址。P2口(21脚-28脚):具有内部上拉电阻的8位双向I/O口。P2口用做输出口时,可驱动四个TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。CPU访问外部16位地址的存储器时,P2口提供高8位地址。在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3口:具有内部上拉电阻的8位双向I/O口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。在对Flash ROM编程或程序校验时,P3口还接收一些控制信号。P3口除作为通用I/O口外,还有其他一些复用功能,如表3.1所示。表3.1 P3口引脚复用功能引脚符号说明P3.0RXD串行口输入P3.1TXD串行口输出P3.2/INT0外部中断0P3.3/INT1外部中断1P3.4T0T0定时器的外部的计数输入P3.5T1T1定时器的外部的计数输入P3.6/WR外部数据存储器的写选通P3.7/RD外部数据存储器的读选通RST(9脚):复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。ALE/ (30脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。同时,ALE使能标志位的设置对微控制器对于外部执行模式下无效。(29脚):外部程序存储器读选取通信号。当STC89C52在读取外部程序时,每个机器周期将PSEN激活两次。在此期间内,每当访问外部数据存储器时,将跳过两个信号。/Vpp(31脚):访问外部程序存储器允许端。为了能够从外部程序存储器的0000H至FFFFH单元中取指令,必须接GND,然而要注意的是,若对加密位1进行编程,则在复位时,的状态在内部被锁存。为了执行内部程序指令,应该接VCC。在Flash编程期间,也可接收12V编程电压。XTAL1(19脚):振荡器反向放大器输入端和内部时钟发生器的输入端。XTAL2(18脚):振荡器反相放大器输出端。3.2 电源电路电源变压器是将交流电网220V的电压变为所需要的电压值。交流电经过二极管整流之后,方向单一了,但是电流强度大小还是处在不断地变化之中。这种脉动直流一般是不能直接用来给集成电路供电的,而要通过整流电路将交流电变成脉动的直流电压。由于此脉动的直流电压还含有较大的纹波,必须通过滤波电路加以滤除,从而得到平滑的直流电压。滤波的任务,就是把整流器输出电压中的波动成分尽可能地减小,改造成接近稳恒的直流电。但这样的电压还随电网电压波动,一般有10%左右的波动,负载和温度的变化而变化,因而在整流、滤波电路之后,还需要接稳压电路3。稳压电路的作用是当电网电压波动,负载和温度变化时,维持输出直流电压稳定。220V交流电通过7.5V变压器变为7.5V的交流电,7.5V交流电通过四个二极管的全桥整流后变为7.5V直流电,然后经过电解电容(2200F)进行一级滤波,以去除直流电里面的杂波,防止干扰。7.5V直流电出来后再经过三端稳压器LM7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接7.5V直流电源正极,GND是接地脚,接7.5V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。5V电源出来再经过电解电容的二级滤波,使5V电源更加稳定可靠。同时在5V稳压电源加上一个470的电阻和一个红色发光二极管,当上电后,红色发光二极管点亮,表示电源工作正常。此时一个稳定输出5V的电源已经设计好,对于本设计它完全能够满足单片机及集成块所需电源的要求。电源原理图如图3.2所示。图3.2 电源电路原理图3.3 温度采集电路3.3.1 DS18B20简介温度芯片DS18B20是Dallas公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式4。测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出。测量温度范围为 -55+125,在-10+85范围内,精度为0.5。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20的内部结构如图3.3所示。图3.3 DS18B20方框图DS18B20有4个主要的数据部件:A、64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。B、温度灵敏元件。 C、非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。D、配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。其中R0、R1:温度计分辨率设置位,其对应四种分辨率如下表3.2所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率5。表 3.2 分辨率关系表R0R1分辨率/bit最大转换时间/us00993.750110187.510113751112750高速暂存存储器由9个字节组成,其分配如表3.3.1-2所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表3.3所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表3.3 DS18B20存储器温度LSB温度MSBTHTL保留保留计数寄存器计数寄存器8位CRC3.3.2 DS18B20硬件连接电路设计目前常用的单片机与外设之间进行数据传输的串行总线主要有I2C,SPI和SCI总线。其中I2C总线以同步串行二线方式进行通信(一条时钟线,一条数据线),SPI总线则以同步串行三线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线,而DS18B20使用的单总线技术与上述总线不同,它采用单条信号线,既可传输时钟,又可传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。 单片机通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线6。单总线通常要求外接一个约为10K的上拉电阻。DS18B20典型电路如下图3.4。图3.4 DS18B20典型电路3.4 无线发送与接收电路3.4.1 KYL-610无线数据传输模块主要特征 无线收发一体数据传输MODEM模块KYL610芯片性能优异,居业界领先水平。它所需外围元件少,是目前集成度较高的无线数据传输产品,在内部集成了高频接收、PLL合成、FSK调制/解调、参量放大、功率放大、频道切换等功能7。KYL610的主要特征:(1)载波频率为433MHz;(2)多种可选的通讯接口,如RS232、TTL或RS485接口等;(3)数据格式为8N1/8E1/8O1;(4)传输数率多;(5)16个通讯信道;(6)透明的数据传输;(7)收发一体,半双工工作模式;(8)采用单片射频集成电路及单片MCU,外围电路少,功耗低,可靠性高;(9)工作温度为35+75(工业级);(10)天线阻抗为50。3.4.2 接口定义 KYL610的端口定义见表3.4。表3.4 端口定义表PIN接口名称功能描述I/O电平备注1GND电源地2VCC电源(DC)3.15.5V其他供电电压需定制3RS232 TXD数据发送O(输出)RS2323种接口信号只能选其一TTL TXD数据发送O(输出)TTLRS485 A485接口A端IO4RS232 RXD数据接收I(输入)RS2323种接口信号只能选其一TTL RXD数据接收I(输入)TTLRS485 B485接口B端IO5DGND信号地6NC3.4.3 软件设置用户可以通过 PC 软件设置模块的工作信道、通讯速率等相关信息。信道与频率的对应关系见表3.5。表3.5 信道频率表信道号信道频率信道号信道频率信道号信道频率信道号信道频率1425.250MHz2426.250MHz3427.250MHz4428.250MHz5429.250MHz6430.250MHz7431.250MHz8432.250MHz9433.250MHz10434.250MHz11435.250MHz12436.250MHz13437.250MHz14438.250MHz15439.250MHz16440.250MHz3.4.4 硬件使用方法 (1) 电源。KYL-610无线数据传输模块使用直流电源,工作电压为3.15.5V。 (2) 接收模块与终端的连接。如图3.5所示,模块通过接线端子的3、4PIN和终端进行异步数据通讯。 (3) 发送模块与单片机的连接。如图3.6所示,模块通过接线端子的3、4PIN和单片机进行通信。 (4) 指示灯描述。发射数据时红灯常亮,发射完成后熄灭。收到数据时绿灯常亮,接收完成后熄灭。 (5) 数据传输。KYL-610系列产品提供透明的数据传输接口,可支持用户的各种应用和协议,实现点对点、点对多点透明传输。 图3.5 模块与计算机连接 图3.6 模块与单片机连接3.5 数码管显示电路3.5.1 LED数码管简介LED数码管是由发光二极管构成的数码显示器,内部用7个发光二极管组成字符的七段,每段用小写英文字母表示,主要用来显示09这10个数字,也可以显示某些英文字母或符号。图3.7是数码管的段位结构和引脚位置图8,该图为正面视图,中间两个引脚是公共引脚。按照一定组合使有关的段发光,就可以显示字符,故称为七段数码管。如果该数字后面有小数点,则七段就不够用了,所以又增加了一个发光二极管,用来显示小数点,用字母dp表示。图3.7 数码管引脚图按照内部发光二极管接法的不同,LED数码管分为共阳极和共阴极两类。共阳型数码管内部的8个发光二极管的阳极均连在一起,共阴型的则阴极全连在一起,如图3.8所示。图3.8 共阴型和共阳型LED数码管对于共阳型数码管来说,在使用时要将它们的公共阳极引脚通过一个限流电阻与电源的正极相连,然后使某些二极管的阴极接低电平,这样,数码管就会显示某一个数字,也就是说共阳型数码管的段码值为0时,该段发光9。对于共阴型来说,正好与此相反,段码值为1时,该段发光。要让数码管显示某一个字符,就要使某些段的组合二极管发光,这些对应某一个字符的七个段位组合,称为七段码。显然,共阳型数码管与共阴型数码管的段码是不同的,各字符的七位段码如表3.6所列。要注意的是,这些段码不包括小数点。如果要在某一位数字后面显示小数点,则须另外处理。表3.6 七段LED数码管段码表字符0123456789共阳段码C0HF9HA4HB0H99H92H82HF8H80H90H共阴段码3FH06H5BH4FH66H6DH7DH07H7FH6FH字符AbCdEFPH不显示共阳段码88H83HC6HA1H86H8EH8CH89HBFHFFH共阴段码77H7CH39H5EH79H71H73H76H40H00H3.5.2 数码管显示电路硬件设计显示模块用6位LED共阴型数码管,分别显示温度正负、百位、十位、个位、小数位及温度符号。通过软件设置温度数值的刷新时间为1s,本系统用动态扫描,每个数码管需要一个8位并行口驱动,这样6个LED数码管就需要6个8位并行口驱动,显然单片机无法提供这么多的口线。因此,本设计使用一片74HC573锁存器和74HC138译码器来分别控制数码管的段选与位选。74HC573的数据输入端连接单片机的P0口,输出端与数码管的所有阳极相连。74HC138的输入端与单片机的P2.0、P2.1、P2.2引脚相连,通过接收3位二进制加权地址输入,并当使能时,提供8个互斥的低有效输出,来选择哪一位数码管工作10。硬件电路如图3.9所示。图3.9 数码管与单片机接口电路金陵科技学院学士学位论文 第4章 软件设计4 软件设计4.1系统概述整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一类是监控软件(主程序),它是整个控制系统的核心,专门用来协 调各执行模块和操作者的关系。二类是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。4.2 程序设计流程图整个系统由两套模块组成,一套负责采集温度数据并通过KYL-610无线数传模块发送,另一套负责接收数据并通过串口将数据送入上位机存盘处理。下位机和上位机的工作流程框图分别如图4.1和4.2所示。 图4.1 下位机工作流程图 图4.2 上位机工作流程图4.3 数据采集程序设计访问一个DS18B20,必须经过初始化、ROM命令和功能命令这三个步骤,且缺一不可,否则DS18B20不会响应主机的任何命令11。由于本系统中只使用了一个DS18B20,并采用外部供电方式,因此,编程的工作也较容易。在初始化之后,如果DS18B20有应答,主机就可发出跳过ROM(CCH)命令,接着再发温度转换功能命令启动温度转换。启动转换后,单片机可通过发送读时隙来判断温度转换是否结束,DS18B20会做出响应,发回0表示转换还在进行,发回1表示已经转换完毕12。本系统根据DS18B20的典型转换时间,经过适当的延时程序之后,再读取转换结果。读出的温度值还须进行适当的格式转换,以便显示或做进一步处理。4.3.1 DS18B20初始化单线总线上的所有操作都是从初始化开始的13。过程如下:(1)请求:主机通过拉低单线480us以上,产生复位脉冲,然后释放该线,进入Rx接收模式。主机释放总线时,会产生一个上升沿脉冲。DQ : 10(480us+)1(2)响应:DS18B20检测到该上升沿后,延时1560us,通过拉低总线60240us来产生应答脉冲。DQ:1(1560us)0(60240us) (3)接收响应:主机接收到从机的应答脉冲后,说明有单线器件在线。至此,初始化完成。DQ:0具体程序如下:void Init_DS18B20(void) /DS18B20初始化 unsigned char x=0; DQ = 1; /DQ复位 delay(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay(80); /精确延时 大于480us DQ = 1; /拉高总线 delay(10); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5);4.3.2 DS18B20读一个字节读出一个字节的流程:(1)将数据线拉高到“1”。(2)延时2us。(3)将数据线拉低到“0”。(4)延时6us。(5)将数据线拉高到“1”。(6)延时4us。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时30us。(9)重复(1)(7)步骤,直到读取完一个字节。具体程序如下:unsigned char ReadOneChar(void) / 读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; /单片机将DQ拉低 dat=1; DQ = 1; /拉高总线 if(DQ) dat|=0x80; delay(5); return(dat);4.3.3 DS18B20写一个字节写入一个字节的流程:(1)数据线先置低电平“0”。(2)延时确定的时间为15us。(3)按从低位到高位的顺序发送字节(一次只发送一位)。(4)延时时间为45us。(5)将数据线拉到高电平1。(6)重复上(1)(5)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高1。具体程序如下:void WriteOneChar(unsigned char dat) /写入一个字节 unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; delay(5);4.3.4 温度数值显示处理程序处理温度数据,先判断正负,若为负值则设数码管第一位为“”,取出小数位(低四位),将小数位移出,剩下的位整数,通过进行除法、取余运算得到温度值的百位、十位和个位。由于DS18B20采用12位温度转换,温度分辨率为0.0625oC,而实际使用只要精确到小数点后一位,故需要对转化后的温度数值进行处理,此处使用变量累加设置小数部分14。温度数值显示处理程序具体如下:while(1) str5=0x39; /显示C符号 str1=tabTempH/100; /百位温度 str2=tab(TempH%100)/10; /十位温度 str3=tab(TempH%100)%10|0x80; /个位温度,带小数点 str4=tabTempL;/小数 if(flag_get=1) /定时读取当前温度 temp=ReadTemperature(); if(temp&0x8000) str0=0x40;/负号标志 temp=temp; / 取反加1 temp +=1; else str0=0; TempH=temp4; TempL=temp&0x0F; TempL=TempL*6/10;/小数部分变量累加近似处理 printf(%d.%dn,TempH,TempL); flag_get=0; 4.4 串口通信程序设计4.4.1 发送端程序设计发送端程序是将温度信息实时打包发送,主程序中循环进行温度的采集与发送。本系统采用最常用的通信方式串行口方式1。方式1是10位数据的异步通信口,其中1位起始位,8位数据位,1位停止位。当数据被写入SBUF寄存器后,单片机自动开始从起始位发送数据,发送到停止位的开始时,由内部硬件将TI置1,向CPU申请中断,接下来可在中断服务程序中做相应处理,也可选择不进入中断。本设计由于只需要发送采集到到温度数据,无需对数据输入进行处理。在具体操作串行口之前,需要对单片机的一些与串口有关的特殊功能寄存器进行初始化设置,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:(1)确定T1的工作(编程TMOD寄存器);(2)计算T1的初值,装载TH1,TL1;(3)启动T1(编程TCON的TR1位);(4)确定串行口工作方式(编程SCON寄存器);(5)串行口工作在中断方式时,要进行中断设置。对于51单片机,其传输波特率是可变的,波特率由定时器1的溢出率决定。系统晶振选用频率11.0592MHz,波特率设为9600bps,由此可算出装入定时器的初值为0xfd。通过调用printf函数,将温度数值发送出去。发送端程序流程图如下图4.3所示。图4.3 发送端程序流程图具体程序如下:void UARTinit(void) /*串行口初始化*/ SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收*/ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload*/TH1 = 0xFD; /* 装初值*/ TR1 = 1; /* TR1: timer 1 run */ TI = 1; void main() UARTinit();While(1) temp=ReadTemperature(); if(temp&0x8000) str0=0x40; /负号标志 temp=temp; / 取反加1 temp +=1; else str0=0; TempH=temp4; TempL=temp&0x0F; TempL=TempL*6/10;/小数近似处理 printf(%d.%dn,TempH,TempL); /以整型数据的实际长度输出,往串口发送温度数据字符串4.4.2 接收端程序设计接收端程序首先是对初始化状态的设置,接收数据,送PC机显示。本设计采用Visual Basic串口通信技术,利用MSComm控件来接收数据、处理数据和显示数据。其工作流程图如下图4.4所示。图4.4 接收端程序流程图在进行通信前,首先要有一个通信双方所必须遵守的规则,即通信协议。本设计的通信协议代码如下: Private Sub Form_Load()MSComm1.Settings = 9600,N,8,1 波特率9600bit/s,无校验,8位数据,1位停止位 MSComm1.DTREnable=True 使DTR线有效,等待接收传输MSComm1.EOFEnable=FalseMSComm1.CommPort = 1 设定串口com1,此处默认是端口1,可选择其他端口MSComm1.InBufferSize = 1024 设置返回接收缓冲区的大小,以字符为单位 MSComm1.OutBufferSize = 512 MSComm1.RThreshold = 0 设置并返回产生oncomm事件的字符数,以字符为单位 MSComm1.SThreshold = 0MSComm1.InputLen = 0 设置从接收缓冲区读取的字符数,为0读取整个缓冲区MSComm1.InputMode = 0-comInputModeText 以文本方式接收MSComm1.InBufferCount = 0MSComm1.NullDiscard=FalseMSComm1.RTSEnable=FalseEnd Sub 4.5 上位机软件设计串口通信作为一种非常基础而灵活的通信方式,被广泛地应用于PC间的通信以及PC和单片机之间的通信之中。在Visual Basic中有一个Microsoft Communication Control(简称MSComm)的通信控件,就可以轻松地实现串口通信15。上位机所有程序与代码都是使用Microsoft Visual Basic 6.0企业版编写。4.5.1 界面设计在窗口中主要有控制命令按钮、温度显示、温度曲线、端口选择、当前时间这5类功能。主窗体如图4.5所示。图4.5 主窗体4.5.2 温度曲线绘制为较简洁地显示出温度的变化,此处使用绘制温度变化曲线,刷新时

温馨提示

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

评论

0/150

提交评论