ADC0809程序

合集下载

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语言程序

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

程序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程序

/*---------------------------------------------------------------------------------------------------程序说明: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程序

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的的基本应用实例及程序

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程序原理及逻辑结构

ADC0809程序原理及逻辑结构
2)具有转换起停控制端。
3)转换时间为100&mu;s(时钟为640KHz时),130&mu;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应用原理

模数转换器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为数字量输出线。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit D4=P1;
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--);
相关文档
最新文档