ADC0809重点总结

发布 2019-08-14 05:07:55 阅读 2584

一、adc0809引脚结构功能说明图:

~28,in0~in7:8路模拟量输入端。

~21,d0~d7:8位数字量输出端。

23~25,adda、addb、addc:3位地址输入线,用于选通8路模拟输入中的一路。

22,ale:地址锁存允许信号,输入,高电平有效,对应ale上跳沿,a、b、c地址状态送入地址锁存器中。

6,start:a/d转换启动信号,输入高电平有效,start上升沿时,复位adc0809;start下降沿时启动芯片,开始进行a/d转换;在a/d转换期间,start应保持低电平。本信号有时简写为st.

7,eoc:a/d转换结束信号,输出,当a/d转换结束时,此端输出一个高电平**换期间一直为低电平)。

9,oe:数据输出允许信号,输入,高电平有效。当a/d转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量,用于控制三态输出锁存器向单片机输出转换得到的数据。

oe=0,输出数据线呈高阻;oe=1,输出转换得到的数据。

10,clk:时钟脉冲输入端。要求时钟频率不高于640khz,eoc=0,正在进行转换;eoc=1,转换结束。

使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。,ref(+)ref(-)基准电压。

11,vcc:电源,单一+5v。

13,gnd:地。

二、adc0809与51单片机的接口电路。

1、说明: d0~d7接51单片机的p2口(p2.0~p2.7)

adin1和adin2为通道in0和in1的电压模拟量输入(0~5v)

应用程序如下:

#include""

#define uchar unsigned char

sbit st=p1^0;

sbit eoc=p1^1;

sbit oe=p1^2;

sbit clk=p1^3;

sbit addcs=p1^4;

uchar ad_data[2];/保存in0和in1经ad转换后的数据。

***延时函数***

void delay(uchar i)

uchar j;

while(i--)

for(j=125;j>0;j--)

***系统初始化***

void init()

ea = 1;//开总中断。

tmod = 0x02;//设定定时器t0工作方式。

th0=216;//利用t0中断产生clk信号。

tl0=216;

tr0=1; /启动定时器t0

et0=1;

st=0;oe=0;

***t0中断服务程序***

void t0(void) interrupt 1 using 0

clk=~clk;

***ad转换函数***

void ad()

st=0;addcs=0;//选择通道in0

delay(10);

st=1;//启动ad转换。

delay(10);

st=0;while(0==eoc);

oe=1;ad_data[0]=p2;

oe=0;st=0;

addcs=1;//选择通道in1

delay(10);

st=1;//启动ad转换。

delay(10);

st=0;while(0==eoc);

oe=1;ad_data[1]=p2;

oe=0;***主函数***

void main()

init();

while(1)

ad();注: 由于adc0809内部不带时钟电路,因此用51单片机的定时器t0来产生时钟信号。

在通道选择时,由于b,c接地,当a(addcs)为低电平时选择in0,a为高电平时选择in1

2、利用单片机at89s51与adc0809设计一个数字电压表,实验任务利用单片机at89s51与adc0809设计一个数字电压表,能够测量0-5v之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。

3. 系统板上硬件连线。

1).把“单片机系统”区域中的p1.0-p1.7与“动态数码显示”区域中的abcdefgh端口用8芯排线连接,数码管段码控制。

2).把“单片机系统”区域中的p2.0-p2.3与“动态数码显示”区域中的s1s2s3s4端口用8芯排线连接,数码管位码控制。

3).把“单片机系统”区域中的p3.0与“模数转换模块”区域中的st端子用导线相连接,转换启动控制。

4).把“单片机系统”区域中的p3.1与“模数转换模块”区域中的oe端子用导线相连接,数据输出控制。

5).把“单片机系统”区域中的p3.2与“模数转换模块”区域中的eoc端子用导线相连接,转换结束标志。

6).把“单片机系统”区域中的p3.3与“模数转换模块”区域中的clk端子用导线相连接,为转换器提供脉冲。

7).把“模数转换模块”区域中的a2a1a0端子用导线连接到“电源模块”区域中的gnd端子上,始终选择in0单通道。

8).把“模数转换模块”区域中的in0端子用导线连接到“三路可调电压模块”区域中的vr1端子上,调节电压变化。

9).把“单片机系统”区域中的p0.0-p0.7用8芯排线连接到“模数转换模块”区域中的d0d1d2d3d4d5d6d7端子上,数字结果输出。

4. 程序设计内容。

i.由于adc0809在进行a/d转换时需要有clk信号,而此时的adc0809的clk是接在at89s51单片机的p3.3端口上,也就是要求从p3.

3输出clk信号供adc0809使用。因此产生clk信号的方法就得用软件来产生了。

ii.由于adc0809的参考电压vref=vcc,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (d/256*vref)

5. c语言源程序。

#include <>

unsigned char code dispbitcode=

unsigned char code dispcode=

unsigned char dispbuf[8]=;

unsigned char dispcount;

unsigned char getdata;

unsigned int temp;

unsigned char i;

sbit st=p3^0;

sbit oe=p3^1;

sbit eoc=p3^2;

sbit clk=p3^3;

void main(void)

st=0;oe=0;

et0=1;

et1=1;

ea=1;tmod=0x12;

th0=216;

tl0=216;

th1=(65536-4000)/256;

tl1=(65536-4000)%256;

tr1=1;

tr0=1;

st=1;st=0;

while(1)

dispbuf[i]=temp;

st=1;st=0;

void t0(void) interrupt 1 using 0

clk=~clk;

void t1(void) interrupt 3 using 0

th1=(65536-4000)/256;

tl1=(65536-4000)%256;

p1=dispcode[dispbuf[dispcount]];显示电压值。

p2=dispbitcode[dispcount];/位码控制。

if(dispcount==7)

dispcount++;

if(dispcount==8)

三、adc0809应用说明。

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

2). 初始化时,使st和oe信号全为低电平。

3). 送要转换的哪一通道的地址到a,b,c端口上。

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

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