单片机的AD转换程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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纳秒。