《基于单片机的单通道模拟电压测量系统设计样本.doc》由会员分享,可在线阅读,更多相关《基于单片机的单通道模拟电压测量系统设计样本.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。基于单片机的单通道模拟电压测量系统设计 摘要: 本文介绍一种基于AT89S52单片机的一种电压测量系统,该系统采用ICL7135高精度、 双积分A/D转换电路, 测量直流电压范围0-200伏, 使用LCD液晶模块显示。介绍了双积分电路的原理, AT89S52的特点, ICL7135的功能和应用, 模拟开关CD4052的功能和应用, 14位二进制串行计数/ 分频器的功能和应用, LCD1601的功能和应用等, 并给出了系统的各部分电路。关键词: 数字电压表; ICL7135; 1601液晶模块; AT89S52单片机Abstract: T
2、he paper introduces a voltage measurement s-ystem based on AT89S52 MCU, in which ICL7135 high preci-sion, dual-integration A/D conversion circuits and LCD display are used. The DC measuring range of the system is 0-200 volts. The paper also introduces the principle of dual-integration circuit, the f
3、unction and application of CD4052, LCD1601 and 14-bit serial counter/divider. The part circuits of the system are presented as well. Key Words : Digital Voltmeter; ICL7135; LCD1601; AT89S521引言数字电压表( Digital Voltmeter) 简称DVM, 它是采用数字化测量技术, 把连续的模拟量( 直流输入电压) 转换成不连续、 离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、 精度低, 不
4、能满足数字化时代的需求, 采用单片机的数字电压表, 精度高、 抗干扰能力强, 可扩展性强、 集成方便。当前, 由各种单片A/D 转换器构成的数字电压表, 已广泛用于电子及电工测量、 工业自动化仪表、 自动测试系统等智能化测量领域, 显示出强大的生命力。与此同时, 由DVM扩展而成的各种通用及专用数字仪器仪表, 也把电量及非电量测量技术提高到崭新水平。本文重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。 2 硬件设计 1 2 3模拟开关档位切换A/D转换AT89S52单片机LCD显示输入电路图1系统基本方框图 总电路原理图见附录一。硬件电路由输入电路、 档位切换电路、
5、 A/D转换电路、 AT89S52单片机, 以及LCD液晶显示电路等几个部分组成。如图1所示, 模拟电压经过模拟开关档位切换到不同的分压电路衰减后, 经隔离干扰送到A/D转换器进行A/D转换, 然后送到单片机中进行数据处理。处理后的数据送到LCD中显示, 显示当前测量的电压值。以下对这几个电路逐一进行介绍。2.1 输入电路4、 5输入电路的作用是把不同量程的被测电压规范到A/D转换器所要求的电压值。智能化数字电压表所采用的单片双积分型ADC芯片ICL7135, 它要求输入电压0-2V。本系统设计是0-200V电压, 灵敏度高, 因此能够不加前置放大器, 只需衰减器, 如图2所示90K、 9K、
6、 和1K电阻构成1/10、 1/100的衰减器。衰减输入电路可由模拟开关来选择不同的衰减率, 从而切换档位。2.2 量程选择电路的设计5CD4052的引脚功能见图3。CD4052相当于一个双刀四掷开关,具体接通哪一通道, 由输入地址码AB来决定。其真值表见表1。 图图3 CD4052的管脚图图图2衰减输入电路表1 CD4052的真值表输入状态接通通道INHBA000”0”X、 ”0”Y001”1”X、 ”1”Y010”2”X、 ”2”Y011”3”X、 ”3”Y1均不接通2.3 A/D 转换电路的设计模拟数字转换器A/D芯片是任何数据采集系统的核心, 它将连续模拟变量形式的数据变换成一种适合于
7、数字处理的分离二进制代码。整个转换过程一般分为四个步骤进行,即取样、 保持、 量化和编码。前两个步骤在取样-保持电路中完成,后两步骤则在ADC中完成。 常见的ADC有积分型、 逐次逼近型、 并行比较型/串并行型、 -调制型、 电容阵列逐次比较型及压频变换型。下面简要介绍常见的几种类型的基本原理及特点: 逐次逼近型(如TLC0831) AD转换器由一个比较器和DA转换器经过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、 功耗低,在低分辨率( 12位)时价格很高。 并行比较型/串并行比较型(如TL
8、C5510) AD转换器采用多个比较器,仅作一次比较而实行转换,又称Flash型。由于转换速率极高, n位的转换需要2n - 1个比较器,因此电路规模也极大,价格也高,只适用于视频AD 转换器等速度特别高的领域。串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n /2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,因此称为Half flash型。 压频变换型(如AD650) AD转换器是经过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎能够无限增加,只要采样的时间能够满足输出频率分
9、辨率要求的累积脉冲个数的宽度。其优点是分辨率高、 功耗低、 价格低,可是需要外部计数电路共同完成AD转换。积分型(如ILC7135) AD转换器是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率), 然后由定时器/计数器获得数字值。ICL7135AD转换具有自动校零功能, 自动较零准确性仅受系统噪声影响, 且偏差小于10V; 有超量程(over)和欠量程(under)信号, 容易实现量程自动转换; 设有6个控制信号端、 同时进行字位输出和BCD码输出, 可与LCD译码驱动器及单片机接口, 进行数据处理, 构成智能化仪器; 满量程为 0字, 在 0汁数范围内准确度为1个字。本设计采用双积分I
10、CL7135 A/D 转换器, 它的性能比较稳定, 转换精度高, 具有很高的抗干扰能力, 价格低廉, 电路结构简单, 其缺点是工作速度较低。在对转换精度要求较高, 而对转换速度要求不高的场合如电压测量有广泛的应用。比较以上这四种AD转换器的性能特点, 综合考虑各方面的条件和本系统要实现的指标, 本系统设计采用的就是双积分A/D 转换器ICL7135。2.3.1双积A/D 转换器的工作原理双积分型A/D转换是一种间接A/D转换技术。首先将模拟电压转换成积分时间, 然后用数字脉冲计时方法转换成计数脉冲数, 最后将此代表模拟输入电压大小的脉冲数转换成二进制或BCD码输出。图4双积分A/D 转换器的内
11、部原理图5双积分A/D 转换器的时序图 显示电压数据 如图4所示, 对输入模拟电压和基准电压进行两次积分, 先对输入模拟电压进行积分, 将其变换成与输入模拟电压成正比的时间间隔 T1, 再利用计数器测出此时间间隔, 则计数器所计的数字量就正比于输入的模拟电压, 接着对基准电压进行同样的处理, 直至积分输出返回到起始值。双积分A/D 转换器的时序图如图5所示。在常见的A/D转换芯片( 如ADC -0809、 ICL7135、 ICL7109等) 中, ICL7135与其余几种有所不同, 它是一种四位半的双积分A/D转换器, 具有精度高( 精度相当于14位二进制数) 、 价格低廉、 抗干扰能力强等
12、优点。本系统介绍用单片机并行方式采集ICL7135的数据以实现单片机电压表的设计方案。2.3.2 ICL7135的应用 ICL7135是采用CMOS工艺制作的单片4位半A/D转换器, 其所转换的数字值以多工扫描的方式输出, 只要附加译码器, 数码显示器, 驱动器及电阻电容等元件, 就可组成一个满量程为2V的数字电压表。 ( 1) ICL7135主要特点如下 6 7双积型A/D转换器, 转换速度慢。在每次A/D转换前, 内部电路都自动进行调零操作, 可保证零点在常温下的长期稳定。在 0字( 2V满量程) 范围内, 保证转换精度1字相当于14bitA/D转换器。 具有自动极性转换功能。能在单极性参
13、考电压下对双极性模拟输入电压进行A/D转换, 模拟电压的范围为01.9999V。 模拟输入能够是差动信号, 输入电阻极高, 输入电流典型值1PA。 所有输出端和TTL电路相容。有过量程( OVER) 和欠量程( UNDER) 标志信号输出, 可用作自动量程转换的控制信号。输出为动态扫描BCD码。对外提供六个输入,输出控制信号(R/H,BUSY,STB,POL,OVER,UNDER),因此除用于数字电压表外,还能与异步接收 /发送器,微处理器或其它控制电路连接使用。采用28外引线双列直插式封装。 ( 2) ICL7135数字部分9数字部分主要由计数器、 锁存器、 多路开关及控制逻辑电路等组成。I
14、CL7135一次A/D转换周期分为四个阶段: 自动调零( AUTO-ZERO) ; 信号积分( SINGAL-INTEGRATE) ; 基准电压反积分( 去积分) ; 积分回零( ZERO-INTEGRATE) 。具体内部转换过程如下几个步骤: AUTO-ZERO( 自动调零) 在该相时, 内部IN+和IN-输入与引脚断开, 且在内部连接到ANLG-COMMON, 基准电容被充电至基准电压, 系统接成闭环并为自动调零( AUTOZERO) 电容充电以补偿缓冲放大器、 积分器和比较器的失调电压。此时, 自动调零精度令受系统噪声的限制, 以输入为基准的总失调小于10V。SINGAL-INTEGRA
15、TE( 信号积分) 相在该相, 自动调零环路被打开, 内部的IN+和IN-输入被连接至外部引脚。在固定的时间周期内, 这些输入端之间的差分电压被积分。当输入信号相对于转换器电源不反相( NO-RETURN) 时, IN-可直接连接至ANJG-COMMON以便输出正确的共模电压。同时, 在这一相完成的基础上, 输入信号的极性将被系统所记录。 DEINTEGRATE( 去积分) 相该相的基准用于完成去积分任务, 此时内部IN-在内部连接ANLG-COMMON, IN+跨接至先前已充电的基准电容, 所记录的输入信号的极性可确保以正确的极性连接至电容以使积分器输出极性回零。输出返回至零所需的时间正比于
16、输入信号的幅度。ZERO-INTEGRATE( 积分器返回零) 相内部的IN-连接到ANLG-COMMON, 系统接成闭环以使积分器输出返回到零。一般这相需要100200个时钟脉冲, 可是在超范围( OVER) 转换后, 则需要6200个脉冲。在Signal-Integrate( 即信号积分) 相开始时, ICL7135的BUSY信号线跳高并一直保持高电平, 直到Deintegrate( 去积分) 相结束时才跳回低电平。在满量程情况下, 这个区域中的最多脉冲个数为30002个。其中Deintegrate( 去积分) 相的脉冲个数反映了转换结果。对于不同模拟量输入, ICL7135的BUSY信号
17、的高电平宽度也不同。( 3) ICL7135引脚的使用 9ICL7135的外引线功能端排列如图6所示, 具体各个引脚的功能使用介绍如下: 图6 ICL7135引脚图R/H( 25脚) :当R/H=”1”( 该端悬空时为”1”) 时, ICL7135处于连续转换状态, 每40002个时钟周期完成一次A/D转换。若R/H由”1”变”0”, 则ICL7135在完成本次A/D转换后进入保持状态, 此时输出为最后一次转换结果, 不受输入电压变化的影响。因此利用R/H端的功能能够使数据有保持功能。图7 ICL7135的时序图图2.3.4 ICL7135的波形图STB( 26脚) :每次A/D转换周期结束后
18、, ST端都输出5个负脉冲, 其输出时间对应在每个周期开始时的5个位选信号正脉冲的中间, ST负脉冲宽度等于1/2时钟周期。第一个ST负脉冲在上次转换周期结束后101个时钟周期产生。如图7所示, 因为每个选信号( D5-D1) 的正脉冲宽度为200个时钟周期( 只有AZ和DE阶段开始时的第一个D5的脉冲宽度为201个CLK 周期) , 因此ST负脉冲之间相隔也是200个时钟周期。需要注意的是, 若上一周期为保持状态( R/H=”0”) 则ST无脉冲信号输出。ST信号主要用来控制将转换结果向外部锁存器、 UARTs或微处理器进行传送。BUSY( 21脚) :在双积分阶段( INT+DE) , B
19、USY为高电平, 其余时为低电平。因此利用BUSY功能, 能够实现A/D转换结果的远距离双线传送, 其还原方法是将BUSY和CLK”与”后来计数器, 再减去10001就可得到原来的转换结果。OVER( 27脚) :当输入电压超出量程范围( 0) , OR将会变高。该信号在BUSY信号结束时变高。在DE阶段开始时变低。UNDER( 28脚) :当输入电压等于或低于满量程的9%( 读数为1800) , 则一当BUST信号结束, UR将会变高。该信号在INT阶段开始时变低。POL( 23脚) :该信号用来指示输入电压的极性。当输入电压为正, 则POL等于”1”, 反之则等于”0”。该信号DE阶段开始
20、时变化, 并维持一个A/D转换调期。位驱动信号D5、 D4、 D3、 D2、 D1( 12、 17、 18、 19、 20脚) :每一位驱动信号分别输出一个正脉冲信号, 脉冲宽度为200个时钟周期, 其中D5对应万位选通, 以下依次为千、 百、 十、 个位。当输入电压过量程时, D5-D1在AZ阶段开始时只分别输出一个脉冲, 然后都处于低电平, 直至DE阶段开始时才输出连续脉冲。利用这个特性, 可使得显示器件在过程时产生一亮一暗的直观现象。 B8、 B4、 B2、 B1( 16、 15、 14、 13脚) :该四端为转换结果BCD码输出, 采用动态扫描输出方式, 即当位选信号D5=”1”时,
21、该四端的信号为万位数的内容, D4=”1”时为千位数内容, 其余依次类推。在个、 十、 百、 千四位数的内容输出时, BCD码范围为0000-1001, 对于万位数只有0和1两种状态, 因此其输出的BCD码为”0000”和”0001”。当输入电压过量程时, 各位数输出全部为零, 这一点在使用时应注意。最后还要说明一点, 由于数字部分以DG端作为接地端, 因此所有输出端输出电平以DG作为相对参考点。基准电压的输入必须对于模拟公共端COM是正电压。 ( 4) ICL7135与单片机的连接 在ICL7135与单片机进行连接时, 使用并行采集方式, 四位BCD码的数据输出线分别与单片机AT89C52的
22、P10, P11, P12, P13相连接, 位驱动信号D5、 D4、 D3、 D2分别与AT89C52的P14, P15, P16, P17相连接, 指示输入电压极性POL脚与AT89C52的P30( RXD) 相连接, STB信号接至AT89C52的P3.2( INT0) , OVER信号接至AT89C52的P24, R/H信号接至AT89C52的P20。ICL7135的其它外围电路如总原理图所示( 见附录一) 。另外, ICL7135很特别的一点是它需要外部的时钟信号, 本设计采用CD4060来对4M的时钟信号进行32分频得到125KHz的时钟信号, 如图8所示。CD4060计数为级进制
23、计数器, 在数字集成电路中可实现的分频次数最高, 而且CD4060还包含振荡电路所需的非门, 使用更为方便。图8 CD4060时钟发生电路2.4 单片机部分的设计 10 11图 9 AT89S52引脚图单片机选用的是ATMEL公司新推出的AT89S52, 其管脚图如图 9所示。该芯片具有低功耗、 高性能的特点, 采用CMOS工艺的8位单片机, 与AT89C51完全兼容。AT89S52还有以下主要特点: 采用了ATMEL公司的高密度、 非易失性存储器( NV-SRAM) 技术; 其片内具有256字节RAM, 8KB的可在线编程( ISP) FLASH存储器; 有2种低功耗节电工作方式: 空闲模式
24、和掉电模式; 片内含有一个看门狗定时器( WDT) , WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST), 只要对WDTRST按顺序先写入01EH, 后写入0E1H, WDT便启动, 当CPU由于扰动而使程序陷入死循环或”跑飞”状态时, WDT即可有效地使系统复位, 提高了系统的抗干扰性能。2.5 液晶显示部分的设计9显示接口用来显示系统的状态, 命令或采集的电压数据。本系统显示部分用的是LCD液晶模块, 采用一个161的字符型液晶显示模块, 引脚如图10所示。 图10 LCD1601引脚图 点阵图形式液晶由 M 行N 列个显示单元组成, 假设 LCD 显示屏有64行, 每行
25、有 128列, 每 8列对应 1 个字节的 8 个位, 即每行由 16 字节, 共 168=128个点组成, 屏上 6416 个显示单元和显示 RAM 区 1024 个字节相对应, 每一字节的内容和屏上相应位置的亮暗对应。一个字符由 68 或 88点阵组成, 即要找到和屏上某几个位置对应的显示 RAM区的 8 个字节, 而且要使每个字节的不同的位为1, 其它的为0, 为1的点亮, 为0的点暗, 这样一来就组成某个字符。但对于内带字符发生器的控制器来说, 显示字符就比较简单了, 可让控制器工作在文本方式, 根据在LCD 上开始显示的行列号及每行的列数找出显示 RAM对应的地址, 设立光标, 在此
26、送上该字符对应的代码即可。 ( 1) 1601使用说明LCD1601液晶模块的引脚如表2所示。寄存器选择, 如表3所示。表2 LCD1601液晶模块的引脚引脚符号功能说明1GND接地2Vcc5V3VL驱动LCD, 一般将此脚接地4RS寄存器选择 0: 指令寄存器( WRITE) Busy flag,位址计数器( READ) 1: 数据寄存器( WRITE,READ) 5R/WREAD/WRITE选择 1: READ 0: WTITE6E读写使能( 下降沿使能) 7DB0低4位三态、 双向数据总线8DB19DB210DB311DB4高4位三态、 双向数据总线另外DB7也是一个Busy flag1
27、2DB513DB614DB7表3 寄存器选择控制线操作RSR/W操作说明00写入指令寄存器( 清除屏幕等) 01读Busy flag(DB7),及读取位址计数器( DB0DB6)10写入数据寄存器( 显示各字型等) 11从数据寄存器读取数据 表3为寄存器选择控制线操作, 其中Busy flag(DB7)未被清除为”0”时, LCD将无法再处理其它指令要求。 表4为LCD1601的显示地址, 内部地址计数器的计数地址为: SB7=0(DB0DB6)第一行00、 01、 02 等, 第二行40、 41、 42 等, 可配合检测DB7=1 (RS=0,R/W=1)读取当前显示字的地址, 判断是否需要
28、换行。表4 LCD1601 161 显示字的地址1234567800010203040506079101012131415164041424344454647 表5为LCD1601的外部地址, DB7=1, 亦即80H内部计数地址, 能够用此方式将字显示在某一位置。表5 LCD1601 161( 16字1行) 显示字的外部地址123456788081828384858687910111213141516C0C1C2C3C4C5C6C7表6 LCD1601 的指令组指 令说 明设置码RS R/WD7D6D5D4D3D2D1D0清除显示幕000000000*光标回到原点000000001*进入模式
29、设定00000001I/DS显示幕ON/OFF0000001DCB续表6移位000001S/CR/L*功能设定00001DLNF*字发生器地址设定0001AGC设置显示地址0001ADD忙碌标志位BF001BF显示数据10写入数据读取数据11读取数据I/D I/D=1 表示加1, I/D=0 表示减1S S=1 表示显示幕ON S=0表示OFFD D=1 表示显示屏幕ON D=0表示显示屏幕OFFC C=1 表示光标ON C=0表示光标OFFB B=1 表示闪烁ON B=0表示显示闪烁OFFS/C S/C=1表示显示屏幕移位 S/C=0光标移位R/L R/L=1表示右移 R/L=0表示左移DL
30、 DL=1表示8位 DL=0表示4位F F=1表示510点矩阵 F=0表示57点矩阵N N=1表示2行显示行 N=0表示1行显示行BF BF=1:内部正在动作 BF=0:可接收指令或数据码 ( 2) 液晶显示部分与AT89S52的接口 2 8 9如总原理图( 附录一) 所示, 用AT89S52的P0口作为数据线, 用P2.1、 P2.2、 P2.3分别作为LCD的E、 R/W、 RS。其中E是下降沿触发的片选信号, R/W是读写信号, RS是寄存器选择信号。本模块设计要点如下: 显示模块初始化, 首先清屏, 再设置接口数据位为8位, 显示行数为1行, 字型为57点阵, 然后设置为整体显示, 取
31、消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符, 程序中采用2个字符数组, 一个显示字符, 另一个显示电压数据, 要显示的字符或数据被送到相应的数组中, 完成后再统一显示。首先取一个要显示的字符或数据送到LCD的显示缓冲区, 程序延时2.5ms,判断是否够显示的个数, 不够则地址加一取下一个要显示的字符或数据。最后显示出电压值来, 每次电压采集后, CPU将数据送到LCD显示, 将可能出现以下几种需要消隐的情况。例如: 200V档量程, -019.99, 此时千位的值0不符合人们的视觉习惯, 需要把千位的值消隐掉, 编程是将#20H送入千位, 使其在LCD中不显
32、示任何字符即可。同样的情况如下: 20V档量程, -01.999, 需要消隐十位, 在采集到数据之后, 置数之前判断档位, 是2V档不消隐, 是其它档位时再看要消隐的位之前有几个是零。例如200V档量程, -001.9V, 在2次中断时判断档位是200V档, 第1位是零, 消隐第2位百位。3 系统的软件设计 整个系统软件由主程序, A/D中断程序,延时子程序, 检查LCD忙状态, 写指令数据到LCD, 写显示数据到LCD, 清屏子程序, LCD初始化设定等几个模块组成, 下面重点介绍主程序和A/D中断程序的设计。3.1主程序设计2 5 ICL7135A/D与单片机连接电路的软件设计系统的程序流
33、程图如11所示。主程序一开始运行则设置堆栈起始地址为70H, 设置中断寄存器, 用来对ICL7135的中断进行计数, 每5次后清零, 完成一次数据采集工作, 然后设置ICL7135的STB端的中断的优先级。接着LCDM1601B进行一次清屏, 使其各个指令、 数据寄存器的值进行清空, 屏幕不显示任何字符。前面对1601B的介绍, 开 始设置堆栈设置第一行的位置启动AD转换设置第二行的位置显示字符显示电压数据设置显示器图2.3.2双积A/D 转换器的时序图 LCD初始化只要将01H送到数据总线, 使RS=0, R/W=0, E有个下降沿的脉冲就能够完成清屏工作。由于下降沿时, 内部数据要送到RA
34、M区, 因此要有一个延时子程序, 使这个下降沿持续2.5毫秒。内部RAM有指令代码后就开始对RAM进行清零, 因此屏幕原有的字符将被清除。接着对1601进行功能的设定。按表4来看是设定显示器按2行显示, 每行8位, 57点阵。每次向LCDM中写入一个指令, 就调用一次lcd_pos, 然后再对显示器进行闪烁、 光标等功能进行设定。显示器的RAM地址按加方法进行读写。再设定第一行字符, 也就是Voltage的显示地址80H。字符Voltage的TABLE表地址送图11 主程序流程图到DPTR中, 然后调用远程查表命令, 依次把数据送到P0口, 这时再调用子程序lcd_wdat, 使LCD1601
35、的RS=1, R/W=0使使能端E产生一个下降沿脉冲, 将数据送入到数据寄存器中, 接下来执行显示子程序, 它的主要功能是将TABLE表中的字符输出到LCD中去。设定好显示字符数即远程查表的次数, 就开始查表了。图3.2数据地址例如第一个字符”V”的ASCII码是56H, 就将这个码送到P0口, 再调用使能数据子程序, 使RS=1( 数据区使能) 写入显示数据区, R/W=0表示写, E=0来个下降沿延时2.5毫秒, 使数据写入RAM内。完成TABLE表输出以后, 向指令RAM中写入第2行的起始地址为OCH, 再调用显示采样数据的子程序。采样数据存放的数据地址安排如图12所示,首先将60H中的
36、数显示在正负号的位置上, 按照ASCII码表, 正号图12 数据存放地址不显示( #20H) , 负号显示”( #2DH) 。3.2 A/D中断程序设计8 10ICL7135每一秒钟完成3次据的采集工作, 1/3秒完成后向CPU申请中断,CPU这时暂停工作, 为中断服务。中断响应后关中断, 将PSW、 ACC压栈, 判断是否首次中断, 如果是首次中断, 则将正负号标志位置入60H, 再把万位置入61H中, 如果不是首次中断, 则判断是第几次中断, 如果是第二次中断, 则将千位数置入62H中, 如果是第三次中断, 再将百位数置入63H中, 第四次中断则将十位数置入64H中, 第五次中断则将小数点
37、位置入65H中, 同时个位置入66H中。同时清除中断次数寄存器30H中的值, 完成中断后将ACC、 PSW出栈, 开中断。A/D中断服务程序流程图如图13所示。图13 中断子程序流程图4系统测试与结论4.1 系统测试 ( 1) 使用的测试仪器Instek GOS-620 20MHz双踪示波器、 DT9205 3 又 1/4位数字万用表。( 2) 测试方法 在系统工作状态下, 分别对各个被测电压值多次测量, 取其平均值或描述某工作状态是否稳定、 正常。( 3) 测试结果根据附录一所示的整机电路原理图, 连接好电路, 设置好电路的参数, 经过整机调试, 得到的测试结果如表7 、 表8所示。表7 系
38、统测试的正电压数据显示被测输入电压( V) 实际测量电压( V) 误差值( V) 精度百分比/%0.1720.1680.00497.670.5280.5250.00399.431.2361.2240.01299.032.3152.3010.01499.405.2425.2230.01999.638.3788.3020.07699.0911.9511.620.3397.2418.7718.500.2798.5619.6519.220.4397.8120.3119.960.3598.2827.8027.190.6197.8132.2031.270.9397.11表8 系统测试的负电压数据显示被测输
39、入电压( V) 实际测量电压( V) 误差值( V) 精度百分比/%-0.153-0.1580.00596.84续表4.2-0.624-0.6920.06890.17-1.527-1.6080.08194.96-2.734-2.7920.05897.92-5.352-5.4120.06098.89-8.927-9.0300.10398.86-12.03-12.430.4396.78-17.62-17.980.3698.00-19.23-19.830.6096.97-21.35-22.030.6896.91-27.22-28.130.9196.77-32.37-33.521.1596.564.2
40、 结果分析 ( 1) 制作与调试中的问题运用 Protel 99 软件, 完成了电路图的制作。在电路板的制作过程中, 没有发现什么问题。可是在调试的过程中, 发现了两个问题: 参考电平电路。当把整机电路接好之后所测电压与被测电压的误差较大, 经检查是参考电平电路输出的电压要求1伏的关系较大。在电路的输入端加入一个小电容( 0.47uF) 后即可。液晶显示电路。将输入数据与显示数据进行分析时发现, 显示的数据是输入数据的补码, 原因是 DAC 输出的电平是负电平, 在设计时忽略这个问题, 用-1 倍放大器对输出信号反转后即可。 ( 2) 结论本设计基本完成了题目所要求的功能, 系统工作稳定, 测
41、量电压的精度平均能够达到98%以上, 能够说是比较精确的了, 而且测量的范围比较大, 能够测量0200V的直流电压。参考文献1 徐爱钧.智能化测量控制仪表原理与设计( 第二版) M.北京: 北京航空航天大学出版社, .2 吴金戌, 沈庆阳, 郭庭吉.8051单片机实践与应用M.北京: 清华大学出版社, .3 张国勋.缩短ICL7135A/D采样程序时间的一种方法J. 电子技术应用, 1993, 1(1), 1519.4 高峰.单片微型计算机与接口技术M.北京: 科学出版社, .5 冯占岭. 数字电压表及数字多用表检测技术M.北京: 中国计量出版社, .6 41/2 Digit A/D Conv
42、erter With Multiplexed BCD Outputs( ICL7135) .J .美国: Maxim公司, 1987, 2(1), 2335.7 何立民.MCS-51系列单片机应用系统设计M.北京: 北京航空航天大学出版社, 1996.8 梅丽凤.单片机原理及接口及接口技术M.北京: 清华大学出版社, .9 李全利.单片机原理及应用技术M.北京: 高等教育出版社, .10 南建辉, 熊鸣, 王军茹.MCS-51单片机原理及应用实例M.北京: 清华大学出版社, .11 陆子明, 徐长根.单片机设计与应用基础教程M.北京: 国防工业出版社, .结束语电压测量经过不同的接口电路可实现
43、温度、 湿度、 压力等测量, 广泛应用于工业领域。本电路设计别具一格, 是一种高精度、 低功耗、 宽量程、 智能化的电压表。可扩展键盘、 EEPROM、 报警电路, 实现电压异常记录、 报警。致 谢在我写本论文的过程中, 张德祥老师给我提供了许多资料, 并对实践中出现的问题给予耐心的解答, 完稿之后在百忙之中仔细阅读, 给出修改意见。张老师爱岗敬业, 治学严谨, 思维严密, 平易近人是我十分尊敬的老师, 在此对她表示真挚的感谢。附录一: 总体电路原理图 附录二:源程序清单#include#include#define uchar unsigned char#define uint unsigned intsbit RH = P23;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;sbit over=P24;sbit STB=P33;uchar data dis=Voltage: ;/定义显示数组uchar code dis1=Over! ;uchar m=0,zhbz=0,xsbz=0,play=0;/*/ /* 延时子程序