数摸转换 ADC0804 的应用.doc
九数摸转换 ADC0804 的应用实验任务从 ADC0804 的通道 IN+输入 05V 之间的模拟量,通过 ADC0804 转换成数字量在数码管上以十进制形成显示出来。硬件电路图注意:上图未显示全的是四个共阴极数码管。实验原理ADC0804 是 8 位全 MOS 中速 A/D 转换器、它是逐次逼近式 A/D 转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为100us。ADC0804转换时序是:当CS0许可进行A/D转换。WR由低到高时,A/D开始转换,一次转换一共需要6673个时钟周期。CS与WR同时有效时启动A/D转换,转换结束产生 INTR 信号(低电平有效),可供查询或者中断信号。在 CS和RD的控制下可以读取数据结果。C语言源程序#include <reg52.h>code unsigned char seg7code10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /显示段码sbit int1=P33; /定义管脚功能sbit cs=P32;sbit wr=P36;sbit rd=P37;void Delay(unsigned int tc) /显示延时程序while( tc != 0 )unsigned int i;for(i=0; i<100; i+);tc-;unsigned char adc0804( void ) /读AD0804 子程序 unsigned char addata,i;rd=1;wr=1;int1=1; /读ADC0804 前准备P1=0xff; /P1全部置一准备cs=0;wr=0;wr=1; /启动ADC0804 开始测电压while(int1=1); /查询等待A/D转换完毕产生的INT(低电平有效)信号rd=0; /开始读转换后数据i=i; i=i; /无意义语句,用于延时等待ADC0804 读数完毕addata=P1;/读出的数据赋与addaterd=1;cs=1;/读数完毕return(addata);/ 返回最后读出的数据unsigned int datpro(void)/ADC0804 读出的数据处理 unsigned char x;unsigned int dianyah,dianyal; /用于存储读出数据的高字节和低字节unsigned int dianya=0; /存储最后处理完的结果 注意数据类型for(x=0;x<10;x+) /将10 次测得的结果存储在dianya 中dianya=adc0804()+dianya; dianya=dianya/10; /求平均值dianyah=dianya&0xf0; /屏蔽低四位dianyah=dianyah>>4; /右移四位 取出高四位dianyal=dianya&0x0f; /屏蔽高四位 取出低四位dianya=dianyal*20+dianyah*320; /最后的结果是一个四位数,便于显示return(dianya);/返回最后处理结果void Led() unsigned int date;date=datpro(); /调用数据处理最后结果P2=P2&0xef;P0=seg7codedate/1000|0x80; /输出个位数和小数点Delay(8); P2=P2|0xf0; P2=P2&0xdf;P0=seg7codedate%1000/100; /输出小数点后第一位Delay(8); P2=P2|0xf0; P2=P2&0xbf;P0=seg7codedate%100/10; /输出小数点后第二位Delay(8); P2=P2|0xf0; P2=P2&0x7f;P0=seg7codedate%10; /输出小数点后第三位Delay(8); P2=P2|0xf0;main()while(1)Led( ); /只需调用显示函数ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。 (1)ADC0809的内部逻辑结构 由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。 (2) 引脚结构 IN0IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择表如下表所示。CBA选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(),VREF()为参考电压输入。 2 ADC0809应用说明 (1) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2) 初始化时,使ST和OE信号全为低电平。 (3) 送要转换的哪一通道的地址到A,B,C端口上。 (4) 在ST端给出一个至少有100ns宽的正脉冲信号。 (5) 是否转换完毕,我们根据EOC信号来判断。 (6) 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。电路原理图: adc0809内部结构图: