标题: 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