单片机的应用扩展及编程
八通道模拟量显示器

🏠 首页 《无线电》杂志 2005年 🔗 第8期 🔗 第41页 分类:电脑·单片机·通信 🔗 周兴华 🔗

单片机应用系统在处理输入信号时离不开数据采集,数据采集时的被检测信号有各种类型,如模拟量、频率量、开关量、数字量等。开关量和数字量可由单片机或其扩展接口电路直接得到,模拟量必须靠A/D或V/F实现。本文介绍的“八通道模拟量显示器”以1Hz的速率循环显示八通道输入电压值,也可选择某一通道后(锁定)长期显示。输入的电压范围为0~5V,显示值为0.00~4.99V,精度较高。对软件稍作修改即能用作输出控制量使用。读者通过对八通道模拟量显示器的实际制作调试,可以学会利用单片机进行模拟量采集,进而进行数据处理及输出显示,为设计复杂的工控系统打下基础。

电路概述

电路见图1。主要由AD转换器ADC0809、单片机AT89S51及显示用的数码管等构成。

图1
图1 🔍原图 (850×470)

ADC0809是8位逐次逼近型A/D转换器。带8个模拟量输入通道,芯片内带通道地址译码锁存器,输出带三态数据锁存器,启动信号为脉冲启动方式。C、B、A输入的通道地址在ALE有效时被锁存。启动信号START启动后开始转换,EOC信号在START的下降沿10μs后才变为无效的低电平,这要求查询程序待EOC无效后再开始查询,转换结束后由OE产生信号输出数据。ADC0809的内部结构由两大部分组成:一部分为输入通道,包括8位模拟开关,三条地址线的锁存器和译码器,可以实现8路模拟输入通道的选择;另一部分为一个8位逐次逼近型A/D转换器。图2为ADC0809的引脚排列: IN0~IN7为8个模拟通道输入端,START为启动转换信号,EOC为转换结束信号,OE为输出允许信号,CLOCK为外部时钟脉冲输入端。ADC0809的工作频率范围10kHz~1280kHz,当频率为500kHz时,转换速度为128μs,ALE为地址锁存允许信号,A、B、C为通道地址线,CBA的8种组合状态000~111对应了8个通道选择,VREF(+)、VREF(-)为参考电压输入端,Vcc为+5V电源,GND为接地。

图2
图2 🔍原图 (567×375)

图1中,ADC0809进行模/数转换,而单片机AT89S51则完成将8通道数据转换处理并循环进行显示。ADC0809的启动信号START由单片机片选线P2.7与写信号WR的或非产生,当一条向ADC0809写操作的指令运行后,ADC0809的START脚产生启动脉冲,开始启动ADC0809进行模/数转换。ALE与START相连,即按打入的通道地址接通模拟量输入通道,并启动转换。转换完成后EOC输出高电平。我们可以利用EOC信号通知单片机(查询法或中断法)读入已转换的数据,也可以在启动ADC0809转换后经适当的延时,再读入已转换的数据,允许信号OE由读信号RD与片选线P2.7或非产生。当一条ADC0809的读操作指令运行后,ADC0809的OE脚产生输出允许脉冲,使数据输出。AT89S51的ALE脚输出频率为晶振频率的1/6(1MHz),AT89S51的ALE脚与 ADC0809的CLK脚相连,提供ADC0809的工作时钟。按图1接法,ADC0809的片选地址为7FFFH。输出的数据为:D\(_{out}\)=V\(_{in}\)×255/5=V\(_{in}\)×51 ,其中V\(_{in}\)为输入的模拟电压,D\(_{out}\)为输出数据。

软件设计思路及方案

图1电路可用3种方式完成模拟量采集及显示,即延时等待方式、查询方式和中断方式。下面针对延时等待方式进行解析,其他两种方式的完整程序放在本期配刊光盘内。应注意的是,查询方式与中断方式需利用单片机的P3.1(/INT1),因此需将J1插入插座,连通或非门NOR3的输出端与/INT1,读者可自行分析。

编程思路为:(1)向ADC0809写入通道号并启动转换。(2)延时200μs待ADC0809转换完毕。(3)从ADC0809读取采集到的数据并存入数组。另外为了显示,还需使用定时器T0对4位数码管进行定时扫描刷新。T0的定时长度为2ms,即每2ms扫描点亮一位数码管。数码管的最左位显示通道号,右三位显示该通道的电压值。按动按键SB时,位标志flag取反。当flag为0时,使8个通道的电压以1Hz的速率循环显示。当flag为1时,锁定当前通道进行显示,同时通道号的小数点亮作锁定指示。在图1中,参考电压输入端VREF(+)接+5V、VREF(-)接地,因此在作显示时需对采集的数据进行处理。举例说,当输入模拟量为5V时,输出满度值数据FFH(十进制255)。这个数据乘2后为510,用于显示则数值偏大。因此采用再乘98%的处理方法,这样得到的值为499,将百位数码管的小数点点亮后显示为4.99V,使显示值与输入值基本吻合。

图3为主程序状态流程,读取数据时没有利用EOC信号,而是经过一定的延时(200μs),待ADC0809转换完毕后再读取。

图3
图3 🔍原图 (283×501)

本实例的源程序及程序详解见本期配刊光盘。

文/周兴华