版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于单片机的数据采集系统设计摘要随着信息领域各种技术的发展,在数据采集方面的技术也取得了长足的进步,采集数据的信息化是目前社会的发展主流方向。各种领域都用到了数据采集,在石油勘探、地震数据采集领域已经得到应用。随着测控技术的迅猛发展,以嵌入式计算机为核心的数据采集系统己经在测控领域中占到了统治地位。数据采集系统是将现场采集到的数据进行处理、传输、显示、存储等操作。数据采集系统的主要功能是把模拟信号变成数字信号,并进行分析、处理、存储和显示。国内大大小小很多公司多开发了数据采集器和卡之类的产品,这使信息的数字化提供了极大的方便。本次毕业设计课题,数据采集器制作,是利用atmel公司的89c51单
2、片机和ad0809芯片做一个采集模拟电压信号,转换为数字信号,再由单片机经过串口发送给pc机处理,另外三个数码管led显示采集的数字信息。关键字:单片机、数据采集、信号处理、ad0809芯片abstractalong with the development of information field various technologies, the technology in the aspect of data collection has also gotten rapid advance, gather the informative process of data is now so
3、ciety develop the direction of main stream. various fields have used data collection , in petroleum exploration and seismic data collection field have gotten application. as measuring to control technical swift development, with embedded computer for key data collection system ji go through in measu
4、re to control field in have taken dominance position. data collection system is to carry out the data that the collection on-the-spot goes to to handle , transmits and shows , stock etc. operation. the major function of data collection system is simulated signal become digital signal, and analyse ha
5、ndling , stock and show. domestic size many companies have developed data collection ware and the product that blocks and so on , this makes the digitlization of information have offered maximum convenience. this graduated design program, data collection ware produce is the only flat machine of 89 c
6、51 that uses the company of atmel with ad0809 chip do a collection simulated voltage signal, conversion number word signal passes string mouth again by only flat machine to dispatch to the handling of personal computer, additionally, 3 number pipe leds show the digital information of collection. key
7、word: only flat machine、data is gathered、handle 目 录摘要1第一章 数据采集器简介51.1 数据采集器概述51.2 目前的数据采集51.2.1 铅笔和纸51.2.2长条图表记录仪61.2.3 pc机插件卡片61.2.4数据采集器61.3数据采集的选择及应用7第二章 开发环境82.1画图工具 protel99软件82. 2编程工具 keil c5192. 3 烧写器11第三章 设计过程123.1系统功能及结构简介123.2 硬件芯片选择及功能简介133.2.1 at89c51 芯片133.2.2 adc0908 芯片143.2.3 74ls74 芯
8、片163.2.4 max232 芯片173.2.5 74ls244 芯片183.3 原理介绍183.4 软件设计213.5 pc机上数据接收软件制作223.6 调试过程263.6系统精度28第四章 总结29第五章 致谢30附录 一 参考文献31附录 二 外文翻译32附录三 程序49第 58 页第一章 数据采集器简介1.1 数据采集器概述数据采集系统,正如名字所暗示的,是一种用来采集信息成文件或分析一些现象的产品或过程。在最简单的形式中,技术人员将烤箱的温度记录在一张纸上就是数据采集。随着技术的发展,通过电子设备,这个过程已经得到简化和变得比较精确、多用途和可靠。设备从简单的存储器发展到复杂的电
9、脑系统。数据采集产品像聚焦点一样为系统服务,和一系列产品一起,诸如传感器显示温度、水流、程度或者过程。数据采集技术在过去30到40年以来已经取得了很大的飞跃。举例来说,在 40 年以前,在一个著名的学院实验室中,为追踪用青铜做的坩埚中的温度上升情况的装置是由热电偶、继电器、查询台、一捆纸和一支铅笔。今天的大学学生很可能在pc机上自动处理和分析数据,有很多种可供你选择的方法去采集数据。至于选择哪一种方法取决于多种因素,包括任务的复杂度、你所需要的速度和精度、你想要的证据资料等等。无论是简单的还是复杂的,数据采集系统都能够运行并发挥它的作用。1.2 目前的数据采集1.2.1 铅笔和纸用铅笔和纸的旧
10、方式对于一些情形仍然是可行的,而且它便宜、易获得、快速和容易开始。而你所需要的就是捕捉到多路数字信息(dmm),然后开始用手记录数据。不幸的是这种方法容易发生错误、采集数据变慢和需要太多的人工分析。此外,它只能单通道采集数据;但是当你使用多通道dmm时,系统将很快变得非常庞大和呆笨拙。精度取决于誊写器的水平,并且你可能需要自己动手依比例输入。举例来说, 如果dmm 没有配备处理温度的传感器,旧需要动手找比例。考虑到这些限制,只有当你需要实行一个快速实验时,它才是一个可接受的方法。1.2.2长条图表记录仪现代多种版本的长条图表记录仪允许你从多个输入取得数据。他们提供数据的长备纸记录,因为数据是图
11、解的格式,他们易于现场采集数据。一旦建立了长条图表记录仪,在没有操作员或计算机的情况下,大多数记录仪具有足够的内部智能运行。缺点是缺乏灵活性和相对的精度低,时常限制在百分点。你能很清楚地感觉到与笔只有小的改变。在多通道内较长时间的监控,记录仪能发挥很好的作用,除此之外,它们的价值得到限制。举例来说,他们不能够与另外的装置轮流作用。其他的顾虑就是笔和纸的维护,纸的供给和数据的存储,最重要的是纸的滥用和浪费。然而,记录仪相当容易建立和操作,为数据快速而简单的分析提供永久的记录。1.2.3 pc机插件卡片pc机插件卡片是单板测量系统,它利用isa或pci总线在pc机内扩大插槽。它们时常具有高达每秒1
12、000的阅读速率。8到16通道是普遍的,采集的数据直接存储在电脑里,然后进行分析。因为卡片本质上是计算机的一部分,建立测试是容易的。pc机卡也相对的便宜,一部分地,因为他们以来主机pc去提供能源、机械附件和使用界面。1.2.4数据采集器数据采集器是典型的单机仪器,一旦配备它们,就能测量、记录和显示数据而不需要操作员或计算机参与。它们能够处理多信号输入,有时可达120通道。 精度可与无与伦比的台式 dmms 匹敌,由于它在22字、 0.004个百分率的精度范围内运转。一些数据采集器有能力按比例测量,检查结果不受使用者定义的限制,而且输出为控制作信号。1.3数据采集的选择及应用在缺点上,pc机插件
13、卡片时常只有12字的容量,因此你不能察觉输入信号的小变化。此外,pc机内的电子环境经常很容易发出噪声、产生高速率的时钟和总线噪声,电子接触面限制pc机插件卡片的精度。这些插件卡片也测量一定范围的电压。为了测量其他输入信号,如电压、温度和阻力,你也许需要一些外部信号监测的器件。其它关心包括复杂的校正和全部的系统成本,尤其如果你需要购买额外信号监测器件或用pc机适应插件卡片。把这些考虑进去,如果你的需要在卡片的能力和限制范围内变动,pc机插件卡片给数据采集提供吸引人的方法。使用数据采集器的一个好处就是他们的内部监测信号。大部分能够直接地测量若干不同的输入信号,而不需要额外的信号监测器件。一个通道能
14、够监测热电偶、温阻器(rtd)和电压。热电偶为准确的温度测量提供具有参考价值的补偿,是很典型的配备了多路插件卡片。内设智能数据采集器帮助你设定测量周期和具体指定每个通道的参数。一旦你全部设定好,数据采集器就如同无与伦比的装置运行。它们存储的数据分布在内存中,能够容纳500000或更多的阅读量。与pc机连接容易将数据传送到电脑进行进一步的分析。大多数数据采集器可设计为柔性和简单的组态和操作, 而且经由电池包裹或其它方法,多数提供远程位置的操作选项。靠 a/ d 转换技术,一定的数据采集器阅读的速率比较低,尤其是跟pc机插件卡片比较。然而,每秒250的阅读速率比较少见。要牢记正在测量的许多现象本质
15、上是物理的,如温度、压力和流量,而且一般有较少的变动。此外,因为数据采集器的监测精度,多量且平均阅读没有必要,就像它们经常在pc记插件卡片一样。在前面的分析基础上,现在开始发展数据采集器,数据采集器是采集数据的理想选择。 第二章 开发环境2.1画图工具 protel99软件 在这里我用了protel99设计原理图和画pcb板。protel99se是protel公司近10年来致力于windows平台开发的最新结晶,能实现从电学概念设计到输出物理生产数据,以及这之间的所有分析、验证和设计数据管理。因而今天的protel最新产品已不是单纯的pcb(印制电路板)设计工具,而是一个系统工具,覆盖了以pc
16、b为核心的整个物理设计。 最新版本的protel软件可以毫无障碍地读orcad、pads、accel(pcad)等知名eda公司设计文件,以便用户顺利过渡到新的eda平台。protel99 se共分5个模块,分别是原理图设计、pcb设计(包含信号完整性分析)、自动布线器、原理图混合信号仿真、pld设计。 以下介绍一些protel99se的部分最新功能:1、可生成30多种格式的电气连接网络表;2、强大的全局编辑功能;3、在原理图中选择一级器件,pcb中同样的器件也将被选中; 4、同时运行原理图和pcb,在打开的原理图和pcb图间允许双向交叉查找元器件、引脚、网络; 5、既可以进行正向注释元器件标
17、号(由原理图到pcb),也可以进行反向注释(由pcb到原理图),以保持电气原理图和pcb在设计上的一致性; 6、满足国际化设计要求(包括国标标题栏输出,gb4728国标库); * 方便易用的数模混合仿真(兼容spice 3f5);7、支持用cupl语言和原理图设计pld,生成标准的jed下载文件; * pcb可设计32个信号层,16个电源-地层和16个机加工层;8、强大的“规则驱动”设计环境,符合在线的和批处理的设计规则检查; 9、智能覆铜功能,覆铀可以自动重铺; 10、提供大量的工业化标准电路板做为设计模版; 11、放置汉字功能; 12、可以输入和输出dxf、dwg格式文件,实现和autoc
18、ad等软件的数据交换; 13、智能封装导航(对于建立复杂的pga、bga封装很有用); 14、方便的打印预览功能,不用修改pcb文件就可以直接控制打印结果; 15、独特的3d显示可以在制板之前看到装配事物的效果; 16、强大的cam处理使您轻松实现输出光绘文件、材料清单、钻孔文件、贴片机文件、测试点报告等; 17、经过充分验证的传输线特性和仿真精确计算的算法,信号完整性分析直接从pcb启动; 18、反射和串扰仿真的波形显示结果与便利的测量工具相结合; 19、专家导航帮您解决信号完整性问题。2. 2编程工具 keil c51在这里我用c语言编写程序,用的编程工具就是广受开发者喜爱的keil c5
19、1开发软件,他支持的功能强,适合很多公司的芯片。keil c51是美国keil software公司出品的51系列兼容单片机c语言软件开发系统,与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用c来开发,体会更加深刻。 keil c51软件提供丰富的库函数和功能强大的集成开发调试工具,全windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到keil c51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍keil c51开发系统各部分功能和使用。c5
20、1工具包的整体结构,如图(1)所示,其中uvision与ishell分别是c51 for windows和for dos的集成开发环境(ide),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用ide本身或其它编辑器编辑c或汇编源文件。然后分别由c51及a51编译器编译生成目标文件(.obj)。目标文件可由lib51创建生成库文件,也可以与库文件一起经l51连接定位生成绝对目标文件(.abs)。abs文件由oh51转换成标准的hex文件,以供调试器dscope51或tscope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如eprom中
21、。图(1) c51工具包整体结构图当设计一个小的嵌入式系统时,一般我们都用汇编语言在很多工程中,这是一个很好的方法因为代码一般都不超过8k, 而且都比较简单。如果硬件工程师要同时设计软件和硬件,经常会采用汇编语言来做程序。我的经验告述我,硬件工程师一般不熟系像c一类的高级语言。使用汇编的麻烦在于它的可读性和可维护性,特别当程序没有很好的标注的时候,代码的可重用性也比较低,如果使用c 的话可以很好的解决这些问题。用c 编写的程序,因为c 语言很好的结构性和模块化,更容易阅读和维护而且由于模块化,用c 语言编写的程序有很好的可移植性,功能化的代码能够很方便的从一个工程移植到另一个工程,从而减少了开
22、发时间,用c 编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。使用像c 这样的语言程序员不必十分熟系处理器的运算过程,这意味着对新的处理器也能很快上手不必知道处理器的具体内部结构。使得用c 编写的程序比汇编程序有更好的可移植性,很多处理器支持c 编译器,所有这些并不说明汇编语言就没了立足之地。很多系统特别是实时时钟系统都是用c 和汇编语言联合编程,对时钟要求很严格时使用汇编语言成了唯一的方法,除此之外根据我的经验包括硬件接口的操作都应该用c 来编程,c 的特点就是可以使你尽量少地对硬件进行操作是一种功能性和结构性很强的语言。2
23、. 3 烧写器在这次设计中我用了炜煌编程器的top851型编程器,它具有体积小巧,功耗低,可靠性高的特点,是专为开发51系列单片机和烧写各类存储器而设计的普及机型。top851采用rs232串口与pc机连接通信,自动检测元件是否插好,如果插错了位置有提示,避免无谓的损失。有过电流保护,超过限制的电流时,在0.1秒内切断电源,可以有效的保护编程器不受损害。电源效率高,静态电流只有50ma,机器不会过热。全中问操作界面软件,可自动探测厂家和型号。使用时包括硬件安装和软件安装。第三章 设计过程3.1系统功能及结构简介 我设计的数据采集器主要是采集05v模拟电压信号,现在大部分的模拟量多可以用各种器转
24、换成电压模拟信号。系统把模拟的电压信号转换成数字数据,由单片机串口经过ttl电平转换后,发送到pc机由pc机处理采集的信号,另外3个数码管led显示数字电压的大小,两个发光二极管指示工作状态。可以通过八个按钮选择八个采集通道,一个按钮控制转换开始或结束,系统可复位。系统结构图:图(2)系统结构图3.2 硬件芯片选择及功能简介主控制芯片使用at89c51芯片,转换模块使用adc0809模数转换芯片,用双d触发器74ls74四分频89c51的ale信号输出脚2mhz为500khz为adc0809提供时钟信号,串口转换芯片max232,另外用74ls244驱动led数码管。3.2.1 at89c51
25、 芯片at89c51是美国atmel公司生产的底电压,高性能cmos 8位单片机,片内含4k bytes的可反复擦写的flash只读程序存储器和128 bytes 的随机存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51 指令系统,片内置通用8位中央处理器(cpu)和flash 存储单元,功能强大at89c51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。引脚图:图(3)89c51引脚图特性: 80c51 核心处理单元,4k 字节flash 89c51x2,128 字节ram 89c51x2,布尔处理器。全静态操作,12 时钟操作可
26、选6 个时钟通过软件或并行编程器,存储器寻址范围,64k 字节rom 和64k 字节ram,电源控制模式:时钟可停止和恢复、空闲模式、掉电模式。 两个工作频率范围:6 时钟模式时为0 到20mhz,12 时钟模式时为0 到33mhz。复位:在振荡器工作时,将rst 脚保持至少两个机器周期高电平12 时钟模式为24 个振荡器周期,6 时钟模式为12 振荡器周期可实现复位。为了保证上电复位的可靠,rst 保持高电平的时间至少为振荡器启动时间通常为几个毫秒再加上两个机器周期。复位后,振荡器以12 时钟模式运行当已通过并行编程器设置为6 时钟模式时除外。低功耗模式:时钟停止模式:静态设计使时钟频率可以
27、降至0mhz(停止)。 当振荡器停振时,ram 和sfr 的值保持不变。该模式允许逐步应用并可将时钟频率降至任意值以实现系统功耗的降低。如要实现最低功耗则建议使用掉电模式。空闲模式:cpu 进入睡眠状态,但片内的外围电路仍然保持工作状态。正常操作模式的最后一条指令执行进入空闲模式。空闲模式下cpu 内容片内ram 和所有sfr 保持原来的值。任何被使能的中断(此时,程序从中断服务程序处恢复并继续执行)或硬件复位(与上电复位使用相同的方式启动处理器)均可终止空闲模式。掉电模式:为了进一步降低功耗,通过软件可实现掉电模式。 该模式中,振荡器停振并且在最后一条指令执行进入掉电模式。降到2.0v 时,
28、片内ram 和sfr 保持原值,在退出掉电模式之前vcc 必须升至规定的最低操作电压。3.2.2 adc0908 芯片ad0809 的逻辑结构:adc0809 是8 位逐次逼近型a/d转换器。它由一个8路模拟开关、一个地址锁存译码器、一个a/d 转换器和一个三态输出锁存器组成(见图1)。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用a/d 转换器进行转换。三态输出锁器用于锁存a/d 转换完的数字量,当oe 端为高电平时,才可以从三态输出锁存器取走转换完的数据。图(4) adc0809 内部结构ad0809 的工作原理:in0in7:8 条模拟量输入通道;adc0809 对输入模拟量
29、要求:信号单极性,电压范围是05v,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。地址输入和控制线:4条;ale 为地址锁存允许输入线,高电平有效。当ale线为高电平时,地址锁存与译码器将a, b,c 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。a,b 和c 为地址输入线,用于选通in0in7 上的一路模拟量输入。通道选择表如下表所示。c b a 选择的通道:表一cbaincbain000in0100in4001in1101in5010in2110in6011in3111in7数字量输出及控制线
30、:11 条.st 为转换启动信号。当st 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行a/d 转换;在转换期间,st 应保持低电平。eoc 为转换结束信号。当eoc 为高电平时,表明转换结束;否则,表明正在进行a/d 转换。oe为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。oe1,输出转换得到的数据;oe0,输出数据线呈高阻状态。d7d0 为数字量输出线。clk为时钟输入信号线。因adc0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500khz,vref(),vref()为参考电压输入。adc0809 应用说明:(1)adc0809 内部带有输出
31、锁存器,可以与at89s51 单片机直接相连。(2)初始化时,使st 和oe信号全为低电平。(3)送要转换的哪一通道的地址到a,b,c 端口上。(4)在st 端给出一个至少有100ns 宽的正脉冲信号。(5)是否转换完毕,我们根据eoc 信号来判断。(6)当eoc变为高电平时,这时给oe 为高电平,转换的数据就输出给单片机了。3.2.3 74ls74 芯片74ls74 为带预置和清除端的两组d 型触发器,在这次的系统设计中,它为ad0809芯片提供500khz的时钟信号,这是利用了触发器的工作。一个触发器可以2分频,二个触发器连接可提供4分频。原理其主要电特性的典型值如下:表二引出端符号:逻辑
32、图:图(5)74ls74逻辑图3.2.4 max232 芯片max232芯片为串口ttl电平转换芯片。接口电路为:图(6)max232连接图3.2.5 74ls244 芯片 74ls74为八同相三态缓冲器/线驱动器。这里主要用于驱动共阴数码管led的显示驱动。结构图和功能图为: 图(6)74ls244 3.3 原理介绍首先用protel软件设计的原理图为:图(7)系统原理图系统总的功能原理,系统开机,89c51芯片工作,由p2.1控制发光二极管1指示系统工作状态,亮表示工作,暗表示不工作由p3.5控制发光二极管2指示ad0809工作状态,亮表示工作,暗表示不工作。p2.0控制转换开始和结束,p
33、1.0p1.7控制八个按钮用来选择模拟输入转换通道,另外一个复位按钮。由p0口输入ad0809芯片的转换数据结果,p2.2、p2.3、p2.4口接ad0809芯片的st、eoc、oe3个控制信号引脚,用于控制ad0809工作。p2.5、p2.6、p2.7接ad0809的a、b、c控制转换通道选择,另外89c51的lea。数码管方面,有p0口输出数据,p3.2、p3.3、p3.4控制位选。和微机接口方面,89c51的rx、tx接max232,max232的13和14引脚接db9的3、2引脚组成串口通信接线。串口通信原理,单片机和pc机通信要经过ttl电平转换。这里串行通信使用rs-232标准,它
34、本是美国电子工业协会的推荐标准,现已在全世界的范围广泛采用。rs-232实际上是串行通信的总线标准。它用-3v到-25v表示逻辑“1”,+3v到+25v表示逻辑“0”。这里只用3个引脚构成串口通信,2脚发送数据txd,3脚接收数据rxd和5脚接地。单片机的串口通信,在单片机芯片中,uart已集成在其中,做为组成部分,构成一个串行口,这个串行口是全双工的。单片机串口通信的波特率设置是有单片机的定时记数器1提供时钟。串口通信用到串口发送缓冲寄存器sbuf和及串行通信控制寄存器scon。串口有3种工作方式,这里采用工作方式1。串口工作方式1的原理为:txd 脚发送,rxd 脚接收,每次数据为10 位
35、,一个起始位0 ,8 个数据位,lsb 在前及一个停止位1, 当接收数据时停止位存于scon 的rb8 内波特率可变由定时器1 溢出速率决定。串行口工作于模式1时,传输的是10位;1 位起始位0,8位数据低位在先及一位停止位1。由rxd接收,txd发送。接收时,停止位存入scon 内rb8。80c51 波特率取决于定时器1的溢出速率。发送过程是由执行一条以sbuf 为目的寄存器的指令启动的。写sbuf 信号还把1 tb8 装入发送移位寄存器的第9 位,同时通知发送控制器进行发送。实际上发送过程开始于16 分频计数器下次翻转后的那个机器周期的s1p1 时刻。每位的发送时序与16 分频计数器同步,
36、而并不与写sbuf 信号同步。发送以激活send 端开始,向txd发送一起始位一位时间以后data端有效,使输出移位寄存器中数据得以送至txd。再过一位,产生第一个移位脉冲。数据向右移出,左边不断填以0,当数据字节的最高位移到移位寄存器的输出位置时,其左边是装入1的第9位,再左的内容均为0。此时通知tx 控制器作最后一次移位,然后禁止send端并置位ti。这都发生于写sbuf后16分频计时器的第10次翻转时。接收在rxd端检测到负跳变时启动,为此mcu对rxd不断采样,采速率为波特率的16倍。当检测到负跳变时,16分频计数器立即复位,同时将1ffh 写入输入移位寄存器。复位16分频计时器确保计
37、时器翻转时位与输入数据位时间同步。计数器的16个状态将每个位时间分为16份。在第7、8、9状态时,位检测器对rxd 端的值采样。取值为三个采样值中取多数至少2个作为读入值,这样可以抑制噪声。如果所接收的第一位不为0,说明它不是一帧数据的起始位,该位被摒弃,接收电路被复位,等待另一个负跳变的到来。这用来防止错误的起始位,如果起始位有效,则被移入输入移位寄存器,并开始接收这一帧中的其它位。当数据位逐一由右边移入时,1从左边被移出。当起始位0移到最左边时,通知接收控制器进行最后一次移位,将移位寄存器内容9 位分别装入sbuf及rb8,并置ri=1。仅当最后一位移位脉冲产生时同时满足下述2个条件:1、
38、ri=0,sm2=0或接收到的停止位=1,才会装载sbuf和rb8,并且置位ri。上述两个条件任一不满足,所接收到的数据帧就会丢失,不再恢复。两者都满足时,停止位就进入rb88, 位数据进入sbuf,ri=1。这时无论上述条件满足与否,接收控制单元都会重新等待rxd的负跳变。由于采样八百多mhz,波特率要大于9600bps,这里我设置为9600bps,由定时器1工作方式2提供。在80c51 中模式1 和模式3 的波特率由定时器1 的溢出速率决定。使用定时器1 作波特率发生器当定时器1 用作波特率发生器模式1 和3 中波特率由定时器1 的溢出速率和smod1 的值决定。在此应用中定时器1 不能用
39、作中断,定时器1 可以工作在定时或计数方式和3 种工作模式中任何一个。在最典型应用中它用作定时器方式工作自动重装载模式tmod 的高半字节为0010b, 它的波特率值由下式给出:可以定时器1 的中断实现非常低的波特率将定时器配置为16 位定时器tmod 的高半字节为0001b,并使用中断进行16位软件重装。 led显示原理,数码管的发光和发光2极管的显示原理相同。这里采用静态显示原理,扫描显示。3.4 软件设计在这里我用c语言编写系统程序,用c语言写程序的好处前面已经说过,keilc51真的是很好的软件,我写的程序在keil上仿真通过,程序见附录。软件结构图:图(8)软件流程图可分为4个模块:
40、(1)、控制模块(2)、ad转换模块(3)、led显示模块(4)、串口发送模块3.5 pc机上数据接收软件制作 在这里我用vc+的mfc制作数据采集器的上位机数据接收软件。下面讲述主要制作过程:1.建立项目:打开vc6.0,建立一个基于对话框的mfc应用程序cg12.在项目中插入mscomm控件 选择project菜单下add to project子菜单中的 components and controls选项,在弹出的对话框中双击registered activex controls项,则所
41、有注册过的activex控件出现在列表框中。 选择microsoft communications control, version 6.0,单击insert按钮将它插入到我们的project中来,接受缺省的选项。这时在classview视窗中就可以看到cmscomm类了,并且在控件工具栏controls中出现了电话图标现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。3.利用classwizard定义cmscomm类控制对象 打开classwizard>member viariabl
42、es选项卡,选择cgc1dlg类,为idc_mscomm1添加控制变量:m_ctrlcomm,这时你可以看一看,在对话框头文件中自动加入了/afx_includes() #include "mscomm.h" /afx_includes (这时运行程序,如果有错,那就再从头开始)。4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据id为idc_edit_rxdata,另一个用于输入发送数据,id为idc_edit_txdata,再添加一个按钮,功能是按一次就把发送编辑
43、框中的内容发送一次,将其id设为idc_button_manualsend。别忘记了将接收编辑框的properties>styles中把miltiline和vertical scroll属性选上,发送编辑框若你想输入多行文字,也可选上miltiline。再打开classwizard>member viariables选项卡,选择cgc1g类, 为idc_edit_rxdata添加cstring变量m_strrxdata, 为idc_edit_txdata添加cstring变量m_strtxdata。5.添加串口事件消息处理函数oncomm()
44、 打开classwizard>message maps,选择类cgc1dlg,选择idc_mscomm1,双击消息oncomm,将弹出的对话框中将函数名改为oncomm。 这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在oncomm()函数加入相应的处理代码就能实现自已想要的功能了。在函数中加入如下代码:void cgc1dlg:oncomm() variant variant_inp;
45、160; colesafearray safearray_inp; long len,k; byte rxdata1024; /设置byte an 8-bit integerthat is not signed. cstring strtemp; if(m_ctrlcom
46、m.getcommevent()=2) /事件值为2表示接收缓冲区内有字符 variant_inp=m_ctrlcomm.getinput(); /读缓冲区 safearray_inp=variant_inp; /variant型变量转换为colesafearray型变量 len=safearray
47、_inp.getonedimsize(); /得到有效数据长度 for(k=0;k<len;k+) safearray_inp.getelement(&k,rxdata+k);/转换为byte型数组 for(k=0;k<len;k+) /将数组转换为cstring型变量
48、0; char bt=*(char*)(rxdata+k); /字符型 strtemp.format("%02x",bt); /将16进制字符送入临时变量strtemp存放
49、; m_strrxdata+=strtemp; /加入接收编辑框对应字符串if (strtemp="ffffff80") m_strrxdata+="0"if (strtemp="ffffff81") m_strrxdata+="1"if (strtemp="ffffff82") m_strrxdata+="2"if (strtemp="f
50、fffff83") m_strrxdata+="3"if (strtemp="ffffff84") m_strrxdata+="4"if (strtemp="ffffff85") m_strrxdata+="5"if (strtemp="ffffff86") m_strrxdata+="6"if (strtemp="ffffff87") m_strrxdata+="7" if (strtemp="
51、ffffff88") m_strrxdata+="8" if (strtemp="ffffff89") m_strrxdata+="9" if (strtemp="ffffff8a") m_strrxdata+="." m_ctrlcomm.setinbuffercount(0); /清空接收缓冲区
52、 updatedata(false); /更新编辑框内容6.打开串口和设置串口参数 。在程序中做一个开始按钮,在该按钮的处理函数中打开串口。cgc1dlg:onbutton1()打开串口,加入如下代码:if(m_ctrlcomm.getportopen()m_ctrlcomm.setportopen(false);m_ctrlcomm.setcommport(1); /选择com1if( !m_ctrlcomm.getportopen()m_ctrlcomm.setportopen(true);/打开串口elseafxmessagebox("cannot
53、 open serial port");m_ctrlcomm.setsettings("9600,n,8,1"); /波特率19200,无校验,8个数据位,1个停止位 m_ctrlcomm.setinputmode(1); /1:表示以二进制方式检取数据m_ctrlcomm.setrthreshold(1); /参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的oncomm事件m_ctrlcomm.setinputlen(0); /设置当前接收区数据长度为0m_ctrlcomm.getinput();/先预读缓冲区以清除残留数据7.发送数据&
54、#160; 先为发送按钮添加一个单击消息即bn_clicked处理函数,打开classwizard>message maps,选择类cgc1dlg,选择idc_button_manualsend,双击bn_clicked添加onbuttonmanualsend()函数,并在函数中添加如下代码:void cgc1dlg:onbuttonmanualsend() updatedata(true); /读取编辑框内容m_ctrlcomm.setoutput(colevariant(m_strtxdata);/发送数据最终我做出的软件界面为:3.
55、6 调试过程由于各种原因,接好硬件后,烧入程序没有预期的效果,这就要调试。我是按下面步骤调试的:(1) 测单片机是否正常工作,上电后测电源是否通电,用万用表测单片机各各口是否输出正确的电平。用示波器测ale脚是否输出2mhz的波型。通过这一步测试,通过之后接着做下面的测试。通过写入键盘测试程序测试键盘部分是否正常,以备下面测试工作。(2) 测试led显示模块,通过简单的显示程序测试led是否正常工作,否则检查这一模块。led测试程序:#include <reg51.h>sbit b1=p32;sbit b2=p33;sbit b3=p34;sbit p0_7=p07;void ma
56、in()int i;while(1)p0=0x66;p0_7=1;b1=0;b2=b3=1;i=100;while(i-);p0=0x6d;b2=0; b1=b3=1;i=100;while(i-);p0=0x7f;b1=b2=1;b3=0;i=100;while(i-);(3) 测试串口发送模块,写串口发送程序到单片机,认单片机发送数据给pc机,测试程序见附录,用示波器测单片机tx口波形,看是否有波形输出,否则串口出错,检查串口部分,分插上max232芯片和拔出max232芯片检查是否是max232芯片部分连接有问题,用串口调试精灵接收单片机发来的字符。测试通过后,接着做第4步测试。 串口测
57、试程序:#include <reg51.h>void main() while(1) pcon=0x00; scon=0x40; tmod=0x20; th1=0xfd; tl1=0xfd; ea=0; tr1=1; sbuf=0x33; while(!ti); ti=0; (4) 测试ad转换模块,通过程序测试ad转换模块是否正常,否则检查这一模块连接。程序见附录。我查出的错误是ad不工作,我通过测试ad转换时钟信号线查出了这一错误,测74ls74是否输出500khz信号,没有表示时钟不正常,通过检查74ls74连接排除问题。(5) 重新写入全部程序,系统是否正常工作,不工作很可
58、能是程序有错,通过检查程序排除,原因是在leil上仿真通过的程序在实际硬件电路中不同,这也是要求要硬件仿真的目的。(5) 调通硬件之后,就可以把自己做的软件和硬件和起来调试了。3.6系统精度最后做出的系统性能为:(1) 采集数据精度92%,5v是误差-0.4v,0v准确;(2) 串口发送给pc机有点杂波,但还比较准确;(3) 采样间隔100ms左右;(4) pc机软件十进制显示采集的数据,提供处理;第四章 总结毕业设计工作进入最后阶段,大学生活也即将结束、即将成为回忆,虽然一边工作一边做毕业设计,使我感觉比较疲劳,但一想到这是我大学生活的最后关头,就动力十足,心情都不在疲惫,我的心情也变的激动
59、。结束之前我在此做个总结。通过本次毕业设计,检验了我书本上和课外所学的知识,使我进一步巩固和掌握知识,提高了我的动手能力,有助于我今后其他的设计。这次毕业设计我从开题到硬件调试完成到论文的完成,我始终保持积极态度和韧性。其中在硬件调试的时候碰到了很大的阻力,通过耐心并且细致的深入的分块调试,找问题出处,终于取得了成功。这使我增加了很大的自信心。通过这次毕业设计,我学到了也感受到了很多。做事首先要有精神,所谓玩要放开去玩,但一旦进一做事时刻,就要专心细致,精神集中,要有专研精神。做事要不怕困难和麻烦,作战一样誓死往前。做事要有信心和毅力,不能找各种借口和理由来推拖。毕业设计也是大学里最后一次考试,全面的检测。在这即将离开母校之际,回望四年来的大学生活,做次总结,以后定要严格要求自己,做个好青年,男子汉流血不流泪,勇往直前。第五章 致谢在将近半年的毕业设计期中,我要感谢我的老师、同学,是他们的无私帮助才使我顺利完成了毕业设计任务;是他们的无私
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度环境保护设施运行合同2篇
- 2024年度某智能设备生产制造许可合同3篇
- 2024年跨境电子商务合作合同2篇
- 《相关性统计案例》课件
- 《复习课件西游记》课件
- 2024年度教育培训合同:培训机构与学员关于教育培训服务的协议2篇
- 《百略产品经理培训》课件
- 《电热水壶调查报告》课件
- 《压水反应堆》课件
- 《心电图培训》课件
- 医学心理学(广东药科大学)智慧树知到答案章节测试2023年
- 公墓墓碑及道路维修工程施工方案施工组织设计
- 河道整治工程毕业设计
- 第三部分34课财报阅读方法与技巧之识别老千股
- SB/T 10482-2008预制肉类食品质量安全要求
- GB/T 40427-2021电力系统电压和无功电力技术导则
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- 2023年全国中学生英语能力竞赛(NEPCS)初赛初二组试题笔试部分完整版
- FZ/T 93015-2010转杯纺纱机
- 幼儿园突发事件应急处置流程图
- 国开《可编程控制器应用》形考任务五实验1
评论
0/150
提交评论