并行输出A/D芯片ADC0809接口技术
(一)ADC0809概述
ADC0809是采用CMOS工艺制成的8位逐次逼近式A/D转换器,可实现对8路模拟信号分时进行A/D转换,转换时间约为100μs。其内部具备三态锁存输出,因而输出数字量可直接与单片机I/O口相连。其功耗较低,约为15m W,可用单一电源供电,此时模拟电压输入范围为0~5V,无需调零和满刻度调整。
1.ADC0809引脚功能
ADC0809芯片为28引脚DIP封装,其引脚排列如图7-26(a)所示。
对ADC0809主要信号引脚的功能说明如下:
图7-26 ADC0809结构
(1)IN7~IN0:模拟量输入通道。ADC0809对输入模拟量的要求主要有:信号单极性,电压范围与参考电压有关,若信号过小还需进行放大。另外,在A/D转换过程中,模拟量输入值不应变化太快,因此对变化速度快的模拟量,在输入前应增加采样保持电路。
(2)ADDA、ADDB、ADDC(以下简称A、B、C):地址线。A为低位地址,C为高位地址,用于对模拟通道进行选择,其地址状态与通道相对应关系见表7-6。
表7-6 通道选择表
(3)ALE:地址锁存允许信号。ALE上跳沿时,A、B、C地址状态送入地址锁存器中,并经译码器得到地址输出,以选择相应的模拟输入通道。
(4)START:转换启动信号。
(5)D7~D0:数据输出线,为三态缓冲输出形式,可以和单片机的数据线直接相连。
(6)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。
(7)CLK:时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500k Hz的时钟信号,最高允许值为640k Hz。
(8)EOC:转换结束状态信号。EOC=0,正在进行转换;EOC变成高电平,转换结束。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。
(9)VCC:电源电压。由于是CMOS芯片,允许的电压范围较宽,可以是+5~+15V。
(10)VREF:参考电源。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值VREF+=+5V,VREF-=0V。
2.ADC0809内部逻辑结构
ADC0809内部逻辑结构如图7-26(b)所示。图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个ADC进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存和译码,其译码输出用于通道选择,见表7-6。
3.ADC0809的工作时序
ADC0809的时序如图7-27所示。在ALE=1期间,模拟开关的地址(A、B和C)存入地址锁存器;ALE下降沿时地址被锁存。输入启动信号START的上升沿复位ADC0809,下降沿启动A/D转换。EOC为输出的转换结束信号,正在转换时为0,转换结束后为1。OE为输出允许控制端,在转换完成后用来打开输出三态门,以便ADC0809输出转换结果。
图7-27 ADC0809的时序图
tWS—最小启动脉宽,典型值为100ns,最大值为200ns;tWE—最小ALE脉宽,典型值为100ns,最大值为200ns;tD—模拟开关延时,典型值为1μs,最大值为2.5μs;tC—转换时间,当fclk=640k Hz时,典型值为100μs,最大值为116μs;tEOC—转换结束延时,最大值为8个时钟周期+2μs
(二)ADC0809与89C51单片机接口
图7-28和图7-29为ADC0809与89C51的接口电路图,其中图7-28为89C51采用软件延时法等待ADC0809转换结束,图7-29为89C51采用中断方式读取A/D转换结果。
1.地址线与数据线的连接
ADC0809的内部输出电路有三态缓冲器,所以其8位输出数据线可以直接和89C51的P0口相连。通道地址选择信号ADDA~ADDC可连接至地址线或数据线(图7-28和图7-29中连接至地址线A0、A1和A2)。
图7-28 ADC0809与89C51连接图
图7-29 ADC0809与89C51中断方式连接图
2.时钟信号的连接
ADC0809必须外接时钟。图7-28和图7-29电路中借用89C51的ALE输出信号。若89C51晶振频率太高,则需对ALE输出脉冲进行分频。如晶振采用12MHz时,ALE频率为2MHz,经4分频后为500k Hz,才能与ADC0809的CLK时钟端相连。
3.控制信号的连接
由于ADC0809的ALE和START均为正脉冲有效,而且基本同步,所以可由89C51的P2.7和或非而成。同理,OE信号也可以由89C51的P2.7和
或非而成。
4.ADC0809的编程步骤
(1)初始化。用来设置ADC0809的IN0~IN7通道地址,并设置存放转换结果的首单元地址和通道数。
(2)启动ADC0809。先送通道号地址到ADDA~ADDC,由ALE锁存通道号地址;再让START有效启动A/D转换,若采用图7-28和图7-29接口电路,执行一条“MOVX@DPTR,A”指令,即可使ALE、START有效,锁存通道号并启动A/D转换。
(3)判断A/D转换是否结束。单片机要知道ADC0809转换是否结束,可通过三种方式:延时等待、查询和中断。
(4)读转换结果。A/D转换完成后,89C51执行“MOVX A,@DPTR”指令产生信号,使OE端有效,打开锁存器三态门,8位数据就读入到单片机中。
5.ADC0809转换结束的判断方法
(1)软件延时法。指用软件延时等待一次A/D转换结束。延时时间取决于通过计算和调试而获得的ADC完成一次转换所需要的时间。
【例7-1】采用延时等待A/D转换结束方式,分别对8路模拟信号轮流采样一次,并依次把结果存入数据存储器。由图7-28可知,ADC0809作为外扩的并行I/O口,由P2.7和同时有效来启动A/D转换。通道选择端A、B、C分别与地址线A0、A1、A2相连,因此可判断ADC0809八个模拟通道地址为7FF8 H~7FFFH。程序中,DELAY为延时110μs的子程序,可采用循环程序完成。
(2)中断法。利用EOC作为向89C51申请中断的信号。在主程序中启动A/D转换,当A/D转换结束后,EOC向CPU发出中断请求,若中断被响应,CPU在中断服务程序中读取转换结果。
ADC0809与89C51中断方式连接图接口电路如图7-29所示。A/D转换结束信号EOC经反相后接89C51的外部中断1引脚。
【例7-2】采集8路模拟量,并存入20H地址开始的内部RAM中。
程序如下:
(3)查询法。将EOC接至89C51的某个端口的I/O口线。启动A/D转换后,程序不断查询该I/O口线的状态,当引脚信号产生上升沿时读取转换结果。在图7-29中,只要将EOC接89C51的某一I/O口线(如P1.0),CPU在程序中不断去查询该I/O口线的状态,即可判断ADC0809转换是否结束,如果结束,则读取转换结果,否则,继续查询。