adc0832程序编写
前言
基于C51单片机项目的传感器数据采集,由于传感器是模拟输出,单片机接收传感器需要将模拟信号转换为数字信号才能读取数据,所以需要adc0832模数转换器的程序编写!
提示:以下是本篇文章正文内容,下面案例可供参考
一、ADC0832是什么?
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求
二、执行代码
代码如下:
unsigned char Adc0832(unsigned char channel) //ADת»»£¬·µ»Ø½á¹û
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//ÀµÍCS¶Ë
_nop_();
_nop_();
ADCLK=1;//À¸ßCLK¶Ë
_nop_();
_nop_();
ADCLK=0;//ÀµÍCLK¶Ë,ÐγÉϽµÑØ1
_nop_();
_nop_();
ADCLK=1;//À¸ßCLK¶Ë
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//ÀµÍCLK¶Ë,ÐγÉϽµÑØ2
_nop_();
_nop_();
ADCLK=1;//À¸ßCLK¶Ë
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//ÀµÍCLK¶Ë,ÐγÉϽµÑØ3
ADDI=1;//¿ØÖÆÃüÁî½áÊø
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//ÊÕÊý¾Ý
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
_nop_();
_nop_();
dat<<=1;
// if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//ÊÕÊý¾Ý
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//ÀµÍCS¶Ë
ADCLK=0;//ÀµÍCLK¶Ë
ADDO=1;//À¸ßÊý¾Ý¶Ë,»Øµ½³õʼ״̬
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
总结
adc0832有两个转换通道,可以同时使用,在读取数据之前需要软件拉高拉低两三次时钟线,然后一位一位读取数据,并保存到变量dat中。