ADC0809模数转换程序及详解

模数转换器最重要的参数是转换的精度,通常用输出的数字信号的位数的多少表示。转换器能够准确输出的数字信号的位数越多,表示转换器能够分辨输入信号的能力越强,转换器的性能也就越好。
a/d 转换一般要经过采样、保持、量化及编有些过程是合并进码4 个过程。在实际电路中,如采样和保持,量化和编码在转换过程中行的,是同时实现的。 而adc0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行a/d转换。
adc0809主要特性: 1)8路8位a/d转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单个+5v电源供电
5)模拟输入电压范围0~+5v,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mw。
adc0809内部结构
adc0809是cmos单片型逐次逼近式a/d转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型d/a转换器、逐次逼近
adc0809外部特性(引脚功能)
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:地。
adc0809的工作过程是:首先输入3位地址,并使ale=1,将地址存入地址锁存器中。此 地址经译码选通8路模拟输入之一到比较器。start上升沿将逐次逼近寄存器复位。下降沿启动 a/d转换,之后eoc输出信号变低,指示转换正在进行。直到a/d转换完成,eoc变为高电平,指示a/d转换结束,结果数据已存入锁存器,这个信号可 用作中断申请。当oe输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。
值得一提的是,我按照上面电路,把ad的abc三脚共同接接地时,ad0809088始终输出高电平,最后当我把bc共同接地,在程序中给a一个0,则ad0809正常运行,有输出,并且发现当所给的时钟频率越低,最高精度的那位输出越稳定。
adc0809模数转换完整的程序: #include《 reg52.h》
#define uint unsigned int
#define uchar unsigned char
uchar aa,qian,bai,shi,ge;
uint temp;
sbit clock=p2^0;
sbit start=p2^1;
sbit eoc=p2^2;
sbit oe=p2^3;
sbit ale=p2^4;
sbit adda=p2^5;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
//void display(uchar bai,uchar shi,uchar ge);
void delay(uint z);
void main()
{
tmod=0x20; //设置定时器1为工作方式2
th1=0x216; //216
tl1=0x216; //216
ea=1; //开总中断
et1=1; //开t1中断
tr1=1;
start=0; //复位
oe=0; //输出
adda=0;
//eoc=0;
ale=0; //关闭地址选择
while(1)
{
start=0;
///delay(10);
start=1; // 复位
ale=1; // 打开地址选择
adda=0;
///delay(10);
start=0; // 开始转换
ale=0; // 关地址
//delay(1);
while(eoc==0); // 等待eoc变为1
//delay(1);
oe=1; // 打开输出
//delay(1);
//p1=0xff;
temp=p1; // 取p1到p3
oe=0; // 关输出
temp=temp*50;
temp=temp/256;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
p3=0x00;
p0=0xfe;
p3=table[qian];
delay(50);
p3=0x00;
p0=0xfd;
p3=table[bai];
delay(50);
p3=0x00;
p0=0xfb;
p3=table[shi];
delay(50);
p3=0x00;
p0=0xf7;
p3=table[ge];
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x》0;x--)
for(y=1;y》0;y--);
}
void cl() interrupt 3
{
clock=!clock;

芯片设计企业紫光面临债务危机
MATLAB用户在GPU上实现具有GPU计算特色的代码加速
自耦调压器改制环形变压器,Toroidal Transformer
可以满足RF功率测量的对数放大器的设计
NI发布高效LabVIEW 2011
ADC0809模数转换程序及详解
探析机器人离线编程软件的优势和功能及优缺点
低压配电系统接地中,出现断零故障,会有什么危害呢?如何防护?
山东粤海金成功研制出8英寸导电型碳化硅单晶与衬底片
三相电机1kw多少电流 三相电机电流不平衡的原因
高压开关柜为什么要进行无线测温呢?
朗迅科技成功入选教育部第二期供需对接就业育人项目
康耐视In-Sight 2800帮助工厂有效提高产品质量
Polestar与谷歌合作整合安全功能
美国宣布造出名为“顶点”的,运算能力“最强大”的超级计算机
刷脸支付pk二维码支付
AMD推出新版RX 590 GME 将于3月9日正式开卖
京东方或打入三星手机折叠屏供应链
运维常用的34个Linux Shell脚本
学好汽车电源设计,只需要这几步就可以了