




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
笫1章前盲1.1数据采集技术介绍错误!未定义书签。1.2通信技术介绍错误!未定义书签。TOC\o"1-5"\h\z第2章草片机数据采集系统总体功能介绍和说明42.1系统实现的功能42.2系统各部分的功能42.1信号调理部分52.2.2数据处理部分6第3章草片机数据采集系统硬件设计73.1主要芯片介绍88051A1I的功能特点8ADC0809的功能特点101.3DS12887的功能特点113.2功能模块电路设计123.2.1数据采集模块电路设计133.2.2査询打印模块电路设计16第4章草片机数据采集系统软件设计184.1单片机数据采集的分析与设计194.2单片机与PC通信的分析与设计304.3査询,打印功能的实现33第5章误差分析37笫6章结束语38致40参考文献39附录41基于单片机数据采集系统的设计摘要:面对大量的数据,人工处理已远远无法满足时代的要求,依靠微电子技术来实现数据的采集、存储和显示,成为适应时代步伐的唯一有效捷径。本系统采用模数转换、微处理器、存储器等芯片来实现8路数据的采集,将采集的信号进行存储,按时间上传到上位机PC,通过不同模式的选择进行数据采集、查询、打印和显示等。在文中较系统的介绍了从模拟信号到数字信号的转换过程和讨论了转换过程中的技术参数等问题,在文中敎后还进行了系统存在的一些误差分析。关键词:单片机,数据,采集,打印,查询,上位机通信ABSTRACTKEYWORDS:signalchipmicro-computer、acquisition、PC-communcation第1章前言数据采集技术研究信息数据的采集、传输、存储、处理以及控制等,它是信息科学的一个重要分支。在智能仪器,信号处理以及工业自动化控制领域,都存在数据的测量与控制问题。将外部世界存在的温度、压力、流量、电流、电压、流速、开关量、位移以及角度等模拟量转换为数字信号,再将收集到的数据显示、处理、传输与记录的这一过程即称为“数据采集”,相应的系统即为数据采集系统(DAS)。数据采集技术已在雷达、通信、水声、遥感、地质勘探、振动工程、无损检测、语声处理、智能仪器、工业自动控制以及生物医学工程等领域有着广的应用。随着科学和技术的需要,在速度、分辨率、精度、接口能力、软件设计以及抗干扰能力等方面向现代数据采集技术提出了越来越高的要求。可以预言:随着大规摸集成电路技术与计算机科学技术的发展,数据采集技术的应用领域更为广阔20世纪90年代后期,各国的单片机和外围芯片大量涌入我国,各种开发工具和软件应有尽有,大大提高了我国单片机的应用水平。目前,单片机正在过程控制、数据采集、智能仪表、机电一体化、家用电器以及网络技术等领域中发挥着重要的控制作用。面对大量的数据,人工处理已远远无法满足时代的要求,依靠微电子技术来实现数据的采集、存储和显示、查询,成为适应时代步伐的唯一有效的出路。设计以单片机为核心的数据采集、存储和显示、査询、打印系统,可以把传感器信号经过处理后,进行控制和存储传给上位机PC,以满足远程控制和无人工作站的建立。数据采集和自动控制技术广泛地渗透到化工、轻工、热工、电力、水力、能源、环保、航空、航天、机械制造和赭密仪器等各个领域,需求广泛。一个数据采集系统通常可用两种方法实现,一种是利用传统的数据采集系统设计方法,另一种是利用现有的一些数据采集系统芯片(即处理器)为核心构成。对于传统的数据采集系统设,它的硬件一般由传感器、信号调理电路、多路开关、采样保持电路、摸数转换电路、微处理器、存储器等组成。而对于利用数据采集芯片的系统,由于芯片集成了A/D转换、闪速/电擦除存储器、定时/计数器等电路,加上它的高转换速度和高精度,能大大降低系统开发时间和成本、缩小设备体积、提高系统可釜性和电气性能指标,较适合于设计低功耗、便携式的数据采集系统。在一个数据采集系统中A/D转换又是十分重要的环节。它的精度会直接影响到整个采集系统的赭度。本文将利用传统的数据采集系统设计方法,以实现不同传感器信号的处理。用单片机来对系统进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高采集数据的技术指标,从而能够大大提高产品的质量和数量。第2章单片机数据采集系统总体功能介绍和说明在检测系统中,各个组成部分是以信息流的过程来划分的。检测时,首先获取被测量的信息,并通过信息的转换把获得的信息变换为电量,然后进行一系列的处理,再用指示仪或显示仪将信息输出,或由计算机对数据进行处理,最后把信息输送给执行机构。所以一个检测系统主要分为信息的获得、信息的转换、信息的处理和信息的输出等几个部分。2.1系统实现的功能1、8路数据采集:可以进行8路0-5V的模拟电压进行循环采集,每路采集的8次,超出界限LED显示报警,将采得的数据求平均。2、及时保存数据:对采集的数据按时间及时进行保存。3、数字实时显示:LED将实时显示采集的数据,并且能够显示查询时输入的查询量和查询到的数据。4、可以将采集的数据及时上传到上位PC机功能;5、可按吋间査询历史数据,也很方便的打印出来2.2系统各部分的功能要完成这些功能主要依釜传感器、信号处理电路、显示装置、数据处理装置和执行机构等。其具体组成框图如图1.2.1所示。
被检测的各种参数(温度、流量、压力、位移、速度等)由传感器变换成易于后续处理的电信号。由于传感器输出信号太弱或信号质量不高,应经过前端预处理电路进行放大、滤波等,然后经过数据采集系统转换成数字量,并通过接口送入存储器,经过单片机运算、变换处理后,由数据分配子系统和接口输出到执行机构,由基本系统及其接口输出用于显示、记录、打印或绘制成各种图表、曲线等。此外,其他仪器仪表或系统通过通信子系统及接口完成相互之间的信息交换和互连。所以我们把微机自动检测系统也常称为计算机数据采集系统,或简称为数据采集系统。微机自动检测技术不仅能解决传统的检测技术不能或不易解决的问题,而且能简化电路、增加功能、提高赭度和可釜性等,还能实现人脑的部分功能,使自动检测系统具有智能化,实现代替人工自动检测的目的,随着微机自动检测技术的不斷发展,自动检测系统会变得更加智能化、多功能化。2.2.1信号调理部分信号调理电路的主要作用就是把传感器输出的电学量变成具有一定功率的模拟电压信号或数字信号,以推动后级的输出显示或记录设备、数据处理装置及执行机构。根据测量对象和显示方法的不同,信号处理电路可以是简单的传输电缆,也可以是由许多电子元件组成的数据采集卡,甚至包括计算机在的装置。多路模拟开关多路模拟开关传感器接收被测量(如物理量、化学量、生物量等),然后才能将其变换为另一种与之有确定对应关系,并且容易测量的量(通常为电学量)。它是一种获得信息的重要手段,它所获得信息的正确与否,关系到整个检测系统的赭度,因而在非电量检测系统中占有重要的地位。从传感器过来的信号较小(常用热电偶的输出变化往往在几毫伏到几是毫伏之间,电阻应变片输出电压的变化只有几个毫伏,人体生物电信号仅是微伏级)。因此需要加以放大才能满足大多数A/D转换器的满量程输入0~5¥的要求。此外,某些传感器阻比较大,输出功率较小,这样放大器还起阻抗变换器的作用来缓冲输入信号。由于各类传感器输出信号的情况各不相同,因此需要的放大器种类也很多。例如,为了减少输入信号的共摸分量,就采用各种差分放大器、仪用放大器和隔离放大器;为了使不同数量级的输入电压都具有最佳变换,就产生了量程可以变换的程控放大器;为了减少放大器输入的漂移,就产生了斩波为零和激光修正的赭密放大器。传感器以及后续处理电路中的器件常会产生噪声,人为的发射源也可以通过各种耦合渠道使信号通道感染上噪声,常见的工频信号就是人为干扰源。为了提高模拟输入信号的信噪比,常常需要使用滤波器对噪声信号进行一定的衰减。在数据采集系统中,往往要对多个物理量进行采集,即所谓多路巡回检测,这可以通过多路棋拟开关来实现,这样可以简化设计,降低成本。多路棋拟开关可以分时选通多个通道中的某一路通道。因此,在多路模拟开关后的单元电路,如采样/保持电路、摸/数转换电路以及处理电路等,只需要一套即可,这样可以节省成本和体积,但这仅适用于物理量变化比较缓慢、变化周期在数十至数百毫秒之间的情况下。因为这时可以使用普通的微秒级A/D转换器从容地分时处理这些信号。但当分时通道较多时,必须注意泄霭及逻辑安排等问题,当信号频率较高时,使用多路开关后,对A/D转换速率要求也随之上升。在数据通过率超过40~50kIIz时,一般不宜使用分时的多路开关。摸拟开关也可以根据需要安排在放大器之前,但当输入的信号电平较低时,需注意选择多路摸拟开关的类型;若选用继承电路的模拟多路开关,由于它比干簧和继电器组成的多路模拟开关导通电阻大、泄霭电流大,因而有较大的误差产生。所以要根据具体情况来选择多路模拟开关。2.2.2数据处理部分IS/H1A/D1—1存储1单片fl查询打印1数据通信—机fl显示1从传感器采集来的数据经过信号调理电路,信号做好了模数转换的准备。模拟信号要变成数字信号,首先要经过采样,采样保持器是快速拾取输入信号的子样脉冲,并保持幅值恒定,以提高A/D转换器的转换楮度,如果把采样保持电路放在模拟多路开关之前(每通道一个),这可实现对瞬时信号同时进行采样。数据采集的采样方式有两种选择:一为“实时采样”;一为“等效时间采样”。(1)实时采样:数据采集开始后,信号波形的第一个采样点即被采人并数字化,经过一个采样间隔后•再采入第二个采样点,这样一直将整个信号波形数字化并存入存储器中。为了不丢失被采样信号所携带的信息,实时采样的采样频率应满足采样定理(香农定理)的要求,当采样频率不满足采样定理时将产生信号混査现象,使采样后波形中增加了额外的低频成分•造成失真,引起误差。在工程上采样频率应取被采样信号所含最高频率的两倍•通常采用10-20倍。实际测量时信号往往会混入各种噪声,谐波成分丰富,频带很宽,智能仪表的采样速度很难达到采样定理的要求,这时就应在A/D转换之前加入抗混叠模拟滤波器,滤掉多余的高频分量。除了“定时采样”(等间隔采样)外,“实时采样”通常使用“变步长采样”,即“等点采样”。这种方法不论被测信号频率如何,一个信号周期均匀采样的点总数为N个。由于采样周期随被测信号周期变化,故通常称之为“变步长采样”。(2)“等效时间采样”技术要求信号波形是可以重复产生的。由于波形可以重复取得•因此采样可以用较慢的速度进行,采集的样本可以是时序的(步进、步退、差额),也可以是随机的。这样就可以把许多采集的样本合成一个采样密度较高的波形。评价智能仪表数据采集部分的主要技术指标有分辨率、赭度、输人信号形式和信号电平、采集速度,抗干扰能力,设计时应根据被测变量的信号特性,仪表的整机技术要求,确定这些指标的具体数值。采样保持电路输出的信号送至A/D转换器,A/D转换器是模拟输入通道的关键电路。由于输入信号变化的速度不同,系统对分辨率、赭度、转换速率及成本的要求也不同。因此A/D转换器的种类也比较多。早期的采样保持电路和A/D转换电路需要数据采集系统设计人员自行设计,目前普遍采用单片集成电路,有的单片A/D转换器部包括有采样保持电路、基准电源和接口电路,这为系统设计提供了较大方便「A/D转换器将结果输出给计算机,有的采用并行码输出,有的则采用串行码输出。使用串行输出结果的方式对长距离传输和需要光电隔离的场合较为有利。模数转换器的任务在于把一个未知的连续的模拟输入信号(通常为电压)转换为数字信号,即微型计算机能接受的二进制数。以进一步用于处理、显示、记录、查询和传输。摸拟输入信号的采样脉冲应做得很窄,以便在采样脉冲空余时间可以进行多路复用。这个多位数是二进制分数,代表这个未知输入电压Vex与ADC的满刻度电压Vs.的比值,ADC是微机数据采集系统的关键部件,它的性能往往直接影响整个系统的技术指标。本系统采用的ADC0809采用的是逐次逼近式,此种转换器采用一种极有效的方案来改变比较器的参考输入,从而只需要n个时钟周期就能完成n位转换。单片机系统是整个计算机数据采集系统的核心。单片机控制整个计算机数据采集系统的正常工作,并且把A/D转换器输出的结果读入到存,进行必要的数据分析和数据处理。单片机还需要把数据分析和处理之后的结果写入存储器以备将来分析和使用,通常还需要把结果显示出来。数据采集系统的数据与机器时间是一一对应的,一个数据唯一的对应一个数据,这就方便了数据查询和显示。为了得到机器时间,本系统采用了DS12887芯片得到需要的机器时间。为了让系统便于操作,按照需要和设定模式进行运行,那就需要人机交互装置一一键盘。从键盘发出指令,进入不同的模式,实现不同的功能。测量的目的是使人们了解被测量的数值,所以必须有显示装置。显示装置的主要作用就是使人们了解检测数值的大小或变化的过程。目前常用的显示方式有摸拟显示、数字显示、图像显示三种方式。(1)模拟显示是利用指针对标尺的相对位置来表示被测量数值的大小,如毫伏表、毫安表等,其特点是读数方便、直观,结构简单,价格低廉,在检测系统中一直被大量使用。但这种显示方式的赭度受标尺最小分度限制,而且读数吋易引入主观误差。(2)数字显示是指用数字形式来显示测量值,目前大多采用LED发光数码管或液晶显示屛等,如数字电压表。这类检测仪器还可附加打印机,打印记录测量数值,并易于计算机联机,使数据处理更加方便。(3)图像显示是指用屛幕显示(CRT)读数或被测参数变化的曲线,主要用于计算机自动检测系统中。如果被测量处于动态变化中,用一般的显示仪表读数就十分困难,这时可将输出信号送给计算机进行图像显示或送至记录仪,从而描绘出被测量随时间变化的曲线,并以之作为检测结果,供分析使用。本系统采用的是第二种方案,此方案设计简单,成本较低,实用于不同场所。第3章单片机数据采集系统硬件设计
在整个系统中硬件是基础,也是系统设计的基础,硬件系统的建立才使系统有运算的可能,硬件的参数决定了系统的技术参数。本系统硬件包括数据采集模块・数据处理和存储模块。3.1主要芯片介绍在系统设计中,硬件系统设计和软件系统设计两者相互渗透,不可分离。在硬件设计中尽量采用了功能强大的芯片,以减化电路,提高系统电路的集成度和可靠性。功能强大的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的价格不斷下降,体积不斷缩小,具有很高的性价比,是硬件设计的首选。3.1.18051AII的功能特点TT?23Z562_81312151+31191817160123斗-5C-723Z562_81312151+31191817160123斗-5C-711111111PFPPFPPPQQOr-oor-oiI>O2FO3T-O4I>O501234567222222223&3T3«53^3斗33:32212223:2斗2歩2«52-728:3P308O51j=-JEIMCS-51系列单片机是1980年Intel公司推出的8位单片机系列,由于它良好的性价比,此后其他一些公司也相继研制并生产MCS-51系列单片机8051及其兼容芯片。因此,这个系列成为主流单片机。它主要特性如下:具有两级中斷优先处理能力,可管理5个中斷源,且都有自动转入的中斷入口地址;含定时器/计数器,工作方式可编程选择;有32条I/O线,输入输出操作功能强,可直接带外设;布尔处理功能强,可扩展用途;部RAM和寄存器有位寻址功能;外部具有独立的64K程序存储空间和64K数据存储空间;有全双工串行接口,波特率可编程设置;有多种型号,且不同型号的部程序存储器不同,用户可根据需要选用。管脚功能:P0.7-P0.0:P0口是一个漏极开路型准双向I/O口。在访问外部存储器时,它是数据总线和地址总线低8位分时复用的接口:在EPROM编程时,在接收指令字节;在验证程序时,输出指令字节,并要求外接上拉电阻。P1.7-P1.0:P1口是带部上拉电阻的8位双向I/O口>它是通用I/O端口。在EPROM编程和程序验证时,它接受低8位地址。P2.7-P2.0:P2口是带部上拉电阻的8位双向I/O口。在访问外部存储器时,它输出高8位地址;在对EPROM编程和程序验证时,接受高8位地址。P3.7-P3.0:P3口是带部上拉电阻的8位双向I/O口,它是双功能I/O端口。除基本输入/输出功能外每个引脚还有专用功能,其专用引脚功能:P3.0:RXD串行数据接收P3.1:TXD串行数据发送P3.2:INTO外部中斷0请求输入P3.3:INT1外部中斷1请求输入P3.4:TO定时器0外部计数脉冲输入P3.5:T1定时器1外部计数脉冲输入P3.6:WR外部数据存储器写信号P3.7:RD外部数据存储器读信号RST/VPD:复位引脚,这是一个双功能引脚,复位/备用电源:复位功能RST:单片机的复位是靠外部电路实现的。在振荡信号正常运行情况下,只要RST引脚保持两个机器周期以上时间的高电平,系统复位。备用电源功能VPD:当Vcc掉电时,在Vcc下降到操作系统允许极限之前,RST/VPD引脚接上备用电源,向部RAM供电,这时系统处于一种低功耗方式。当Vcc恢复时,备用电源仍然保持一定时间,以便完成复位操作,然后重新开始工作。XTAL1和XTAL2是MCS-51系列单片机的时钟引脚。两引脚连接于单片机部的一个高增益反向放大器,用于与外部振荡源一起构成振荡电路。其中XTAL1为该放大器的输入引脚,XTAL2为该放大器的输出引脚。ALE:地址锁存信号,输出。给应用系统中的地址锁存器提供锁存控制信号,实现地址/数据分时复用。在每一个机器周期(MOVX指令除外)出现两个ALE正脉冲,当ALE为高电平时,地址锁存的输出随输入变化(这时P0口输出的是低8位地址信息);当ALE有高电平变成低电平时,锁存器将地址锁定,即输出不再随输入变化(P0口可传送数据信息)。另外»ALE号还可以作为应用系统中频率要求校低的其他部件的时钟信号、计数信号等。PROG:片程序存储器编程脉冲,输入。对于EPROM型单片机,在对片程序存储器编程时,该引脚输入编程脉冲信号。PSEN:外部程序存储器读写信号,输出,低电平有效。由于MCS-51系列单片机外部程序和外部数据存储空间是独立的,但地址是重叠处旦此除了在指令上加以区分外,控制信号也有所不同。RD、腋是用于读/写数据存储器的,而PSEN是用于读程序代码的,他在应用系统中接程序存储器的彗制端。在访问外部程序存储器时,在每个机器周期,PSEN两次有欢。EA:、外程序存储器选择信号。当访i空地址围的存储单元时,由于MCS-51系列单片机的片程序存储器地址与土呈序是重叠的,所以用丘4引脚电平来区分是)型部程序存储器,还是访问外部程序存储器。当以=“1”时选择访问单片机部的程序存储器;当“o”时选择访问外部的程序存储器。Vpp:片程序存储器编程电压。对于EPROM型单片机,在对片EPROM编程时,Vpp引脚输入21V的编程电源电压。Vcc:+5V工作电压。正常工作时Vcc引脚接+5V电源电压。Vss:接地端。正常工作时Vss引脚接地。3.1.2ADC0809的功能特点27287+L6961027287+L69610191$8亘1417ADCDSD?ADC0809数据采集元件是单片CMOS器件,具有8位模/数转换器、8通道的多路开关以及和微处理器相兼容的控制逻辑,这个8位A/D转换器使用逐位逼近作为转换技术。该转换器的主要特点是:具有一高阻抗斩波稳定比较器,带有摸拟开关树的256R分压器、以及一逐位逼近寄存器,8个通道的模拟开关可以直接访问8个单端信号中的任何一个。该器件取消了外部调零和满量程调整。锁存及译码的多路地址输人和锁存的TTL三态输出使该器件易于和微处理器接口。集许多A/D转换技术于一体,ADC0808和ADC0809的设计被优化,它们提供高速、高精度、最小温度相关性、极好的长期赭度和可重复性以及最小功耗。这些特点使该器件非常适合于从过程和机器控制到消耗装置及自动化的应用。主要指标:分辨率8位线性误差士1/2LSB单电源5VDC低功耗15mw转换时间100US分辨率为1/28=0.39%模拟电压转换围是0・+5V标准转换时间为100ms各引脚功能如下:IN0〜IN7:8路模拟量输入端。允许8路棋拟量分时输入,共用一个A/D转换器。ALE:地址锁存允许信号,输入,高电平有效。上升沿时锁存3位通道选择信号。START:启动A/D转换信号,输入,高电平有效。上升沿时将转换器部清零,下降沿时启动A/D转换。EOC:转换结束信号,输出,高电平有欢。0E:输出允许信号,输入,高电平有效。该信号用来打开三态输出缓冲器,将A/D转换得到的8位数字量送到数据总线上。DO〜D7:8位数字量输出。DO为最低位,D7为敎高位。由于有三态输出锁存,可与主机数据总线直接相连。CLOCK:外部时钟脉冲输入端。当脉冲频率为640kHz时,A/D转换时间为100ms。VR+,VR-:基准电压源正、负端。取决于被转换的模拟电压围,通常VR+=+5VDC,VR-=0VDC。Vcc:工作电源,+5VDC。GND:电源地零点调整:这是当输入电压是1/2LSB(满量程10.24V时为20mV),输出从11111111变为11111110。在大多数情况下,可以在引脚5上接一lkQ电位器来实现。在引脚5和地之间接一475Q电阻是实现寥点调整的最好近似。满量程调整:这是当输人电压是满量程1/2LSB(10.24V量程时比满量程低60mV,输出从00000001变为00000000o没有调整时,ADC0809的这个电压在士1/2LSB围,在大多数情况下,在引脚15上加上lkQ的电位器可实现这个调整。3.1.3DS12887的功能特点DS12887是美国达拉斯半导体公司最新推出的时钟芯片,采用CMOS技术制成,把时钟芯片所需的晶振和外部锂电池相关电路集于芯片部,同时它与目前IBMAT计算机常用的时钟芯片MC146818B和DS1287管脚兼容,可直接替换。DS12887芯片具有微功耗、外围接口简单、赭度高、工作稳定可釜等优点,可广泛用于各种需要较高赭度的实时时钟场合中。其主要功能如下:含一个锂电池,斷电情况运行十年以上不丢失数据。计秒、分、时、天、星期、日、月、年,并有闰年补偿功能。二进制数码或BCD码表示时间、日历和定闹。12小时或24小时制,12小时时钟模式带有PWM和AM指导,有夏令时功能。MOTOROLA5和INATAEL总线时序选择。管脚功能:GND,VCC:直流电源+5V电压。当5V电压在正常围时,数据可读写;当VCC低于4.25V,读写被禁止,计时功能仍继续;当VCC下降到3V以下时,RAM和计时器被切换到部锂电池。MOT(模式选择):MOT管脚接到VCC时,选择MOTOROLA时序,当接到GFND时,选择INTEL时序。SQW(方波信号同):SQW管脚能从实时时钟部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。ADO〜AD7(双向地址/数据复用线):总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。DS(数据选通或读输入):DS/RD管脚有两种操作模式,取决于MOT管脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总的时刻,在写周期,DS的后沿使DS12887锁存写数据。选择INTEL时序时,DS称作(RD),RD与典型存贮器的允许信号(0E)的定义相同。R/W(读/写输入):R/W管脚也有两种操作摸式。选MOTOROLA时序时,R/W是一电平信号,指示当前周期是读或写周期,DSO为高电平时,R/W高电平指示读周期,R/W低电平指示写周期;选INTEL时序,R/W信号是一低电平信号,称为WR。在此模式下,R/W管脚与通用RAM的写允许信号(WE)的含义相同。CS(片选输入):在访问DS12887的总线周期,片选信号必须保持为低。IRQ(中斷申请输入):低电平有效,可作微处理的中断输入。没有中断条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。RESET(复位输出):当该脚保持低电平时间大于200ms,保证DS12887有效复位。3.1.4LF398芯片介绍LF398是单片采样/保持器,它使用BI-FET技术以获得快速捕捉信号的超高直流楮度和低下降率。作为一个单独的增益跟随器工作,其直流增益精度典型值为0.002%,采集时间低至6“S在0.01%赭度吋,一个双极性输入级用于实现低偏差电压和宽围带宽。用一个引脚来达到调整输人偏差,并且不降低输入偏差漂移。宽围带宽使LF198可放于1MHZ运算放大器反馈回路,而不引起稳定性间题。输人阻抗允许使用高源阻抗,而且不会使精度降低,使用1//F的保持电容,P通道结型场效应管与在输出放大器的两极性器件一起,实现低至5mV/分钟的下降率。JFET比以前设计中所用的MOS器件具有更低的噪声,而且没有高温时的不稳定性。总体设计确保在保持摸式下,从输人到输出没有藕合,即使对输人信号等于电源电压的情况也是如此:•工作在±5V~±18V电源下•低于10us采集时间,与TTL,PMOS,CMOS逻辑输人兼容•在Ck=0.OluF下,0.5mV的保持阶跃•低输人偏差•0.002%的增益赭度•在保持模式下的低输出噪声LF398的逻辑输入是完全差分的,具有低输入电流,允许与TTL'PMOS和LMOS直接连接差分阀值为1.4V。LM198的工作电源为±5V~±18V。3.2功能模块电路设计
以8051为CPU设计一个单片机应用系统,在其外部扩展64KBSRAM,本系统数据采集模块以ADC0809为核心,LF398采样保持来实现一秒中采集8次数据,输出数字量直接与总线的数据线连接,从而挂在总线上的存储器,打印机,LED很方便的进行数据读取。3.2.1数据采集模块电路设计如果在数据采集器中,直接使用模数转换器对模拟信号进行转换,则应该考虑到任何一种模数转换器都需要有一小段时间来完成量化及编码操作。模数转换器的转换时间决定于转换的位数、转换方法、采用的器件等因素。如在转换吋间TCONV,输入模拟信号仍在变化。此时进行量化显然会产生一定的误差。dV
~dt现在考虑对正弦波信号V=VfsSui2^采样,在转换时间dV
~dt=2曲FS/=0而在转换时间TCONV最大可能的AV=r--<0AV由此可以得出•—=2coNV"fs其中f为输入的正弦信号频率。所以数字化的斉大正弦信号频率可用下式计算。fEX~^jW+1-p(Ho)/兀ICON\r其中M为模数转换器ADC的分辨率。在本系统中M=8,TCONV=100us帝入公式就可得=6.22x10’(念)如果我们在数据采集器的模数转换器ADC前再加一个采样保持放大器SIIA(它的任务是把要转换的信号快速采样后保持一段时间,以备转换用),这相当于在ADC转换时间开可一个窄“窗孔”,将此窗孔开启瞬间的模拟信号以量化形式记录下来,此窗孔称为“孔径时间”Ta,Ta-般远小于转换时间TCONV。显然,如在孔径时间Ta,输入模拟信号仍在孔径时间Ta,输入模拟信号仍在变化吋进行量化,会引入一定的误差,称其为“孔径误差”,仍考虑对输入的正弦信号采样,那么对M位ADC,并采用SHA的数曹采集器。则数字化的最大正弦信号频率为:亢辭=幵(爪)27tl如欲以8位分辨率去量化lkllz的正弦波,可计算出所需孔径时间为160ns,根据给定的在正弦信号频率与ADC的分辨率确定要求的孔径时间。这样,数据采集时在模数转换器ADC前采用采样保持放大器SHA,就解决了ADC转换时间较长与分辨率要求较短的孔径时间的矛盾,其实质是把模拟信号的离散化与量化分两步进行oSHA先完成模拟信号的离散化。ADC接着进行离散信号的量化。最终获得所需要的数字信号。:MFttrz.OCTtrO*QT1OCKx&oxkxt〒么fir*"0V.i:MFttrz.OCTtrO*QT1OCKx&oxkxt〒么fir*"0V.iVz•1•49V••■•二I:<:"0•aSCsX,ZXaSLXYctoaiXST•o■:©vry■■oW:—•pZ9•cvry!evTVyZ9iSCVT/・Q—VC46m2”,数据采集模块是将从调理电路送过来的信号进行量化,把模拟量变成数字量的模块,A/D转换过程(即采样信号的量化过程)需要吋间,如果输入信号变化较大,就会引起转换误差。所以在A/D转换前,加上保持器做信号保持。保持起把t=kr时刻的采样值保持到A/D转换结束。T为采样周期。采样控制电平为“1”,保持控制电平为“0”,OFFFSET用于零位调整。保持电容°”是外接的,其取值与采样频率和精度有关,常选用510-1000pF。减小C"可提高采样频率,但会降低精度。而且应该选用聚苯乙烯、聚四氟乙烯等高质量电容器作°”。在本系统中根据采样时间、电压下降率等°”取为0.01//F,这样信号达到0.01%耕度的获取时间为25“s,保持期间的输出电压下降率为每秒3mV。也就是说A/D转换器的转换时间为100“s,转换期间,保持器输出电压下降约0.3“V。A/D转换器的任务是完成采样信号越数字信号的转换,ADC0809是逐次逼近式,转换时间为100//s的8位转换器,它的线性误差为±2LSB,抗干扰能力较强,比较适合于信号变化缓慢,现场干扰严重的场合。8位A/D转换器的分辨率约为0.0039,转换赭度在0.4%以下,这对一些楮度要求比较高的控制系统而言是不够的,因此要采用更多位的A/D转换器,如10位、12位、14位等A/D转换器。下面转换吋序图
其转换过程表述如下:首先ale的上升沿将地址代码锁存・译码后选通模拟开关中的某一路,使该路模拟量进入到A/D转换器中。同吋START的上升沿将转换器部清零,下降沿起动A/D转换>即在时钟的作用下,逐位逼近过程开始,转换结束信号EOC即变为低电平。当转换结束后,EOC恢复高电平,此吋,如果对输出允许0E输入一高电平命令,则可读出数据。A・B・C:3位地址线即模拟量通道选择线。ALE为高电平吋,地址译码与对应通道选择见表3-2。CBA选道000INTO001INTI010INT2011INT3100INT4101INT5110INT6111INT7ADC0809的量化单位V=512VV、=OU本系统基准电压呦+),畑㈢uv此时q=(5.12-0)/28=20Mv,转换结果1)»"(讪)/9(讪)A/D转换器与单片机的硬件接口一般有两种方法,一种方法是通过并行I/O接口与8051A单片机
连接(例如8155或8255)需要占用两个并行口(其中一个端口接A/D转换器数据线,另一个端口用来产生A/D转换器工作控制信号);第二种接口方法是利用ADC0809转换器三态输出锁存功能,可以直接与8051的总线连接,在系统中把ADC0809转换器当作外部RAM单元对待。系统中的ADC0809转换器的片选信号由P2.7线选信号控制,若假设地址中的无关位均为1,则其通道IN0-IN7的地址为7FF8H-7FFFFH。当8051产生腋写信号时,则由一个或非门产生转换器的启动START和地址锁存信号ALE(高电平有效),同时将地址总线信息由A,B,C输入并锁存,模拟量通过被选中的通道送到A/D转换器,并在START信号下降沿时开始逐位转换。当转彗号结束时,转换结束信号EOC变高电平。经反相器可向CPU发送一个高电平信号。当8051产生尺。读信号时,则由一个或非门产生0E输出允许信号(高电平有效),使A/D转换结果读入8051单片机。3.2.2査询打印模块电路设计msec£srsrtf444msec£srsrtf444用锁存器或用8155都可以作键盘显示器的接口。但它们共同的缺点是,需要编制定时扫描显示和扫描键盘的程序,使整个系统软件变得比较复杂。本系统采用的Intel18279是一个专用的显示器键盘接口,它用硬件完成对显示器和键盘的扫描。在硬件上它占用两个地址,在软件上省去了显示和键盘扫描,使用程序变得简洁、易读和模块生。DB0-DB7是数据线,与CPU总线相连。当C5=0时,选中8279。此时若AO=1。数据线上的信息是命令或状态。若A0=0,数据线上的尊屋是显示数据或犍盘数据。即AO=1、WR=o命令写到定时器与控制寄存器去,对8279进行编程,RD=°读FIFO/传感器RAM状态寄存器的容;A0=l、腋=0数据写到显示RAM,RD=o读显示RAM或FIFO/传感器RAM的容。扫描计数器通过SL0-SL3输出扫描信号,扫描信号分为译码和编码两种。显示寄存器通过OUTA和OUTB同步输出显示RAM的容。这一过程8279通过硬件自动完成,无需程序干预。扫描输出和回扫线可以构成对键的一个扫描阵列。当有键按下时,该键在行列中的位置上SHIFT和CNTL的状态一起被送到FIFO存储器中,同时使IRQ变高。FIFO/传感器RAM是一个8x8RAM,在键盘和选通方式工作时,它是FIFO存储器,其输入或读出遵循先入先出的原则。此时FIFO状态寄存器存储器空、满、益处等状态。当FIFO存储器有数据时,IRQ信号变为高电平。在传感器矩阵方式工作时,这个存储器是传感器RAM,它的每一位对应着一个传感器的状态。当传感器变化时。IRQ信号变为高电平。系统通过按键来选择工作的摸式,当按下“#”键,系统就进入到查询模式,屏幕显示清零状态,等待数据的输入,当输入数据时,屏幕显示输入的数据,当数据输入完毕以后,系统进行数据的查询,查询到的数据按统统显示在屏幕上,如过此时按下打印键“#”,系统就进入打印模式,把查询到的数据打印出来。第4章单片机数据采集与通信系统软件设计上一章我们对系统的几个主要硬件部分进行了介绍,这些构成了数据采集和通信系统的硬件基础。但是,光有这样的硬件,还只是具有了计算的可能。系统要真正能够进行按照我们设计的意愿进行工作还必须有软件的配合。软件是利用MCS-51汇编语言编制的,并利用了最优化方法,使其在具有较多的功能条件下,占有较少的地址空间同时采用了浮动地址,使程序在不同地址的条件下,不需要改动就能完成各种设计功能,从而方便了调试与应用,并使整体软件系统具有较大的灵活性。采用键入不同的值进入不同的摸式,进行各种不同功能的实现,如果在没按下“护键以前有键按下,判断为误操作,程序不予处理,当按下“#”键时,系统进入采集模式,当键入的是“*”键时,系统进入的是通信模式,当在数据采集模式下键入的是诞时,系统就进入了查询模式,如果需要将査询到的数据打印出来,就需要再一次按下键,从而使系统完成各项功能。MAIN:查询是否有键闭合LCALLKEY;査询键闭合,调键盘处理子程序LCALLDIR;调显示子程序SJMPMAIN;键盘处理子程序KEY:MOVDPTR,#7FFF1IMOVA,#4011;写'读扫描键命令'MOVXDPTR,#7EFFH;MOVXA,DPTR;扫描键值ANLA,#3FHMOVDPTR,#KTABMOVCA,A+DPTR;査表转换成有序编码CJNEA,#0AH,KEY1KEY1:JCPDATA;是数字键,转PDATA处理SUBBA,#0AH;以下为命令处理MOVB,#0311MULABMOVDPTR,#COMTABJMPA+DPTRCOMTAB:LJMPFIND;是*键转到查询打印处理LJMPGIVE;是键转通信处理系统通可以工作在不同的模式下,在数据采集模式下将从模拟通道采集8次等不同次数的数据,本系统采用的是ADC0809,它是具有8路通道模拟开关、通道选择逻辑(地址锁存与译码)、8位A/D转换器以及三态输出锁存缓冲1器,他可以实现8路通道的切换和采集数据的锁存,ADC0809的转换时间为100us,线形误差为土2LSB。按照时间和通道进行存储,这是是为了方便查询的方便,也是保存数据的常用方式,采集模式就工作在查询的模式下。进入数据查询模式我们就可以根据输入的时间来查询那一时刻所存储的数据,按下打印键,系统将为你进行把所查询到的数据进行打印。系统如果工作在通信模式下的话,将进行与PC机的通信,进行数据传输。过从键盘送来的不同键值选择不同的工作模式;接受到系统将自动进入到查询和打印模式,接受到“护系统将自动进入打印状态,再一次接受到“常的时候系统将返回到数据采集状态。4.1单片机数据采集的分析与设计在程序开始时经过初始化后,设置各个通道界限值,然后通道号置为0,采集次数也置为0,就保证了采集次数和通道的开始是正确的,启动数据采集,将采集到的数据进行存储,接着进行第二次数据的采集,当采集到预定的采集次数时,将调用计算平均值子程序,计算出采集的数据,再把这个数据进行判斷是否在正常围之。然后就是第二通道的采集。
开始MOVAL,1011;设置0通道的下限值MOVXOmin.ALMOVAL80H;设置0通道的上限值MOVXOmax,ALMOVAL90H;设置1通道的上限值MOVXlmax,ALMOVAL,OAOII;设置2通道的上限值MOVX2max,ALMOVAL,OBOH;设置3通道的上限值MOVX3max,ALMOVAL,OCOH;设置4通道的上限值MOVX4max,ALMOVAL,ODOH;设置5通道的上限值MOVX5max,ALMOVAL,OEOH;设置6通道的上限值MOVX6max,ALMOVAL,OFOH;设置7通道的上限值MOVX7max,AL;设置各通道界限值MOVA»#1011MOVRO,AINCROMOVR1,#8MOVA,#FOHLI:MOVRO,AINCROCLRCSUBBA,#8DJNZRl.LlMOVDPTR,#228H;写D/A转换MOVA,#8011DJNZR1,LIMOVDPTR,AINCDPTRMOVXDPTR,AL2:MOVR2,#0;通道号设置为0L3:MOVR3,*8;采集次数设置为8L4:MOVXDPTR,#22011;启动A/D转换MOVXDPTR,AMOVR7,#0FFH;延时等中断HERE:DJNZR7,HEREMOVDPTR,TAB;中斷后处理,设置散转表指针MOVA,R2RLAJMPA+DPTR;实现散转TAB:AJMPPRGO;跳转到0通道处理程序AJMPPRG1;跳转到1通道处理程序AJMPPRG2;跳转到2通道处理程序AJMPPRG3;跳转到3通道处理程序AJMPPRG4;跳转到4通道处理程序AJMPPRG5;跳转到5通道处理程序AJMPPRG6;跳转到6通道处理程序AJMPPRG7;跳转到7通道处理程序PRGO:CJNER3,0,PRG01;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG01:MOVA>B;取采集数据CJNER3,7,PRG02;是第一个数吗?不是转PRG02MOV30H,A;是第一个数吗,则保存到30HAJMPPRG09;转PRG09PRG02:CJNER3,6,PRG03;是第二个数吗?不是转PRG03MOV31H,A;是第二个数吗,则保存到3111AJMPPRG09;转PRG09PRG03:CJNER3,5,PRG04;是第三个数吗?不是转PRG04MOV32H,A;是第三个数吗,则保存到32HAJMPPRG09;转PRG09PRG04:CJNER3,4,PRG05;是第四个数吗?不是转PRG05MOV33H,A;是第四个数吗,则保存到33HAJMPPRG09;转PRG09PRG05:CJNER3,3,PRG06;是第五个数吗?不是转PRG06MOV34H,A;是第五个数吗,则保存到34HAJMPPRG09;转PRG09PRG06:CJNER3,2,PRG07;是第六个数吗?不是转PRG07MOV35H,A;是第六个数吗,则保存到3511AJMPPRG09;转PRG09PRG07:CJNER3,1,PRG08;是第七个数吗?不是转PRG08MOV36H,A;是第七个数吗,则保存到36HAJMPPRG09;转PRG09PRG08:CJNER3,0,PRG09;是第八个数吗?不是转PRG09MOV37H,A;是第八个数吗,则保存到37HPRG09:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG1:CJNER3,O,PRG11;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG11:MOVA»B;取采集数据CJNER3,7,PRG12;是第一个数吗?不是转PRG12MOV30H,A;是第一个数吗,则保存到30HAJMPPRG19;转PRG19PRG12:CJNER3,6,PRG13;是第二个数吗?不是转PRG13MOV31H,A;是第二个数吗,则保存到3111AJMPPRG19;转PRG19PRG13:CJNER3,5,PRG14;是第三个数吗?不是转PRG14MOV32H,A;是第三个数吗,则保存到32HAJMPPRG19;转PRG19PRG14:CJNER3,4,PRG15;是第四个数吗?不是转PRG15MOV33H,A;是第四个数吗,则保存到33HAJMPPRG19;转PRG19PRG15:CJNER3,3,PRG16;是第五个数吗?不是转PRG16MOV34H,A;是第五个数吗,则保存到34HAJMPPRG19;转PRG19PRG16:CJNER3,2,PRG17;是第六个数吗?不是转PRG17MOV35H,A;是第六个数吗,则保存到35HAJMPPRG19;转PRG19PRG17:CJNER3,1,PRG17;是第七个数吗?不是转PRG18MOV36H,A;是第七个数吗,则保存到36HAJMPPRG19;转PRG19PRG18:CJNER3,0,PRG19;是第八个数吗?不是转PRG19MOV37H,A;是第八个数吗,则保存到37HPRG19:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG2:CJNER3,0,PRG21;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG21:MOVA»B;取采集数据CJNER3,7,PRG22;是第一个数吗?不是转PRG22MOV30H,A;是第一个数吗,则保存到30HAJMPPRG29;转PRG29PRG22:CJNER3,6,PRG23;是第二个数吗?不是转PRG23MOV31H,A;是第二个数吗,则保存到31HAJMPPRG29;转PRG29PRG23:CJNER3,5,PRG24;是第三个数吗?不是转PRG24MOV32H,A;是第三个数吗,则保存到32HAJMPPRG29;转PRG29PRG24:CJNER3,4,PRG25;是第四个数吗?不是转PRG25MOV33H,A;是第四个数吗,则保存到3311AJMPPRG09;转PRG09PRG25:CJNER3,3,PRG26;是第五个数吗?不是转PRG26MOV34H,A;是第五个数吗,则保存到34HAJMPPRG29;转PRG29PRG26:CJNER3,2,PRG27;是第六个数吗?不是转PRG27MOV35H,A;是第六个数吗,则保存到3511AJMPPRG29;转PRG29PRG27:CJNER3,1,PRG28;是第七个数吗?不是转PRG28MOV36H,A;是第七个数吗,则保存到36HAJMPPRG29;转PRG29PRG28:CJNER3,0,PRG29;是第八个数吗?不是转PRG29MOV37H,A;是第八个数吗,则保存到37HPRG29:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG3:CJNER3,0,PRG31;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG31:MOVA>B:取采集数据CJNER3,7,PRG32;是第一个数吗?不是转PRG32MOV30H,A;是第一个数吗,则保存到30HAJMPPRG39;转PRG39PRG32:CJNER3,6,PRG33;是第二个数吗?不是转PRG33MOV31H,A;是第二个数吗,则保存到31HAJMPPRG39;转PRG39PRG33:CJNER3,5,PRG34;是第三个数吗?不是转PRG34MOV32H,A;是第三个数吗,则保存到32HAJMPPRG39;转PRG39PRG34:CJNER3,4,PRG35;是第四个数吗?不是转PRG35MOV33H,A;是第四个数吗,则保存到3311AJMPPRG39;转PRG39PRG35:CJNER3,3,PRG36;是第五个数吗?不是转PRG36MOV34H,A;是第五个数吗,则保存到34HAJMPPRG39;转PRG39PRG36:CJNER3,2,PRG37;是第六个数吗?不是转PRG37MOV35H,A;是第六个数吗,则保存到3511AJMPPRG39;转PRG39PRG37:CJNER3,1,PRG38;是第七个数吗?不是转PRG38MOV36H,A;是第七个数吗,则保存到36HAJMPPRG39;转PRG39PRG38:CJNER3,0,PRG39;是第八个数吗?不是转PRG39MOV37H,A;是第八个数吗,则保存到37HPRG39:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG4:CJNER3,0,PRG41;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H»A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG41:MOVA»B;取采集数据CJNER3,7,PRG42;是第一个数吗?不是转PRG42MOV30H,A;是第一个数吗,则保存到30HAJMPPRG49;转PRG49PRG42:CJNER3,6,PRG43;是第二个数吗?不是转PRG43MOV31H,A;是第二个数吗,则保存到3111AJMPPRG49;转PRG49PRG43:CJNER3,5,PRG44;是第三个数吗?不是转PRG44MOV32H,A;是第三个数吗,则保存到32HAJMPPRG49;转PRG49PRG44:CJNER3,4,PRG45;是第四个数吗?不是转PRG45MOV33H,A;是第四个数吗,则保存到3311AJMPPRG49;转PRG49PRG45:CJNER3,3,PRG46;是第五个数吗?不是转PRG46MOV34H,A;是第五个数吗,则保存到34HAJMPPRG49;转PRG49PRG46:CJNER3,2,PRG47;是第六个数吗?不是转PRG47MOV35H,A;是第六个数吗,则保存到3511AJMPPRG49;转PRG49PRG47:CJNER3,1,PRG48;是第七个数吗?不是转PRG48MOV36H,A;是第七个数吗,则保存到36HAJMPPRG49;转PRG49PRG48:CJNER3,0,PRG49;是第八个数吗?不是转PRG49MOV37H,A;是第八个数吗,则保存到37HPRG49:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG5:CJNER3,0,PRG51;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG51:MOVA»B;取采集数据CJNER3,7,PRG52;是第一个数吗?不是转PRG52MOV30H,A;是第一个数吗,则保存到3011AJMPPRG59;转PRG59PRG52:CJNER3,6,PRG53;是第二个数吗?不是转PRG53MOV31H,A;是第二个数吗,则保存到3111AJMPPRG59;转PRG59PRG53:CJNER3,5,PRG54;是第三个数吗?不是转PRG54MOV32H,A;是第三个数吗,则保存到32HAJMPPRG59;转PRG59PRG54:CJNER3,4,PRG55;是第四个数吗?不是转PRG55MOV33H,A;是第四个数吗,则保存到33HAJMPPRG59;转PRG59PRG55:CJNER3,3,PRG56;是第五个数吗?不是转PRG56MOV34H,A;是第五个数吗,则保存到3411AJMPPRG59;转PRG59PRG56:CJNER3,2,PRG57;是第六个数吗?不是转PRG57MOV35H,A;是第六个数吗,则保存到35HAJMPPRG59;转PRG59PRG57:CJNER3,1,PRG58;是第七个数吗?不是转PRG58MOV36H,A;是第七个数吗,则保存到36HAJMPPRG59;转PRG59PRG58:CJNER3,0,PRG59;是第八个数吗?不是转PRG59MOV37H,A;是第八个数吗,则保存到37HPRG59:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG6:CJNER3,0,PRG61;8次未采集完了,取采集数据MOVA,B;8次未采集完了,取采集数据MOV38H,A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG61:MOVA>B:取采集数据CJNER3,7,PRG62;是第一个数吗?不是转PRG62MOV30H‘A;是第一个数吗‘则保存到3011AJMPPRG69AJMPPRG69;转PRG69PRG73:CJNER3,5,PRG74;是第三个数吗?不是转PRG74MOV32H,A;是第三个数吗,则保存到MOV37H>A;是第八个数吗,则保存到37HPRG69:DECR3;采集次数加1LJMPL4;转到启动下一次转换处PRG7:CJNER3,0,PRG61;8次未采集完了>取采集数据MOVA>B;8次未采集完了,取采集数据MOV38H>A;保存第8次采集数据到38HMOVRO,#30H;设置求平均值子程序入口参数LCALLMYSUB1;求8次的平均值LCALLSTORE;保存数据,显示数据LCALLPYJ;判是否越界INCR2;通道号加1LJMPL3;采集下一通道PRG71:MOVAB;取采集数据CJNER3,7,PRG72;是第一个数吗?不是转PRG72MOV30H>A;是第一个数吗,则保存到3011AJMPPRG79;转PRG79PRG72:CJNER3,6,PRG73;是第二个数吗?不是转PRG73MOV31H>A;是第二个数吗,则保存到31HAJMPPRG69;转PRG69PRG73:CJNER3,5,PRG74;是第三个数吗?不是转PRG74MOV32H>A;是第三个数吗,则保存到32HAJMPPRG79;转PRG79PRG74:CJNER3,4,PRG75;是第四个数吗?不是转PRG75MOV33H>A;是第四个数吗,则保存到33HAJMPPRG69;转PRG69PRG75:CJNER3,3,PRG76;是第五个数吗?不是转PRG76MOV34H>A;是第五个数吗,则保存到3411AJMPPRG79;转PRG79PRG76:CJNER3,2,PRG77;是第六个数吗?不是转PRG77MOV35H>A;是第六个数吗,则保存到35HAJMPPRG79;转PRG79PRG77:CJNER3,1,PRG78;是第七个数吗?不是转PRG78MOV36H>A;是第七个数吗,则保存到3611AJMPPRG79;转PRG79PRG78:CJNER3,0,PRG79;是第八个数吗?不是转PRG79MOV37H>A;是第八个数吗,则保存到37HPRG79:DECR3;采集次数加1LJMPL4;转到启动下一次转换处中断服务程序:ORR4200HMYINT0:PUSHA;保护现场PUSHDPIIPUSHDPLSETBPSW.3;指定工作寄存器区CLRPSW.4MOVDPH,#22H;读转换数据MOVA,R2MOVDPL,AMOVXA>DPTRMOVB,A;保存转换数据POPDPL;恢复现场POPPDHPOPARETIQ求平均值子程序:采集8平均子程序名;AVERAGE子程序功能:求连续8单元的数扌居平均值入口参数:8单元的首地址放在R0中出口地址:求出的平均值放在寄存器R1中ORG4300HMYSUB1:PUSHR0;保护现场PUSHR1PUSHAPUSHBMOVR1>#7;设置计数值CLRCMOVB,#0MOVA,RO;取第一个采集数据SUBO:INCRO;指向下一个采集数据地址ADDCA,R0;求和JBCC,SUB2;有进位高8位加1SUB1:DJNZRl>SUB0;8个数都加完了吗?未加完继续MOVRl>A;加完了保存低8位SJMPSUB3SUB2:ADDB‘1BAR6RCO\O\BAR6RCO\O\MRMMRRCAMOVR1,AMOVA,BRRCAMOVA,R1RRCAMOVR1>A;平均值保存在R1中POPB;恢复现场POPAPOPR1POPRORET;返回判越界及报警处理子程序:子程序名:PYJ子程序功能:判斷各通道所采集的数据是否越界,越界进行报警处理,否则直接返回。入口参数:通道号在R2中,各通道平均值在501卜57H单元,各通道界限值放在58H-60H单元。出口参数:无ORG5000HPJY:MOVA>R2;散转处理RLAMOVDPTR‘#PYJTABJMPA+DPTRPYJTAB:AJMPPYJO;转到0通道判越界程序段PYJTAB:AJMPPYJ1;转到1通道判越界程序段PYJTAB:AJMPPYJ2;转到2通道判越界程序段PYJTAB:AJMPPYJ3;转到3通道判越界程序段PYJTAB:AJMPPYJ4;转到4通道判越界程序段PYJTAB:AJMPPYJ5;转到5通道判越界程序段PYJTAB:AJMPPYJ6;转到6通道判越界程序段PYJTAB:AJMPPYJ7;转到7通道判越界程序段PYJO:CLRCMOVA,R1;取平均值SUBBA>58H;判斷是否小于下限JCPYJ01;越界(小于下限)转到报警处理程序段MOVA,R1;取平均值SUBBA>59H;判斷是否大于上限JCPYJ04;不大于上限转到PYJ04MOVDPTR,#228H;否则,报警处理MOVA,#20HMOVXdptr.a;输出较小的模拟量作为调节信号INCDPTRMOVXDPTR>A川PPYJ02;对应指示灯闪烁2次PYJ01:MOVDPTR,#22811;输出较大的模拟量作为调节信号MOVA,#0F0HMOVXDPTR,AINCDPTRMOVXDPTR,APYJ02:MOVR5,#2;对应指示灯闪烁2次PYJ03:MOVPl>#0FFHMOVR4>#0FFHDJNZR4,$MOVPl,#0FEHMOVR4,#0FFIIDJNZR4,$DJNZR5,PYJ03PJY04:RET;返回PYJ1:MOVA,R1;取平均值SUBBA,5AH;判斷是否大于上限JCPYJ12;不大于上限,返回MOV$2;对应指示灯闪烁2次PYJ11:MOVPl,#0FFHMOVR4>#0FFHDJNZR4,$MOVPl,#0FDHMOVR4,#0FFIIDJNZR4,$DJNZR5,PYJ11PYJ12:RET;返回PYJ2:MOVA,R1;取平均值SUBBA>5BH;判斷是否大于上限JCPYJ22;不大于上限,返回MOVR5>#2;对应指示灯闪烁2次PYJ11:MOVPl,#0FFHMOVR4>#0FFHDJNZR4,$MOVPl,#0FBHMOVR4,#0FFIIDJNZR4,$DJNZR5,PYJ21PYJ22:RET;返回PYJ3:MOVA,R1;取平均值SUBBA>5CH;判斷是否大于上限JCPYJ32;不大于上限,返回MOVR5>#2;对应指示灯闪烁2次PYJ31:MOVPl,#0FFHMOVR4>#0FFHDJNZR4,$MOVPl,#0F7HMOVR4,#0FFIIDJNZR4,$DJNZR5,PYJ31PYJ32:RET;返回PYJ4:M0VA,R1;取平均值SUBBA>5DH;判斷是否大于上限JCPYJ42;不大于上限,返回MOVR5>#2;对应指示灯闪烁2次PYJ41:MOVPl,#0FFHMOVR4>#0FFHDJNZR4,$MOVP1,#OEFHMOVR4,#0FFIIDJNZR4,$DJNZR5,PYJ41PYJ42:RET;返回PYJ5:MOVA,R1;取平均值SUBBA>5EH;判斷是否大于上限JCPYJ52;不大于上限,返回MOVR5>#2;对应指示灯闪烁2次PYJ51:MOVPl‘#0FFHMOVR4>#OFFHDJNZR4,$MOVP1,#ODFHMOVR4,#0FFHDJNZR4,$DJNZR5,PYJ51PYJ52:RET;返回PYJ6:MOVA,R1;取平均值SUBBA>5FH;判斷是否大于上限JCPYJ62;不大于上限,返回MOVR5•#2;对应指示灯闪烁2次PYJ61:MOVPl>#OFFHMOVR4>#0FFHDJNZR4,$MOVP1,#OBFHMOVR4,#0FFHDJNZR4,$DJNZR5,PYJ61PYJ62:RET;返回PYJ7:MOVA,R1;取平均值SUBBA,60H;判断是否大于上限JCPYJ72;不大于上限,返回MOVR5#2;对应指示灯闪烁2次PYJ71:MOVPl>#0FFHMOVR4>#0FFHDJNZR4,$MOVPh#07FHMOVR4,#0FFHDJNZR4,$DJNZR5,PYJ71PYJ72:RET;返回显示存储程序STOREO:MOVX#4111,R1;将数据存入预留地址MOVDPTE>#7FFFH;显示程序MOVA,#90HMOVXDPTR,A;写命令,自增方式MOVP2,#07EHMOVR1,#0FFHMOVDPTR>#DTABMOVR7,#6MOVRO,#70HMOVDPTR,#7F0AH;寄存器A地址MOVXA,DPTRWAIT:JBACC•7,WAIT:UIP二1则等待更新完毕MOVDPL,OOH;秒地址MOVRO>#30H;取目标首地址MOVXA,DPTR;取秒数据MOVROA:送入8051的部RAM缓冲区ICDPTR:移指针ICROMOVX41H>SPSTORE1:MOVX#4211,R1;将数据存入预留地址MOVDPTE>#7FFFH;显示程序MOVA>#90HMOVXDPTR>A;写命令,自增方式MOVP2>#07EHMOVR1,#0FFHMOVDPTR,#DTABMOVR7>#6MOVRO>#70HMOVDPTR>#7F0AH;寄存器A地址MOVXA,DPTRWAIT:JBACC,7,WAIT:UIP=1则等待更新完毕MOVDPL>OOH;秒地址MOVRO*#3011;取目标首地址MOVXA,DPTR;取秒数据MOVRO,A:送入8051的部RAM缓冲区ICDPTR:移指针ICROMOVX42H>SPSTORE2:MOVX#4311,R1;将数据存入预留地址MOVDPTE>#7FFFH;显示程序MOVA,#90HMOVXDPTR>A;写命令,自增方式MOVP2,#07EHMOVR1>#0FFHMOVDPTR,#DTABMOVR7>#6MOVRO,#70HMOVDPTR,#7F0AII;寄存器A地址MOVXA,DPTRWAIT:JBACC>7>WAIT:UIP=1则等待更新完毕MOVDPL,OOH;秒地址MOVRO>#30H;取目标首地址MOVXA,DPTR;取秒数据MOVRO,A:送入8051的部RAM缓冲区ICDPTR:移指针ICROMOVX43H>SPSTORE3:MOVX#44H,R1;将数据存入预留地址MOVDPTE>#7FFFH;显示程序MOVA,#90HMOVXDPTR>A;写命令,自增方式MOVP2,#07EHMOVR1,#0FFHMOVDPTR,#DTABMOVR7,#6MOVRO,#70HMOVDPTR>#7F0AH;寄存器A地址MOVXA,DPTRWAIT:JBACC,7,WAIT:UIP=1则等待更新完毕MOVDPL>OOH;秒地址MOVRO*#3011;取目标首地址MOVXA,DPTR;取秒数据MOVRO,A:送入8051的部RAM缓冲区ICDPTR:移指针ICROMOVX44H•SPSTORE4:MOVX#45H,R1;将数据存入预留地址MOVDPTE>#7FFF1I;显示程序MOVA,#90HMOVXDPTR,A;写命令,自增方式MOVP2>#07EHMOVR1,#0FFHMOVDPTR>#DTABMOVR7,#6MOVRO,#70HMOVDPTR,#7F0AH;寄存器A地址MOVXA,DPTRWAIT:JBACC>7>WAIT:UIP=1则等待更新完毕MOVDPL,OOH;秒地址MOVRO*#30H;取目标首地址MOVXA>DPTR;取秒数据MOVRO,A:送入8051的部RAM缓冲区ICDPTR:移指针ICROMOVX45H,SPSTORE5:MOVX#4611,R1;将数据存入预留地址MOVDPTE>#7FFFH;显示程序MOVA>#90HMOVXDPTR,A;写命令,自增方式MOVP2>#07EHMOVR1,#0FFHMOVDPTR,#DTABMOVR7>#6MOVRO>#70HMOVDPTR>#7F0AH;寄存器A地址MOVXA,DPTRWAIT:JBACC>7>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产后修复中心合同范本
- 劳务代管合同范本
- 加盟托管经营合同范本
- 出租吊车服务合同范本
- 单位代建房合同范例
- 2013版建设合同范本
- 单位监控安装合同范本
- 个人雇佣出海作业合同范本
- 加工货款合同货款合同范本
- 个人山林承包合同范本
- 2025春季开学前学校安全隐患排查工作实施方案:5大安全排查一个都不能少
- 预防校园欺凌主题班会课件(共36张课件)
- 威图电柜空调SK3304500使用说书
- 人教版小学三年级道德与法治下册全册教案(精品)
- 义务教育《劳动》课程标准(2022年版)
- 从业务骨干到管理者(课堂PPT)
- 2018年黑龙江统招专升本公共英语真题
- (完整版)小学生必背古诗300首带拼音版本
- 英文版验资报告
- 老挝10大经济特区
- 膜性肾病与KDIGO指南
评论
0/150
提交评论