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
文章评论(0条评论)
登录后参与讨论