标题:
ADC0809电压采集程序(C语言)
[打印本页]
作者:
hongniu
时间:
2015-6-24 21:15
标题:
ADC0809电压采集程序(C语言)
//*****************************************************************
//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()));
}
}
作者:
朱翠汝
时间:
2017-6-10 17:34
你好 请问如果我单片机的晶振是12M也可以实现AD采集吗 请尽快回复谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1