ADC0809程序
ADC0809引脚功能及程序汇总
• 可以作为状态信号由CPU查询; • 可以作为中断请求信号通知CPU。
• (4) CPU在查询式I/O程序或中断服务程序中:
• 执行输入指令(读ADC0809数据端口); • 该指令经地址译码电路产生OE信号, • 0809内三态缓冲器被打开, • 转换结果通过数据总线进入CPU。
ADC0809应用说明
5、 AD转换电路
编程思路
• (1) 向AD0809写入通道号并启动转换 • (2) 延时1ms后等待EOC出现高电平 • (3) 给OE置高并读入转换数据存入数据
地址或数组中。 • (4) 显示、传输、控制
Proteus 的仿真问题
造成较大的误差,需要采取适当的滤波措施。
2、ADC0809通道地址选择表
ADDC ADDB ADDA 000 001 010 011 100 101 110 111
选通的通道 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7
3、ADC0809结构1
启动(高电平脉冲,输入)
start
4、ADC0809转换工作时序
结束 允许输出
1.送地址 2.启动 3.结束 4.允许输出 5.得到数据
ADC0809的工作过程
• (1)ALE信号锁存地址信号ADDA~ADDC。对应 的模拟信号进入0809
• (2) START脉冲(下跳沿)启动A/D转换 • (3) 转换完成后,转换结束信号EOC变为高电
转换的数据就输出给单片机了。
• ADC0809与系统有三种常见的连接方法: • (1) 占用三个I/O端口: • 端口1用来向0809输出模拟通道号并锁存; • 端口2用于启动转换; • 端口3读取转换后的数据结果。 • (2) 占用二个I/O端口: • 端口1输出模拟通道号并锁存,同时启动转换; • 端口2读取转换后的数据结果。 • (3) 通过并行接口芯片(例如8255A)连接。
ADC0809的C语言程序
与51单片机应用程序电路原理图如下:应用程序如下:#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){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; //选择通道IN1delay(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
最佳答案#include<reg51.h>#define uchar unsigned char#define LCM_Data P0#define Busy 0x80 //用于检测LCM状态字中的Busy? sbit RW=P2^1; //定义引脚sbit RS=P2^0;sbit EN=P2^2;sbit int1=P3^3;//定义管脚功能//sbit cs=P3^2; //使能端sbit wr=P3^6; //写端口sbit rd=P3^7; //读端口unsigned char disp[4]={0,0,0,0};unsigned char _adc;void dataproc(unsigned char);void display(unsigned);void delay1ms(char);unsigned char adc0804();unsigned char v='v';unsigned char adc0804( ) //读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; //读出的数据赋与addate//while(1);rd=1;//cs=1; //读数完毕return(addata); //返回最后读出的数据}void dataproc(unsigned char data_in){ int results;results=data_in*196;disp[3]=(results/10000)+0x30;disp[2]=((results/1000)%10)+0x30;disp[1]=((results/100)%10)+0x30;disp[0]=((results/10)%10)+0x30;}/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的,内部函数){unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<100;j++);}void wr_com(unsigned char com)//写指令// (内部函数){ delay1ms(1);RS=0;RW=0;P0=com;EN=1;delay1ms(1);EN=0;}void wr_dat(unsigned char dat)//写数据// (内部函数){ delay1ms(1);;RS=1;RW=0;EN=0;P0=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}void lcd_init()//初始化设置// (外部调用){delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}void main()//主函数{ while(1){_adc= adc0804( ) ;dataproc(_adc);lcd_init();wr_com(0x80);wr_dat(disp[3]);wr_com(0x81);wr_dat(0x2E);wr_com(0x82);wr_dat(disp[2]);wr_com(0x83);wr_dat(disp[1]);wr_com(0x84);wr_dat(disp[0]);wr_com(0x85);wr_dat(v);//while(1);}。
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程序
xsj(table6[n]);
n++;
}
}
else
if(c=w)
{
wz(2,6);
n=0;
while(table9[n]!='\0')
{
xsj(table9[n]);
n++;
}
wz(3,5);
n=0;
while(table10[n]!='\0')
{
xsj(table10[n]);
n++;
}
}
}
}
void main()
{
uchar u;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
u=X+Y;
xzl(u);
}
void init()
{
psb=1;
xzl(0x30);
delay(5);
xzl(0x0c);
/*绥化学院*/
/*作者:金立明用AD0809采集光敏电阻数据并显示在液晶12864上笔者正在做太阳能追光上传一部分程序供大家参考*/
#define uint unsigned int
#define uchar unsigned char
#include<reg52.h>
sbit rs=P3^5;
sbit rw=P3^6;
{
init();
while(1)
{
duan=0;
wei=0;
adc0809的的基本应用实例及程序
ADC0809与DAC0832进行ADDA转换程序使用0809将电压数据采集回来,然后再用DAC0832输出电压。
练习AD,DA的使用。
程序:#include<reg51.h>#include<absacc.h>#define DAC0832 XBYTE[0x7fff] /* 定义DAC0832端口地址*/#define uchar unsigned char#define uint unsigned intsbit ST=P3^0;sbit OE=P3^1;sbit EOC=P3^2;sbit CLK=P3^3;sbit A1=P3^4;sbit A2=P3^5;sbit A3=P3^7;void delay(unsigned int Delay) //Delay(1000)延时一秒{unsigned int q;for(;Delay>0;Delay--){ for(q=0;q<124;q++){;}}}/*void TimeInitial(){TMOD=0x20;TH1=0xff;TL1=0xff;EA=1;ET1=1;TR1=1;}*/uchar adin0(void) //AD0通道转换{uchar getdATa;//TimeInitial();ST=0;OE=0;ST=1;ST=0;A1=0;A2=0;A3=0;while(EOC==0);OE=1;getdA Ta=P1;OE=0;//TR1=0;return(getdATa);}uchar adin1(void) //AD1通道转换{uchar getdA Ta;//TimeInitial();ST=0;OE=0;ST=1;ST=0;A1=1;A2=0;A3=0;while(EOC==0);OE=1;getdA Ta=P0;OE=0;//TR1=0;return(getdATa);}void main(void){uchar dATa0,i;while(1){dA Ta0=adin0();DAC0832=dATa0;}}void time1(void) interrupt 3 using 0 {TH1=0xff;TL1=0xff;CLK=~CLK;}ADC0809 A/D转换程序基本知识ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
ADC0809程序原理及逻辑结构
3)转换时间为100μs(时钟为640KHz时),130μs(时钟为
500KHz时)。
4)单个+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。7)低功耗,约15mW。
ADC0809逻辑结构:
ADC0809是带有8位A/D转换器、8路模拟开关以及微处理机兼容
ADC0809信号引脚:
对ADC0809主要信号引脚的功能说明如下:
IN~ IN一一模拟量输入通道
ALE一一地址锁存允许信号。对应ALE上跳沿,A、B、C地址
状态送入地址锁存器中。
START一一转换启动信号。START上升沿时,复位ADC0809;
START下降沿时启动
芯片,开始进行A/D转换;在A/D转换期间,START应保持低
的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,是目前应用比较
广泛的A/D转换芯片之一,主要适用于对精度和采样速率要求不高的场合或
一般的工业控制领域,可以和单片机直接相连。它具有8个通道的模拟量输
入线,可在程序控制下对任意通道进行A/D转换得到8[1]位二进制数字
量。
ADC0809内部结构图:
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共
用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。地址锁存
与译码电路完成对A、B.C3个地址位进行锁存和译码,其译码输出用于通
道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统
数据总线相连。
ADC0809应用电路原理图:
Vcc-- +5V电源。
模数转换器ADC0809应用原理
精品文档AD0809应用原理--很全面的资料1.0809 的芯片说明:ADC0809是带有 8 位 A/D 转换器、 8 路多路开关以及微处理机兼容的控制逻辑的 CMOS 组件。
它是逐次逼近式 A/D 转换器,可以和单片机直接接口。
(1) ADC0809的内部逻辑结构由上图可知, ADC0809由一个 8 路模拟开关、一个地址锁存与译码器、一个A/D 转换器和一个三态输出锁存器组成。
多路开关可选通8 个模拟通道,允许8 路模拟量分时输入,共用 A/D 转换器进行转换。
三态输出锁器用于锁存A/D 转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
( 2).引脚结构IN0- IN7:8 条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线: 4 条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将 A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B 和 C 为地址输入线,用于选通 IN0-IN7 上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线: 11 条ST 为转换启动信号。
当 ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行 A/ D 转换;在转换期间, ST应保持低电平。
EOC为转换结束信号。
当 EOC为高电平时,表明转换结束;否则,表明正在进行 A/D 转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE= 1,输出转换得到的数据; OE=0,输出数据线呈高阻状态。
D7- D0为数字量输出线。
AD0809详解
们重在实际制做,太罗嗦的内容我就不说了,只讲些跟制做有关的最精炼的知识。
ADC0809是可以将我们要测量的模拟电压信号量转换为数字量从而可以进行存储或显示的一种转换IC。
下面是它的管脚图和逻辑图:管脚功能说明:IN0-IN7:模拟量输入通道。
就是说它可以分时地分别对八个模拟量进行测量转换。
ADDA-C:地址线。
也就是通过这三根地址线的不同编码来选择对哪个模拟量进行测量转换。
ALE:地址锁存允许信号。
在低电平时向ADDA-C写地址,当ALE跳至高电平后ADDA-C上的数据被锁存START:启动转换信号。
当它为上升沿后,将内部寄存器清0。
当它为下降沿后,开始A/D转换。
D0-D7:数据输出口。
转换后的数字数据量就是从这输出给S52的。
OE:输出允许信号,是对D0-D7的输出控制端,OE=0,输出端呈高阻态,OE=1,输出转换得到的数据。
CLOCK:时种信号。
ADC0809内部没有时钟电路,需由外部提供时钟脉冲信号。
一般为500KHzEOC:转换结束状态信号。
EOC=0,正在进行转换。
EOC=1,转换结束,可以进行下一步输出操作REF(+)、REF(-):参考电压。
参考电压用来与输入的模拟量进行比较,作为测量的基准。
一般REF(=)=5v REF(-)=0V。
下面我先给出ADC0809的时序图再说说它的工作过程:它的工作过程是这样的,①在IN0-IN7上可分别接上要测量转换的8路模拟量信号。
有人问了,可不可以只接一路?我就只想测一个模拟信号。
当然可了②将ADDA-ADDC端给上代表选择测量通道的代码。
如000(B)则代表通道0;001(B)代表通道1;111则代表通道7。
③将ALE由低电平置为高电平,从而将ADDA-ADDC送进的通道代码锁存,经译码后被选中的通道的模拟量送给内部转换单元。
④给START一个正脉冲。
当上升沿时,所有内部寄存器清零。
下降沿时,开始进行A/D转换;在转换期间,START保持低电平。
8.4 ADC0809接口电路及程序设计
分频模块(clock)
clock:process(clk) --对系统时钟进行分频,得到ADC0809转 换工作时钟 begin if clk'event and clk='1' then qq<=qq+1; --在clk1的上升沿, 转换至下一状态 if QQ="01111111" THEN clk1<='1'; current_state <=next_state; elsif qq<="01111111" then clk1<='0'; end if; end if; end process; q<=regl; abc_out<=abc_in; end behav;
ADC0809 VHDL采样控制程序设计
ADC0809的工作时序图
START是转换启动信号,一个正脉冲过后A/D开 始转换;ALE是3位通道选择地址(ADDC、 ADDB、ADDA)信号锁存信号。 当模拟量送至某一输入端(如IN-0或IN-1)等, 由3位地址信号选择,而地址信号由ALE锁存。 EOC是转换情况状态信号,当启动转换约100μs 后,EOC产生一个负脉冲,以示转换结束。 在EOC的上升沿后,且输出使能信号ENABLE为 高电平,则控制打开三态缓冲器,把转换好的8 位数据送至数据总线。 至此ADC0809的一次转换结束
FPGA与ADC0809接口电路原理图
ADC0809与FPGA接口电路设计
FPGA_IO1~8接收ADC0809 8位数数据; FPGA_IO9接收ADC0809 转换结束信号EOC; FPGA_IO10~12 为ADC0809提供8路模拟信号开 关的3位地址选通信号(ADD-A~C); FPGA_IO13 为ADC0809提供地址锁存控制信号 ALE:高电平时把三个地址信号送入地址锁存器, 并经译码器得到地址输出,以选择相应的模拟输 入通道;
ADC0809模数转换器的使用详解与程序
值得一提的是,我按照上面电路,把 AD 的 ABC 三脚共同接接地时,AD0809088 始终输 出高电平,最后当我把 BC 共同接地,在程序中给 A 一个 0,则 AD0809 正常运行,有输出, 并且发现当所给的时钟频率越低, 最高精度的那位输出越稳定, 具体参数范围从芯片资料里 有详细介绍,不过十全英文,专业词汇哦。哈哈 现将程序记录如下: 完整的程序从这里下载: /ziliao/file/0809c51x.rar
ADC0809 模数转换器的使用详解与程序
带我们的王老师刚评上硕导了,下学期开始带研究生了。 从他那里了解到每做一次实验或者实践,应该把它用规范的格式记录下来,一来自己可以 日后查看,二来同学间可以相互交流,共通过进步,甚为必要。现将本次实验记录如下。
实验 名称:根据光强控制外围器件的通断。 实验原理;使用 AD 芯片将太阳能电池产生的光生伏打电压转化为数字信号,再通过单片 机处理后,在数码管上显示电压,同时根据设定电压伐值,控制外围器件的通断。 实验所需的设备:51 单片机烧写器一个,电脑一台,数字式示波器一个,数字式万用表一 个
// //
开始转换 关地址//等来自 eoc 变为 1//
打开输出
temp=P1; oe=0; //
//
取 p1 到 p3 关输出
temp=temp*50; temp=temp/256;
qian=temp/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10;
编辑本段转换方法
模数转换器
模数转换过程包括量化和编码。量化是将模拟信号量程分成许多离散量级,并确定输 入信号所属的量级。编码是对每一量级分配唯一的数字码,并确定与输入信号相对应 的代码。最普通的码制是二进制,它有 2n 个量级( n 为位数) , 可依次逐个编号。模 数转换的方法很多,从转换原理来分可分为直接法和间接法两大类。 直接法是直接 将电压转换成数字量。它用数模网络输出的一套基准电压,从高位起逐位与被测电压 反复比较,直到二者达到或接近平衡(见图) 。控制逻辑能实现对分搜索的控制,其 比较方法如同天平称重。先使二进位制数的最高位 Dn-1 = 1 ,经数模转换后得到一个 整个量程一半的模拟电压 VS ,与输入电压 Vin 相比较,若 V in> VS , 则保留这一位;若 V in< V in ,则 Dn-1 = 0 。然后使下一位 Dn -2 = 1, 与上一次的结果一起经数模转换后与 V in 相比较 , 重复这一过程,直到使 D 0 = 1 ,再与 V in 相比较 , 由 V in> VS 还是 V in< V 来 决定是否保留这一位。经过 n 次比较后, n 位寄存器的状态即为转换后的数据。这种 直接逐位比较型(又称反馈比较型)转换器是一种高速的数模转换电路,转换精度很 高,但对干扰的抑制能力较差,常用提高数据放大器性能的方法来弥补。它在计算机
AD0809的工作原理
AD0809的工作原理1. AD0809的芯片说明:ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1)ADC0809的内部逻辑结构由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2).引脚结构IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道000IN0数字量输出及控制线:11条ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。
2.ADC0809应用说明(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
ADC0809的使用
一、程序
#include "reg52.h" //单片机头文件 #include "absacc.h" #include "intrins.h"
#define uchar unsigned char #define uint unsigned int
{
P1=dispcode[temp4];
P17=1;
P34=0;
P35=1;
P36=1;
P37=1; delayms(10); P1=0x00; P1=dispcode[temp3]; P34=1; P35=0; P36=1; P37=1; delayms(10); P1=0x00; P1=dispcode[temp2]; P34=1; P35=1; P36=0; P37=1; delayms(10); P1=0x00; P1=dispcode[temp1]; P34=1; P35=1; P36=1; P37=0; delayms(10); P1=0x00; }
二、电路原理图
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 的 共阴极数码管显示编码表
sbit EOC=P3^3; //AD 转换结束后输出信号端 sbit START=P2^5; //AD 转换启动信号端 sbit OE=P2^6; //AD 转换结果允许输出端 sbit ALE=P2^7; //地址锁存允许端 sbit CLK=P2^4; //AD 转换时钟输入端,一般为 1MHz sbit P34=P3^4; //4 个数码管位选端 sbit P35=P3^5; sbit P36=P3^6; sbit P37=P3^7; sbit P17=P1^7; //数码管的小数点选择端
模数转换ADC0809实验
微机原理与接口实验报告实验名称:模数转换ADC0809实验班级:学号:姓名:指导老师:实验报告要求一.实验目的1.掌握ADC0809接口电路与微机的硬件电路连接方法。
2.掌握A/DADC0809接口电路的程序设计和调试方法。
二.实验仪器1.微型计算机一台。
DVCC-5286JH型微机原理与接口实验系统,排线、导线若干。
三.实验原理1、实验要求本实验采用 ADC0809做A/D 转换实验。
ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。
ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。
ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。
一般在实际应用系统中应该精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。
ADC0809的转换结束信号EOC 未接,如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。
本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、06H、07H。
调节电位器W1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。
用ADC0809做A/D转换,其模拟量与数字量对应关系的典型值为+5V-FFH,2.5V-80H,0V-00H。
2、实验电路原理及连接3、实验程序流程图三.实验源程序CODE SEGMENTASSUME CS:CODE ADPORT E QU 0010hORG 1000HSTART: JMP ADCONTORL ADCONTORL:CALL FORMAT ADCON: MOV AX,00MOV DX,ADPORTOUT DX,ALMOV CX,0500H DELAY: LOOP DELAYMOV DX,ADPORTIN AL,DXCALL CONVERSCALL DISPJMP ADCON CONVERS:MOV AH,ALAND AL,0FHMOV BX,077AHMOV DS:[BX],ALINC BXMOV AL,AHAND AL,0F0HMOV CL,04HSHR AL,CLMOV DS:[BX],ALRETdisp: mov dx,077Fhmov ah,20hdisp0: mov cx,00ffhmov bx,dxmov bl,ds:[bx]mov bh,0hpush dxmov dx,0ff22hmov al,cs:[bx+1060h]OUT DX,ALmov dx,0ff21hmov al,ahOUT DX,ALdisp1: loop disp1pop dxdec dxshr ah,01hjnz disp0mov dx,0ff22hmov al,0ffhOUT DX,ALretdata1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0ah db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfhFORMAT: MOV BX,0MOV WORD PTR DS:[BX+077AH],0000HADD BX,2MOV WORD PTR DS:[BX+077AH],0009HADD BX,2MOV WORD PTR DS:[BX+077AH],0008HRETCODE ENDSEND START四.实验结果分析取一个中间结果:58五.心得体会通过本次实验掌握了ADC0809接口电路与微机的硬件电路连接方法、A/DADC0809接口电路的程序设计和调试方法、加深理解逐次逼近法模数转换器的特征和工作原理以及掌握ADC0809的接口方法,以及A/D输入程序的设计和调试方法。
ADC0809引脚图与程序c语言
CLK——时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号
EOC——转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
出口参数:
****************************************************************************************/
void timer0(void)interrupt 1
{
count++;
if(count==0x0A)
{
count=0x00;
D7~D0——数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高
OE——输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
Vcc—— +5V电源。
Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V, Vref(-)=-5V).
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。地址锁存与译码电路完成对A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit D5=P1 ;
sbit D6=P1;
sbit D7=P1;
ucharad_dat;
/*---------------------------------
函数名:delayus(i)
功能:延时t=(12*i+14)us
参数:i
返回值:无
备注:晶振12MHz
-----------------------------------*/
}
/*---------------------------------
函数名:w_com_1602(uchar com)
功能:写命令
参数:uchar com
返回值:无
-----------------------------------*/
void w_com_1602(uchar com)
{
e=0;
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);
dac0809模数转换
----------------------------------*/
void ADC_0809()
{
ADC_START=1; //上升沿复位
_nop_();
_nop_();
_nop_();
ADC_START=0; //下降沿开始
_nop_();
_nop_();
_nop_();
while(1)
{
w_com_1602(0x80);
ADC_0809();
}
}
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2; //1602io引脚
sbit rw=P2 ;//1602io引脚
sbit e=P2; //1602io引脚
返回值:无
-----------------------------------*/
void init_1602()
{
P0=0xff; //端口初始化
w_com_1602(0x38); //功能设置
w_com_1602(0x0f); //开光标但不闪烁
w_com_1602(0x06); //设置输入方式
/*void delayus(i)
{
for(i;i>0;i--);
}*//*------ Nhomakorabea--------------------------
dac0809初始化
----------------------------------*/
void init0809()
{
ADC_START=0;
ADC_OE =0;
ADC0809程序
/*--------------------------------------------------------------------------------------------
-------
程序说明:adc0809接到51单片机的P1口,P1口接有8个LED,每次转
换结束都可以通过LED观察到转换结果(低电平亮),ADC参考电压与单片机
rs=0;
rw=0;
delayus(2);
P0=com;
e=1;
delayus(2);
e=0;
delayus(2);
}
/*---------------------------------
函数名:w_dat_1602(uchar dat)
功能:写数据
参数:uchar dat
返回值:无
-----------------------------------*/
voidw_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初始化
参数:无
_nop_();
ADC_ALE=0;
_nop_();
_nop_();
_nop_();
ADC_ALE=1; //ALE=1时地址进入锁存器
_nop_();
_nop_();
_nop_();
ADC_ALE=0; //ALE=0时地址被锁存住
_nop_();
_nop_();
_nop_();
}
/*---------------------------------
的电源要一致
通过验证:输入5v则LED全灭
输入0v则LED全亮
通过电位器控制输入0~5v则1602显示输0;
sbit ADC_ALE =P2;
sbit ADC_OE =P2 ;
sbit ADC_EOC =P2;
sbit D0=P1;
sbit D1=P1;
sbit D2=P1 ;
sbit D3=P1;
w_com_1602(0x01); //清屏
delayus(5);
}
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);
/*---------------------------------
函数名:delayusus(i)
功能:延时t=(12*i+14)us
参数:i
返回值:无
备注:晶振12MHz
-----------------------------------*/
void delayus(i)
{
for(i;i>0;i--);