单片机的AD转换程序

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

#include
#define uchar unsigned char
#define unit unsigned int
sbit eoc=P3^0;
sbit oe =P3^1;
sbit st =P3^3;

sbit s1=P2^5;
sbit s2=P2^6;
sbit s3=P2^7;

uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};//数码管共阳级显示0~9,不显示

unit ad_0809,ad_data1,ad_data2,ad_data3;
uchar out;

void delaynms(unit x);
void display();
void ad0809();
void key();

void main()
{
EA=1;
EX0=1;
IT0=1;//下降沿触发,cpu内存占用少,如果是低电平触发,cpu将耗大量内存在中断上,长时间的取ad转换数据
while(1)
{ s1=s2=s3=0;/annel 0

P0=0xff;//input
oe=0;
st=0;
st=1;//清0
st=0;//启动

ad_0809=out;
display();

}

}

void EXINTO(void) interrupt 0
{EA=0;
EX0=0;
oe=1;
out=P0;
oe=0;
EA=1;
EX0=1;
}




void delaynms(unit x)
{ while(x-->0)
{
unsigned char k;
for(k=10;k>0;k--);
}
}


void display()
{ //unit a;
ad_data1=(ad_0809*49/25)/100; //the highest bit, 255*49/25=4.99V
ad_data2=(ad_0809*49/25)/10%10;
ad_data3=(ad_0809*49/25)%100%10;


P1=tab[ad_data3];
P2=0x0b;
delaynms(10);
P2=0xff;

P1=tab[ad_data2];
P2=0x0d;
delaynms(10);
P2=0xff;

P1=tab[ad_data1];
P2=0x0e;
P1_7=1; //共阴极的
delaynms(10);//中断方式延时比较短
P2=0xff;



}


模数转换器适用的最高有效工作时钟频率约为3MHz。最高模数转换速度大约可以达到24微妙。工作时钟的脉冲宽度应不小于166纳秒。

当工作时钟CLK3的脉冲宽度调到125纳秒时,不论频率为何值,得到的转换结果都是错误的。

(1)ADC0809内部带有输出锁存器。可以与AT89S51单片机直接相连。

(2)初始化时,使ST和OE信号全为低电平。

(3)送要转换的那一通道的地址到A、B、C端口上。

(4)在ST端给出一个至少有100纳秒的宽的正脉冲信号。

(5)是否转换完毕,根据EOC信号来判断。

(6)当EOC变为高电平时,这时给OE为高电平,转换的数据就会给单片机了<