AC-DC/DC-DC转换
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。目前仅在单片机初学应用设计中较为常见。那么ADC0809电压采集程序是怎样?
//*****************************************************************
//ADC0809的clk经分频74LS74接单片机的ALE端,ADC0809的ALE端接ST端,单片机晶振:12M
//STC89C52RC单片机,此时介接入ADC0809的时钟频率为1M,然后不经过分频,直接把单片机的2M
//频率的出自ALE端的时钟信号接入ADC0809也可以正常工作,不过这是将while(!AD0809_EOC);去掉以后
//发现仍然能够正常工作。同时不加任何延时,基准电压大约为4.41v,,测出来的电压和万用表测得电压吻合
//*****************************************************************
#include《reg52.h》
#include《intrins.h》
#define uchar unsigned char
#define uint unsigned int
#define ad0809_data P2
sbit ad0809_stale=P3^2;
sbit ad0809_eoc=P3^3;
sbit ad0809_oe=P3^4;
sbit ad0809_a=P3^5;
sbit ad0809_b=P3^6;
sbit ad0809_c=P3^7;
uchar ad0809_read()
{
uchar tempdata;
ad0809_a=1;
ad0809_b=1;
ad0809_c=1; //选通第八个通道
ad0809_stale=1; //对应ST以及ALE上跳沿,通道地址锁存,AD复位
ad0809_stale=0; //ST下降沿,启动AD转换
//while(!ad0809_eoc); //等带AD转换成功
ad0809_data=0xff;
ad0809_oe=1; //输出容许
tempdata=ad0809_data;
ad0809_oe=0; //输出禁止
return tempdata;
}
uint ad0809_cvt(uchar digdata)
{
uint voltdata;
voltdata=(4.41/255)*digdata*100;
return voltdata;
}
//*****************************************************************
//数码管显示子程序,将一个数num显示到某一位weixuan数码管
//*****************************************************************
void numdis(uchar num,uchar weixuan,uchar brightness )
{
while(brightness--)P0=num*0x10+weixuan*0x01;
P0=0xff;
}
void display(uint addata)
{
numdis(addata%1000/100, 2,20);
numdis(addata%100/10, 1,20);
numdis(addata%10, 0,20);
}
void main()
{
while(1)
{
display(ad0809_cvt(ad0809_read()));
}
}
全部0条评论
快来发表一下你的评论吧 !