1
电子常识
ADC08098通道8位a/d转换器,ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640KHz时),130μs(时钟为500KHz时)。
4)单个+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。
7)低功耗,约15mW。
ADC0809芯片为28引脚为双列直插式封装,其引脚排列见图9.8。
·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电源。
GND:地。
ADC0809的地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。
表9-1通道选择表
·Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为5V(Vref()=5V,Vref(-)=-5V)
·IN7~IN0——模拟量输入通道
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送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信号即有效,把转换数据送上数据总线,供单片机接受。
/*名称:ADC0809数模转换与显示
说明:ADC0809采样通道3输入的
模拟量,转换后的结果显示在数码管上。
*/
#include《reg51.h》
#defineucharunsignedchar
#defineuintunsignedint
//各数字的数码管段码(共阴)
ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbitCLK=P1^3;//时钟信号
sbitST=P1^2;//启动信号
sbitEOC=P1^1;//转换结束信号
sbitOE=P1^0;//输出使能
//延时
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i《120;i++);
}
//显示转换结果
voidDisplay_Result(uchard)
{
P2=0xf7;第4个数码管显示个位数
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfb;第3个数码管显示十位数
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfd;第2个数码管显示百位数
P0=DSY_CODE[d/100];
DelayMS(5);
}
//主程序
voidmain()
{
TMOD=0x02;//T1工作模式2
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f;//选择ADC0809的通道3(0111)(P1.4~P1.6)
while(1)
{
ST=0;ST=1;ST=0;//启动A/D转换
while(EOC==0);//等待转换完成
OE=1;
Display_Result(P3);
OE=0;
}
}
//T0定时器中断给ADC0808提供时钟信号
voidTimer0_INT()interrupt1
{
CLK=~CLK;
}
全部0条评论
快来发表一下你的评论吧 !