ADC0809与51单片机接口电路及应用程序1
- 格式:doc
- 大小:183.50 KB
- 文档页数:5
AD0809在51单片机中的应用文/黄海我们在做一个单片机系统时,常常会遇到这样那样的数据采集,在这些被采集的数据中,大部分可以通过我们的I/O口扩展接口电路直接得到,由于51单片机大部分不带AD转换器,所以模拟量的采集就必须靠A/D或V/F实现。
下现我们就来了解一下AD0809与51单片机的接口及其程序设计。
1、AD0809的逻辑结构ADC0809是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2、AD0809的工作原理IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道0 0 0 IN00 0 1 IN10 1 0 IN20 1 1 IN31 0 0 IN41 0 1 IN51 1 0 IN61 1 1 IN7数字量输出及控制线:11条ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
ADC0809是一种CMOS单片型逐次比较式8路模拟输入、8位数字量输出的A/D转换器。
在多点巡回检测和过程控制、运动控制中应用十分广泛。
1.主要特性如下:1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。
2.外部特性(引脚功能)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输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
单片机与ADC0809的接口电路图。
/*---------------------------------------------------------------------------------------------------程序说明:adc0809接到51单片机的P1口,P1口接有8个LED,每次转换结束都可以通过LED观察到转换结果(低电平亮),ADC参考电压与单片机的电源要一致通过验证:输入5v则LED全灭输入0v则LED全亮通过电位器控制输入0~5v则1602显示输出从0~255逐次增加------------------------------------------------------------------------------------------------------*/#include<reg52.h>#include<intrins.h>#include"1602.c"#define uchar unsigned char#define uint unsigned intsbit ADC_START=P2^0;sbit ADC_ALE =P2^1;sbit ADC_OE =P2^2;sbit ADC_EOC =P2^3;sbit D0=P1^0;sbit D1=P1^1;sbit D2=P1^2;sbit D3=P1^3;sbit D4=P1^4;sbit D5=P1^5;sbit D6=P1^6;sbit D7=P1^7;uchar ad_dat;/*---------------------------------函数名:delayus(i)功能:延时t=(12*i+14)us参数:i返回值:无备注: 晶振12MHz-----------------------------------*//*void delayus(i){for(i;i>0;i--);}*//*---------------------------------dac0809初始化----------------------------------*/void init0809(){ADC_START=0;ADC_OE =0;_nop_();ADC_ALE=0;_nop_();_nop_();_nop_();ADC_ALE=1; //ALE=1时地址进入锁存器_nop_();_nop_();_nop_();ADC_ALE=0; //ALE=0时地址被锁存住_nop_();_nop_();_nop_();}/*---------------------------------dac0809模数转换----------------------------------*/void ADC_0809(){ADC_START=1; //上升沿复位_nop_();_nop_();_nop_();ADC_START=0; //下降沿开始_nop_();_nop_();_nop_();while(!ADC_EOC); //等待转换结束ADC_OE =1;w_dat_1602(0x30+(uchar)D0);w_dat_1602(0x30+(uchar)D1);w_dat_1602(0x30+(uchar)D2);w_dat_1602(0x30+(uchar)D3);w_dat_1602(0x30+(uchar)D4);w_dat_1602(0x30+(uchar)D5);w_dat_1602(0x30+(uchar)D6);w_dat_1602(0x30+(uchar)D7);delayus(5);ADC_OE =0;}void main(){init0809();init_1602();delayus(10);while(1){w_com_1602(0x80);ADC_0809();}}#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P2^4; //1602io引脚sbit rw=P2^5; //1602io引脚sbit e=P2^6; //1602io引脚/*---------------------------------函数名:delayusus(i)功能:延时t=(12*i+14)us参数:i返回值:无备注: 晶振12MHz-----------------------------------*/ void delayus(i){for(i;i>0;i--);}/*---------------------------------函数名:w_com_1602(uchar com) 功能:写命令参数:uchar com返回值:无-----------------------------------*/ void w_com_1602(uchar com) {e=0;rs=0;rw=0;delayus(2);P0=com;e=1;delayus(2);e=0;delayus(2);}/*---------------------------------函数名:w_dat_1602(uchar dat)功能:写数据参数:uchar dat返回值:无-----------------------------------*/void w_dat_1602(uchar dat){e=0;rs=1;rw=0;delayus(2);P0=dat;e=1;delayus(2);e=0;delayus(2);}/*---------------------------------函数名:init_1602()功能:1602初始化参数:无返回值:无-----------------------------------*/void init_1602(){P0=0xff; //端口初始化w_com_1602(0x38); //功能设置w_com_1602(0x0f); //开光标但不闪烁w_com_1602(0x06); //设置输入方式w_com_1602(0x01); //清屏delayus(5);}投标人在《招标投标法实施条例》中应重点关注的19个法律问题《招标投标法实施条例》(以下简称《条例》)日前已公布,将于2012年2月1日起施行。
ADC0809与51单片机接口电路及应用程序最近研究了下ADC0809这个芯片,做了个电路,和大家分享电路原理图如下:500)this.width=500;" border=0>说明:D0~D7接51单片机的P2口(P2.0~P2.7)ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(0~5V)应用程序如下:#include"reg52.h"#define uchar unsigned charsbit 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; //启动定时器T0ET0=1;ST=0;OE=0;}/***********T0中断服务程序************/void t0(void) interrupt 1 using 0{CLK=~CLK;}/***********AD转换函数**********/void AD(){ST=0;ADDCS=0; //选择通道IN0delay(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;}/*****************主函数**************/。
浅谈ADC0809在MCS-51单片机中的作用[摘要] 由于在MCS-51单片机中大部分不带A/D转换器,所以模拟量的采集就必须靠A/D来实现。
因此我们有必要掌握用来采集模拟量的扩展芯片,以及我们要解决MCS-51单片机与这些扩展芯片的接口问题,在这里以ADC0809芯片为例,进行阐述说明。
[关键词] ADC0809 MCS-51 模拟量接口MCS-51系列单片机目前在工业控制以及仪器仪表中的应用越来越广泛,但在应用过程中,避免不了的是要与外围芯片进行对接,这就引出了新的问题,MCS-51单片机如何与外围的芯片有机的结合起来,以扩展其功能。
下面就以ADC0809芯片为例,进行说明。
一、ADC0809概述ADC0809模数转换器,ADC0809是8通道8位CMOS逐次逼近式A/D转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。
图(1)为该芯片的引脚图。
各引脚功能如下:IN0~IN7:八路模拟信号输入端。
ADD-A、ADD-B、ADD-C:三位地址码输入端。
八路模拟信号转换选择由这三个端口控制。
CLOCK:外部时钟输入端(小于1MHz)。
D0~D7:数字量输出端。
OE:A/D转换结果输出允许控制端。
当OE为高电平时,允许A/D转换结果从D0~D7端输出。
ALE:地址锁存允许信号输入端。
八路模拟通道地址由A、B、C输入,在ALE信号有效时将该八路地址锁存。
START:启动A/D转换信号输入端。
当START端输入一个正脉冲时,将进行A/D转换。
EOC:A/D转换结束信号输出端。
当A/D转换结束后,EOC输出高电平。
Vref(+)、Vref(-):正负基准电压输入端。
基准正电压的典型值为+5V。
VCC和GND:芯片的电源端和地端。
二、ADC0809的逻辑结构ADC0809 是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成,ADC0809内部逻辑结构如图(2)所示。
第9章 数/模与模/数转换接口设计 193║9.2.1 ADC0809的使用1.ADC0809的功能与结构ADC0809是8位逐次逼近型A/D 转换器,具有8个模拟量输入通道,并带有通道地址译码锁存器,输出配有三态数据锁存器。
ADC0809采用脉冲启动方式,每一通道的转换时间大约为100μs 。
ADC0809由两大部分组成,一部分是输入通道,包括8位模拟开关,3条地址线的锁存器和译码器,可以实现8路模拟输入通道的选择。
另一部分是一个逐次逼近型A /D 转换器。
ADC0809的芯片引脚如图9.6所示。
ADC0809各引脚的功能如下。
• IN0~IN7:8个模拟通道输入端。
• START :启动转换信号。
• EOC :转换结束信号。
• OE :输出允许信号。
信号由CPU 读信号和片选信号组合产生。
• CLOCK :外部时钟脉冲输入端,典型值为640K 。
• ALE :地址锁存允许信号。
• A 、B 、C :通道地址线,CBA 的8种组合状态000~111对应8个通道的选择,并在ALE 有效时才被锁存。
• V REF+、V REF-:参考电压输入端。
• V CC :接+5V 电源。
• GND :接电源地。
ADC0809工作的过程是:先由通道地址线选择要采样的通道,然后发出启动信号START 启动转换,由于EOC 信号在START 下降沿之后才会变为低电平,所以在读取采样值前,必须对EOC 的状态进行判定。
地址码与模拟通道的关系如下。
地 址 码模 拟 通 道CB A 01111 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN72.ADC0809的接口设计图9.7是ADC0809与8031的接口电路,电路中0809的启动信号START 是由片选线P2.7图9.6 ADC0809芯片引脚。
目录摘要 (1)1、方案设计 (4)2、硬件电路的设计 (4)2.1单片机的最小系统设计 (4)2.2 ADC0809模数转换器设计电路 (5)2.2.1 ADC0809的结构功能 (5)2.2.2 ADC0809的工作时序 (8)2.2.3 ADC0809与AT89C52单片机的接口电路 (9)2.3 LCD1602显示电路 (10)2.4 键盘与单片机连接电路 (12)2.5系统整体电路图 (12)3、软件设计 (13)4、系统仿真和测试结果 (14)5、性能分析 (15)6、心得与体会 (16)7、参考文献 (16)附录一:源程序 (16)附录二:本科生能力拓展训练成绩评定表 (22)毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
adc0809中文资料以及与51接口功能电路程序adc0809芯片管脚功能介绍如下图,两种形式的封装均有:ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。
因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。
输入输出与TTL兼容。
ADC0809A/D转换芯片引脚功能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:地。
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
注意:ADC0809应用说明(3)送要转换的哪一通道的地址到A,B,C端口上。
(4)在ST端给出一个至少有100ns宽的正脉冲信号。
(5)是否转换完毕,我们根据EOC信号来判断。
(6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
下面介绍一个ADC0808和单片机接口的c51程序08与09最大的区别在于输出端与单片机的连接上,为了便于仿真,选择了0808.仿真图:注:clock的频率为500khz源代码:/*精度5v/256=0.0195=0.02*/#include <regx51.h>#include <intrins.h>#define adda P3_4#define addb P3_5#define addc P3_6#define uint unsigned int#define uchar unsigned char#define TIMER0_COUNT 0XF05F//4MS中断一次sbit ST = 0xb2; //sbit:绝对定址的位元(bit)变数sbit OE = 0xb0; //sbit前不可加staticsbit EOC = 0xb1;uchar code led_7seg[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x 7F,0x6F};uchar code position[3] = {0xfd,0xfb,0xf7};uchar dis_buff[3];uint ad_data;uint voltage;/*数码管显示函数*/void display(void){static char posit = 0;P2 = 0XFF; //全灭,避免重影/P0 = led_7seg[dis_buff[posit]];if (posit == 0){P0_7 = 1;}else{P0_7 = 0;}P2 = position[posit];if (++posit >= 3){posit = 0;}}/*timer0 4ms中断服务函数*/static void timer0_isr(void) interrupt TF0_VECTOR using 1 //4ms中断一次{TR0 = 0;TL0 = (TIMER0_COUNT & 0X00FF); //低八位的值赋给TL0TH0 = (TIMER0_COUNT >> 8); //高八位的值赋给TH0 TL0,TH0都只有八位TR0 = 1;display();}/*timer0 初始化函数*/static void timer0_initialize(void){EA = 0;TR0 = 0;TMOD &= 0XF0;TMOD |= 0X01;TL0 = (TIMER0_COUNT & 0X00FF);TH0 = (TIMER0_COUNT >> 8);PT0 = 1;ET0 = 1;TR0 = 1;EA = 1;}/*电压计算函数*/void data2voltage(){voltage = ad_data*2; //OutData*0.02*100;256 dis_buff[0] = voltage/100;dis_buff[1] = voltage%100/10;dis_buff[2] = voltage%10;}void main(void){ //0口作为模拟输入口adda = 0;addb = 0;addc = 0;timer0_initialize();while(1){OE = 0;ST = 0;ST = 1;_nop_();//保证足够的上升沿ST = 0;while(!EOC); //wait convOE = 1;ad_data = P1;OE = 0;data2voltage();}}仿真结果:。
说明:D0~D7接51单片机的P2口(P2.0~P2.7)ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(0~5V)应用程序如下:#include"reg52.h"#define uchar unsigned charsbit 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; //启动定时器T0ET0=1;ST=0;OE=0;}/***********T0中断服务程序************/ void t0(void) interrupt 1 using 0{CLK=~CLK;}/***********AD转换函数**********/void AD(){ST=0;ADDCS=0; //选择通道IN0delay(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来产生时钟信号。
利用51单片机与ADC0809和数码管设计数字电压表一、课题功能描述:利用单片机AT89C51 芯片与ADC0809 芯片设计一个数字电压表,能够测量0―5V 之间的直流电压,三位数码显示。
二、程序设计本实验采用AT89C51 单片机芯片配合 ADC0809 模/数转换芯片构成一个简易的数字电压表,原理电路如图1-1 所示。
该电路通过 ADC0809 芯片采样输入口AI0 输入的0~5V 的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7 传送给 AT89C51 芯片的F0口。
AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1 口传送给数码管。
同时它还通过其三位 I/O 口 P3.0、P3.1、P3.2 产生位片选信号,控制数码管的亮灭。
另外,AT89C51 还控制着 ADC0809 的工作。
其ALE管脚为 ADC0809提供了 1MHZ 工作的时钟脉冲;P2.3 控制 ADC0809 的地址锁存端(ALE); P2.4 控制 ADC0809 的启动端(START); P2.5 控制 ADC0809 的输出允许端(OE); P3.7 控制 ADC0809 的转换结束信号(EOC)。
电路原理图如下:三、器件清单:1 . AT89S51 芯片 1块2 . ADC0809 芯片 1块3 . 74HC245 芯片 1块4 . 数码管 1个5 . 6MHZ 晶振 1个6 . 30pF 电容 2个7 . 10uF 电解电容 1个8 . 复位电容 1个9 . 510Ω电阻 8个10. 10KΩ电阻 1个11. 导线若干四、程序设计1、主程序设计由于ADC0809 在进行A/D转换时需要有CKL 信号,而此时的 ADC0809 的CLK 是连接在 AT89C51 单片机的30管脚,也就是要求从30管脚输出CLK 信号供图1-2主程序流程图ADC0809 使用。
ADC0809 电路图成品程序2008年08月17日星期日 21:13我为了这个ADC0809已经痛苦了好几天了,今天终于成功了。
算是一个里程碑了。
为了纪念它,把东西发上来。
电路图PCB图实物图程序#include<reg51.h>#include<intrins.h>sbit CLOCK=P2^7;sbit OE=P2^6;sbit START=P2^5;unsigned char _data;void init(){SM0=0; //SM01组合代表8位uart方式,波特率可变SM1=1;REN=1; //允许串行接受TH1=0xF3; //波特率2400,误差0.12%TL1=0XF3;TMOD=0X20; //定时器1工作于8位自动重载模式, 用于产生波特率EA=1; //总开关中断方式ET1=0; //定时器1 不允许中断ES=1; //允许串口中断TR1=1; //计时器启动控制位START=0;OE=0;}void wait(unsigned char time) //产生时钟{unsigned char i,j;for(i=0;i<time;i++)for(j=0;j<125;j++){CLOCK=0;_nop_();_nop_();_nop_();_nop_();_nop_(); CLOCK=1;_nop_();_nop_();_nop_();_nop_();_nop_();} }void get()//获取数据{START=1;wait(10);START=0;wait(10);wait(10);OE=1;_data=P0;OE=0;START=0;}void show()//发送到串口与led灯{P1=_data;TI=0;SBUF=_data;while(!TI);TI=0;}void main(){unsigned char i;int j=0;init();//初始化while(1){P2=0;j=0;for(i=0;i<10;i++)//测10次后显示{get();//获得数据j+=_data;}_data=j/10;show();//发送数据。
目录引言 (1)1 ADC0809的逻辑结构 (1)1.1 ADC0809引脚结构 (1)1.2 ADC0809的主要性能指标 (3)1.3 ADC0809的内部逻辑结构 (3)1.4 ADC0809的时序 (4)2 ADC0809与MCS-51单片机的接口电路 (5)2.1 0809与51单片机的第一种连接方式 (7)2.2 0809与51单片机的第二种连接方式 (9)2.3 0809与51单片机的第三种连接方式 (10)3 ADC0809与单片机制作的数字电压表 (11)总结 (16)参考文献 (16)英文翻译 (17)ADC0809芯片的原理及应用摘要:ADC0809是8位逐次逼近型A/D转换器,是目前应用比较广泛、典型的A/D转换芯片之一。
本文主要介绍ADC0809芯片的内部逻辑结构、引脚分布,并详细阐述了其工作原理。
在此基础上设计了两种相关应用电路——ADC0809与单片机的接口电路及数字电压表,并对这两种应用电路的可行性进行了讨论。
通过对ADC0809应用电路的探究,能更全面的提高对应用系统的分析、设计能力,对实践具有重要的指导意义。
关键词:ADC0809;模数转换;单片机引言A/D转换器是模拟信号源与计算机或其它数字系统之间联系的桥梁,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机等数字系统进行处理、存储、控制和显示。
在工业控制和数据采集及许多其它领域中,A/D转换器是不可缺少的重要组成部分,它的应用已经相当普遍。
目前用软件的方法虽然可以实现高精度的A/D转换,但占用CPU时间长,限制了应用。
8位A/D转换器ADC0809作为典型的A/D转换芯片,具有转换速度快、价格低廉及与微型计算机接口简便等一系列优点,目前在8位单片机系统中得到了广泛的应用。
1 ADC0809的逻辑结构ADC0809是带有8位A/D转换器、8路模拟开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,是目前应用比较广泛的A/D转换芯片之一,主要适用于对精度和采样速率要求不高的场合或一般的工业控制领域,可以和单片机直接相连。
目录1.题目设计要求 (2)2. 系统的组成及工作原理 (2)2.1电路原理图 (2)2.2 A/D转换原理 (3)2.3数据处理原理 (3)2.4器件列表 (3)3. 器件的功能和作用 (4)3.1AT89C51功能介绍 (4)3.1.1AT89C51的简单概述 (4)3.1.2AT89C51的引脚介绍 (4)3.2AD0809功能介绍 (6)3.3 LED数码管功能介绍 (6)4.系统硬件设计 (7)5. 系统软件设计 (8)5.1 程序流程图 (8)5.2程序代码 (10)6.系统仿真调试 (13)6.1仿真原理图设计 (13)6.2 与程序代码链接 (13)6.2.1运用keil uVision4生成.hex文件并链接 (13)6.3 仿真运行结果 (15)7.心得体会 (15)8.参考文献 (16)1.题目设计要求要求:利用51单片机+8位数码管+AD0809设计数字直流电压表系统,精度为0.01V。
完成以下设计环节:1)使用Altium Desinger或Protel99SE开发工具,设计电路原理图与PCB制板图。
2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。
3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。
2.系统的组成及工作原理2.1电路原理图图2.1 电路原理图2.2 A/D转换原理模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。
但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。
A/D转换器的工作原理:采用逐次逼近法,逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。
逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。
ADC0809与51单片机接口电路及应用程序
说明:D0~D7接51单片机的P2口(P2.0~P2.7)
ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(0~5V)
应用程序如下:
#include"reg52.h"
#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。