ADC0809基本认识.docx

上传人:b****6 文档编号:6264654 上传时间:2023-01-04 格式:DOCX 页数:10 大小:111.22KB
下载 相关 举报
ADC0809基本认识.docx_第1页
第1页 / 共10页
ADC0809基本认识.docx_第2页
第2页 / 共10页
ADC0809基本认识.docx_第3页
第3页 / 共10页
ADC0809基本认识.docx_第4页
第4页 / 共10页
ADC0809基本认识.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

ADC0809基本认识.docx

《ADC0809基本认识.docx》由会员分享,可在线阅读,更多相关《ADC0809基本认识.docx(10页珍藏版)》请在冰豆网上搜索。

ADC0809基本认识.docx

ADC0809基本认识

ADC0809引脚图与接口电路

作者:

    来源:

本站原创    点击数:

   更新时间:

2007年07月29日   

 

A/D转换器芯片ADC0809简介8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。

图9.8《ADC0809引脚图》

1.ADC0809的内部结构

ADC0809的内部逻辑结构图如图9-7所示。

图9.7《ADC0809内部逻辑结构》

图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。

地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。

表9-1通道选择表

2.信号引脚

ADC0809芯片为28引脚为双列直插式封装,其引脚排列见图9.8。

对ADC0809主要信号引脚的功能说明如下:

IN7~IN0——模拟量输入通道

ALE——地址锁存允许信号。

对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。

START——转换启动信号。

START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。

本信号有时简写为ST.

A、B、C——地址线。

通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。

其地址状态与通道对应关系见表9-1。

CLK——时钟信号。

ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。

通常使用频率为500KHz的时钟信号

EOC——转换结束信号。

EOC=0,正在进行转换;EOC=1,转换结束。

使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。

D7~D0——数据输出线。

为三态缓冲输出形式,可以和单片机的数据线直接相连。

D0为最低位,D7为最高

OE——输出允许信号。

用于控制三态输出锁存器向单片机输出转换得到的数据。

OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。

Vcc——+5V电源。

Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。

其典型值为+5V(Vref(+)=+5V,Vref(-)=-5V).

9.2.2MCS-51单片机与ADC0809的接口

ADC0809与MCS-51单片机的连接如图9.10所示。

电路连接主要涉及两个问题。

一是8路模拟信号通道的选择,二是A/D转换完成后转换数据的传送。

1.8路模拟通道选择

图9.10ADC0809与MCS-51的连接

如图9.11所示模拟通道选择信号A、B、C分别接最低三位地址A0、A1、A2即(P0.0、P0.1、P0.2),而地址锁存允许信号ALE由P2.0控制,则8路模拟通道的地址为0FEF8H~0FEFFH.此外,通道地址选择以

作写选通信号,这一部分电路连接如图9.12所示。

图9.11ADC0809的部分信号连接

图9.12信号的时间配合

从图中可以看到,把ALE信号与START信号接在一起了,这样连接使得在信号的前沿写入(锁存)通道地址,紧接着在其后沿就启动转换。

图9.19是有关信号的时间配合示意图。

启动A/D转换只需要一条MOVX指令。

在此之前,要将P2.0清零并将最低三位与所选择的通道好像对应的口地址送入数据指针DPTR中。

例如要选择IN0通道时,可采用如下两条指令,即可启动A/D转换:

MOVDPTR,#FE00H;送入0809的口地址

MOVX@DPTR,A;启动A/D转换(IN0)

注意:

此处的A与A/D转换无关,可为任意值。

2.转换数据的传送

A/D转换后得到的数据应及时传送给单片机进行处理。

数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。

为此可采用下述三种方式。

(1)定时传送方式

对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。

例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。

可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。

(2)查询方式

A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。

因此可以用查询方式,测试EOC的状态,即可却只转换是否完成,并接着进行数据传送。

(3)中断方式

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。

不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。

首先送出口地址并以

信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

不管使用上述那种方式,只要一旦确认转换结束,便可通过指令进行数据传送。

所用的指令为MOVX读指令,仍以图9-17所示为例,则有

MOVDPTR,#FE00H

MOVXA,@DPTR

该指令在送出有效口地址的同时,发出

有效信号,使0809的输出允许信号OE有

效,从而打开三态门输出,是转换后的数据通过数据总线送入A累加器中。

这里需要说明的示,ADC0809的三个地址端A、B、C即可如前所述与地址线相连,也可与数据线相连,例如与D0~D2相连。

这是启动A/D转换的指令与上述类似,只不过A的内容不能为任意数,而必须和所选输入通道号IN0~IN7相一致。

例如当A、B、C分别与D0、D1、D2相连时,启动IN7的A/D转换指令如下:

MOVDPTR,#FE00H;送入0809的口地址

MOVA,#07H;D2D1D0=111选择IN7通道

MOVX@DPTR,A;启动A/D转换

9.2.3A/D转换应用举例

设有一个8路模拟量输入的巡回监测系统,采样数据依次存放在外部RAM0A0H~0A7H单元中,按图9.10所示的接口电路,ADC0809的8个通道地址为0FEF8H~0FEFFH.其数据采样的初始化程序和中断服务程序(假定只采样一次)如下:

初始化程序:

MOV

R0,#0A0H

;数据存储区首地址

MOV

R2,#08H

;8路计数器

SETB

IT1

;边沿触发方式

SETB

EA

;中断允许

SETB

EX1

;允许外部中断1中断

MOV

DPTR,#0FEF8H

;D/A转换器地址

LOOP:

MOVX

@DPTR,A

;启动A/D转换

HERE:

SJMP

HERE

;等待中断

中断服务程序:

DJNZ

R2,ADEND

 

MOVX

A,@DPTR

;数据采样

MOVX

@R0,A

;存数

INC

DPTR

;指向下一模拟通道

INC

R0

;指向数据存储器下一单元

MOVX

@DPTR,A

 

ADEND:

RETI

ADC0809

ADC0809是单片机教材上常常用到的模数转换芯片,它有8个模拟输入通道,每次可选其中一路,转换成8位二进制数。

在PROTEUS仿真环境中,ADC0809并没有仿真功能(也许是版本的问题),仿真必须使用ADC0808。

这两个芯片在PROTEUS中的图形可见下图:

从图中可以看到,这两块芯片仅仅有少数引脚的标注字母不同,而对应的功能是完全相同的。

用ADC0808,按照0809要求的时序进行仿真,完全可以仿真出ADC0809的效果。

一般的教材中,一提到ADC0809,往往都要讲:

用D触发器对ALE分频来提供CLK。

实际上,为ADC0809提供CLK脉冲,完全可以利用单片机闲置的引脚,大可不必另外使用硬件。

有些人,也认识到了这个问题,他们采用了单片机定时器中断来输出脉冲,省掉了硬件D触发器。

其实,用定时器,还是很浪费的。

完全使用软件,也可以达到输出周期性脉冲的目的。

做而论道注意到:

  在单片机软件中,基本上都要编写延时函数。

  在延时函数中实现输出CLK脉冲,就可以既不用外接硬件,也不占用单片机本身的硬件资源,同样也达到了延时目的,可谓一举多得。

  这个做法,在目前所见到各种书籍、各个网文中,还没有人提到!

  这个做法,可说是做而论道的独创。

  呵呵,颇为自豪。

下面就是利用ADC0808仿真ADC0809的画面:

图中右边的拨动开关用于选择模拟通道,选好的通道号码将在数码显示器的最高位显示。

图中左边,可以输入8路模拟信号,但是限于幅面,仅仅画出了一路,读者可自行加入另外的7路。

图中下方是一个频率计,测量出CLK的频率约有50KHz,在这个频率下,ADC0809大约用10ms即可进行一次转换,速度足够快了。

适当修改延时函数达到参数,输出CLK的频率还可以高出很多。

C语言程序如下:

#include

//---------------------------------------------------

sbitALE=P3^3;

sbitOE =P3^4;

sbitEOC=P3^5;

sbitSTA=P3^6;

sbitCLK=P3^7;

//---------------------------------------------------

unsignedint num;              //AD转换后的数字量

char ch;                       //通道号码

//---------------------------------------------------

void delay(unsignedintz)     //延时函数

{

   unsignedint x,y;

   for(x=z;x>0;x--) for(y=110;y>0;y--) CLK=~CLK;

}  //在延时函数中,给ADC0809送去CLK,也算是做而论道的一个独创吧!

//---------------------------------------------------

void display(void)

{

   charcodetable[]={                             //共阴段码

     0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0~7

     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//8~F

   P0=0;P2=0xf7;P0=table[ch];             delay

(2);//通道号码

   P0=0;P2=0xfb;P0=table[num/100]+128;delay

(2);//百位加上小数点

   P0=0;P2=0xfd;P0=table[num%100/10]; delay

(2);//十位

   P0=0;P2=0xfe;P0=table[num%10];       delay

(2);//个位

   P0=0;                                           //关闭显示器

}

//---------------------------------------------------

voidmain(void)

{

   while

(1){                  //无穷循环

     ch=P2/32;             //取来通道号码

     P3=ch+0xf8;           //送给ADC0809

     ALE=1; ALE=0;        //地址锁存

     STA=1; STA=0;        //开始转换,稍候,才可读EOC

     display();                //显示,既做延时,又输出CLK

     while(EOC==0) display();//等待转换结束

     num=P1;                 //取出转换结果

     num=num*100/51;     //比例变换:

255-->500

   }

}

//---------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1