原创 adc0809中文资料以及与51接口功能电路程序

2010-9-28 14:34 3912 11 11 分类: EDA/ IP/ 设计与制造

adc0809芯片管脚功能介绍如下图,两种形式的封装均有:





  


  


 ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近
寄存器、三态输出锁存器等其它一些电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输出与TTL兼容。



    ADC0809A/D转换芯片引脚功能
  ADC0809芯片有28条引脚,采用双列直插式封装
  IN0~IN7:8路模拟量输入端。
  2-1~2-8:8位数字量输出端。
  ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路.
  ALE:地址锁存允许信号,输入,高电平有效。
  START: A/D转换启动信号,输入,高电平有效。
  EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
  OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
  CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
  REF(+)、REF(-):基准电压。
  Vcc:电源,单一+5V。
  GND:地。





 


       ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。




C

B

A

选择的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

注意:ADC0809应用说明


(1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。


(2)初始化时,使ST和OE信号全为低电平。


(3)送要转换的哪一通道的地址到A,B,C端口上。


(4)在ST端给出一个至少有100ns宽的正脉冲信号。


(5)是否转换完毕,我们根据EOC信号来判断。


(6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。


下面介绍一个ADC0808和单片机接口的c51程序


08与09最大的区别在于输出端与单片机的连接上,为了便于仿真,选择了0808.


仿真图:





 


注:clock的频率为500khz



源代码:




/*精度5v/256=0.0195=0.02*/


#include <regx51.h>


#include <intrins.h>




#define adda P3_4


#define addb P3_5


#define addc P3_6



#define uint unsigned int


#define uchar unsigned char



#define TIMER0_COUNT 0XF05F//4MS中断一次




sbit ST   = 0xb2; //sbit:绝对定址的位元            (bit)变数


sbit OE   = 0xb0; //sbit前不可加static


sbit EOC = 0xb1;




uchar code led_7seg[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};


uchar code position[3] = {0xfd,0xfb,0xf7};


uchar dis_buff[3];


uint ad_data;


uint voltage;


/*数码管显示函数*/


void display(void)


{


     static char posit = 0;



     P2 = 0XFF; //全灭,避免重影/


     P0 = led_7seg[dis_buff[posit]];


    if (posit == 0)


    {


        P0_7 = 1;


    }


   else


   {


       P0_7 = 0;


   }



   P2 = position[posit];



   if (++posit >= 3)


   {


       posit = 0;


   }


}


/*timer0 4ms中断服务函数*/


static void timer0_isr(void) interrupt TF0_VECTOR using 1   //4ms中断一次


{


     TR0 = 0;


     TL0 = (TIMER0_COUNT & 0X00FF);   //低八位的值赋给TL0


     TH0 = (TIMER0_COUNT >> 8);    //高八位的值赋给TH0   TL0,TH0都只有八位


     TR0 = 1;


     display();


}


/*timer0 初始化函数*/


static void timer0_initialize(void)


{


     EA = 0;


    TR0 = 0;


    TMOD &= 0XF0;


    TMOD |= 0X01;


    TL0 = (TIMER0_COUNT & 0X00FF);  


    TH0 = (TIMER0_COUNT >> 8);


    PT0 = 1;


    ET0 = 1;


    TR0 = 1;


    EA = 1;


}


/*电压计算函数*/


void data2voltage()


{


    voltage = ad_data*2; //OutData*0.02*100;256


    dis_buff[0] = voltage/100;


    dis_buff[1] = voltage%100/10;


    dis_buff[2] = voltage%10;



}


void main(void)


{ //0口作为模拟输入口


    adda = 0;


    addb = 0;


    addc = 0;


    timer0_initialize();


    while(1)


    {


        OE = 0;


        ST = 0;


        ST = 1;


        _nop_();//保证足够的上升沿


        ST = 0;


        while(!EOC); //wait conv


        OE = 1;


        ad_data = P1;


        OE = 0;


        data2voltage();


    }


}



 



深圳市威智普电子有限公司


销售热线: 0755-83675696 / 83566110-818


传    真: 0755-83675696


QQ:      41540050


地    址: 深圳市福田区滨河大道9003号湖北大厦北座24楼A2


更多产品信息请登录http://www.wellchips.com

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条