2.2.6 8位A/D转换芯片ADC0809
1.ADC0809的结构和功能
ADC0809是8位、逐次逼近式、可转换8路、输出引脚电平与TTL电路兼容的模/数转换器,其基准电压可以有多种接法,一般不需要调零和增益校准,典型时钟频率为640kHz。ADC0809有28个引脚,其原理及结构框图如图2.11所示。
图2.11 ADC0809原理及结构框图
IN0~IN7:8路模拟输入通道。
D0~D7:8位数字量输出端。
START:启动转换命令输入端,由1→0时启动A/D转换,要求信号宽度大于100 ns。
OE:输出使能端,高电平有效。
A、B、C:地址输入线,用于选通8路模拟输入中的一路进入A/D转换。其中,A是LSB位。这3个引脚上所加电平的编码为000~111,分别对应IN0~IN7。例如,当C=0, B=1, A=1时,选中IN3通道。
ALE:地址锁存允许信号。用于将A、B、C这3条地址线送入地址锁存器中。
EOC:转换结束信号输出。转换完成时,EOC的正跳变可用于向CPU申请中断,其高电平也可供CPU查询。
CLK:时钟脉冲输入端。要求时钟频率不高于640kHz。
REF(+)与REF(-):基准电压。与微机接口时,通常REF(-)接0V或-5V, REF(+)接+5V或0V。
2.A/D转换器接口电路设计
在A/D转换器接口硬件设计中,一般需要考虑如下几个问题。
(1)输入模拟电压的连接
A/D的输入模拟电压可分为以下3种。
单端输入:正向信号,把VIN(-)接地,信号加到VIN(+)端;
负向信号:把VIN(+)接地,信号加到VIN(-)端;
差动输入:模拟信号加在VIN(-)端和VIN(+)端之间。
(2)数据输出的方式
A/D转换器数据输出方式有2种:具有可控的三态输出门,数据输出线允许与系统数据总线直接相连;不带三态输出门,数据输出线不允许和系统数据总线直接连接,必须通过I/O通道与CPU交换数据。
(3)片选、启动、读写信号的设置
启动转换信号由CPU发出,有电平启动和脉冲启动2种方式。
片选、读写信号一般由3-8译码器的通道号以及微处理器的、经过适当的逻辑电路来连接。
(4)转换结束信号和转换数据的读取
CPU可采用3种方式读取转换数据:程序查询方式,中断方式,固定的延迟程序方式。
当采用固定的延迟程序方式时,必须预先精确地知道完成一次A/D转换所需的时间。CPU发出启动A/D命令之后,执行一个固定的延迟程序,延迟时间恰好等于或略大于完成一次A/D转换所需的时间,延时到,即可读取数据。对于ADC0809,当工作频率为500kHz时,典型转换时间为125μs。以下是3种方式读取转换数据的程序。
① 延时方式(其接口电路见图2.12):
MOV DPTR, #78FFH MOV R0, #8 MOV R1, #30H NEXT: MOV R2, #25 MOVX @DPTR, A DJNZ R2, $ MOVX A, @DPTR MOV @R1, A INC R1 INC DPH DJNZ R0, NEXT RET
图2.12 延时方式时ADC0809与8051的接口电路
② 查询方式(其接口电路见图2.13):
MOV DPTR, #78FFH MOV R0, #8 NEXT: MOV R1, #30H MOVX @DPTR, A JNB P1.0, $ MOVX A, @DPTR MOV @R1, A INC R1 INC DPH DJNZ R0, NEXT RET
图2.13 查询方式时ADC0809与8051的接口电路
③ 中断方式(其接口电路见图2.14):
ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 100H MAIN: MOV DPTR, #78FFH MOV R1, #30H MOVX @DPTR, A SJMP $ ORG 1000H INT0: MOVX A, @DPTR MOV @R1, A RETI
图2.14 中断方式时ADC0809与8051的接口电路
利用中断方式进行数据采集,可以大大提高CPU的利用率。当然,若A/D转换的时间很短,与系统中断响应时间相当,则采用中断方式的意义就不大了。
3.ADC0808/9与51单片机的接口电路及程序设计
以8051为例,接口电路如图2.15所示。
图2.15 ADC0809与8051的接口电路
采用中断方式读取A/D转化结果的程序如下:
ORG 2000H SETB IT0 ;置INT0为边沿触发 SETB EA ;开放总中断 SETB EX0 ;开放外部中断0 MOV DRTR, #4100H ;设置ADC的A/D口地址 MOV R0, #50H ;设置存储缓冲区指针 MOV R1, #00H ;设置通道初始值 MOV A, R1 MOVX @DRTR, A ;启动A/D转换 ……
中断服务子程序:
ORG 0003H AJMP RDDAT RDDAT:MOVX A, @DRTR ;读转换结果 MOVX @R0, A ;存储到缓冲区 INC R0 ;修改缓冲区指针 INC R1 ;修改通道号(通道号加1) REP: MOV A, R1 CJNE A, #08H, REP1 ;完成8通道采样吗? MOV R1, #00H ;返回主程序 RETI REP1: MOVX @DPTR, A ;启动下一路转换 RETI ;返回主程序