adc0804c语言程序,ADC0804芯片在模数转换电路中的应用研究

【摘 要】本文论述了ADC0804芯片在模数转换电路中的软硬件设计方法。制作了ADC0804的数据采集电路,并将其挂载于单片机系统,通过驱动发光二极管点亮的方式验证了电路设计的正确性,并给出了电路图和完整的C语言源程序代码。

【关键词】ADC0804;单片机;模数转换

0.引言

模数转换(A/D)的作用是将连续的模拟量通过取样转换成离散的数字量,在电路设计中使用非常广泛,比如图像、电压、电流等模拟量的数字化。A/D芯片的功能就是完成模数转换功能,A/D芯片有很多种,本文以ADC0804为例,详细阐述A/D转换电路的软硬件设计方法。

1.ADC0804芯片介绍

ADC0804属于逐次比较型A/D转换器,采用CMOS制造工艺,20个引脚,8位分辨率,输入的模拟电压范围为0-5V,典型转换时间为100us。其芯片内部含有三态型数据输出锁存器,可直接挂在单片机的数据总线上。

2.电路连接图

电路连接图如上图1所示,主要包括AT89S52单片机、ADC0804和8个发光二极管。单片机的31管脚接高电平,作用是使得单片机上电后从内部ROM中开始执行程序。下面着重阐述ADC0804芯片外围电路的设计及其相应管脚与单片机的接法。ADC0804的第20管脚接5V,用于对其本身供电,10脚为电源地。第11--18管脚为转换后的数字信号输出端,分别与单片机的P1.7-P1.0连接,并同时分别接至8个发光二极管(LED1―LED8)的阳极。接发光二极管的作用是通过观察其亮灭状态的变化来直观地测试电路设计及程序编写的正确性,详情将在后文给出。1脚CS为片选端,接至单片机P3.5脚,低电平有效,一旦CS有效,则ADC0804即刻就做好了开始工作的准备。2脚RD为读信号输入端,接至单片机P3.7脚,低电平有效。3脚WR为写信号输入端,接至单片机P3.6脚,低电平有效,一旦WR有效,则即刻启动A/D转换。19脚CLKR为内部时钟发生器的外接电阻端,通过10K电阻和150pf电容组成RC振荡电路,该振荡电路输出的振荡信号接至4脚CLKIN,作为ADC0804的时钟脉冲,脉冲频率大小为1/(1.1R*C),电容若选择过大会影响转换速率。5脚INTR为中断信号输出端,当其输出低电平时,表明一次A/D转换结束,提示控制器做相应的处理,本文未采用中断方式,故该脚悬空。6脚VIN+和7脚VIN-组成一对模拟差分信号输入端。其中6脚VIN+通过一个10K限流电阻接至一个可调电阻,通过调节该可调电阻的大小,可以获得大小介于0―5V之间的电压,由于7脚VIN-接地,所以该电压即为ADC0804的模拟输入电压。ADC0804的任务就是要将该模拟电压转换成8位的数字量,范围是0x00―0xFF。9脚VREF/2为参考电压输入端,该参考电压大小为2.5V,通过2个1K电阻对5V电压进行分压得到[1]。

图1 电路连接图

3.ADC0804时序分析

3.1 ADC0804启动转换时序分析

图2 ADC0804启动转换时序图

根据ADC0804的启动转换时序图(图2)可知,ADC0804启动转换需经过以下一系列过程:首先将CS清零,即将CS变为低电平,稍微延时后将WR由高电平变为低电平,再稍微延时后将WR变为高电平,此时A/D转换正式启动。经过1―8个A/D转换时间周期,模数转换完成,转换结果被自动存入至内部锁存器中。同时,INTR中断输出端变为低电平,告知单片机本次A/D转换结束,单片机接着以读的方式将数据取出做后续处理。

3.2 ADC0804读数据时序分析

根据ADC0804的读数据时序图(图3)可知,ADC0804读数据操作需经过以下一系列过程:首先将CS清零,即将CS变为低电平,稍微延时后将RD由高电平变为低电平,经过Tacc时间后,数字信号输出端上的数据(A/D转换之后的数字信号)得以稳定下来。此时单片机才可以读走数字信号输出端上的数据,之后将RD拉为高电平[2]。

图3.ADC0804读数据时序图

4.ADC0804模数转换测试程序

本文编写了一个完整的ADC0804模数转换测试程序,如下所示,并逐行给出程序功能注释,程序编写严格遵从上述ADC0804启动转换时序和读数据时序。其功能是通过调节图1中的可调电阻R2,获得不同的电压,该电压作为ADC0804的模拟输入量,经过ADC0804转换为8位数字量,分别驱动8位发光二极管。不同的电压被转换为不同的数字量,从而使得8位发光二极管的亮灭情况也不同。观察到这种现象,说明本文模数转换电路设计正确。

#include//头包含

sbit CS=P3^5;//定义片选端

sbit WR=P3^6;//定义写信号端口

sbit RD=P3^7;//定义读信号端口

void delay(unsigned int z)//定义延时函数

{

unsigned int i,j;

for(i=z;i>0;i--)

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

}

void main(void)

{

CS=0;//将片选端置0,ADC0804芯片生效

while(1)

{

WR=1;

WR=0;

WR=1;//启动ADC0804模数转换

delay(10);//延时,等待转换完成

RD=0;

delay(5);

RD=1;

delay(5); //为下一次转换做准备

}

}

5.结束语

本文采用8051单片机作为控制器,设计了基于ADC0804的模数转换电路,论述了ADC0804的工作原理,给出了完整的测试程序,并加以注释。通过测试,该电路工作正常,为今后在电路设计领域中进一步开展研究打下了良好基础。

参考文献:

[1]蓝和慧,宁武,闫晓金.全国大学生电子设计竞赛单片机应用技能精解[M].北京:电子工业出版社,2010-01.

[2]ADC0804芯片手册[DB/OL],1997-08.

作者简介:

徐锦钢(1983-),男,江西高安人,硕士研究生,讲师,研究方向:自动化装置软硬件研制。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值