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

  • 14
  • 0
  • 约2.87千字
  • 约 8页
  • 2021-07-24 发布于湖北
  • 举报

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

adc0809中文资料以及与51接口功能电路程序 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

文档评论(0)

1亿VIP精品文档

相关文档