计算机控制技术(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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                         ;返回主程序