求助 利用C写的单片机控制AD芯片的程序

不好意思忘写芯片了,单片机是51系列的.其实不用精确到某一特定的AD芯片,只要有个大体就行了.我自己再改改. 我是菜鸟,请各位大侠不吝指教,感激万分!!!!!!!!!!!!!

模数转换(adc0832)C驱动
adc0832的C代码驱动模块为:unsigned int Adc0832(unsigned char channel)

下面为完整的调试程序,proteus仿真通过:

#include <intrins.h>
#include <REG51.H>

#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char

sbit ADCS =P1^3; //ADC0832 chip seclect
sbit ADDI =P1^1; //ADC0832 data in
sbit ADDO =P1^1; //ADC0832 data out
sbit ADCLK =P1^0; //ADC0832 clock signal

unsigned int Adc0832(unsigned char channel);

/************
读ADC0832函数
************/

//采集并返回
unsigned int Adc0832(unsigned char channel)
{
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 data
}int main(void)
{
while(1)
P3=Adc0832(0);
}
欢迎访问我的博客: http://hi.baidu.com/jgh110/blog/item/cfa4880afe71983ab1351db7.html
以前做过,简单,(*^__^*) 嘻嘻……

参考资料:http://hi.baidu.com/jgh110/blog/item/cfa4880afe71983ab1351db7.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-31
为甚不用带AD的单片机呢?比如STC12C5410AD单片机,属于51系列的,内部有10位的ADC,不好吗?
第2个回答  2020-04-19
这AD芯片太多了,你想用的芯片是什么型号的,这么问,可没办法写什么程序,还与具体电路有关。
第3个回答  2009-03-30
什么芯片都不说啊
第4个回答  2009-03-30
什么芯片都不说啊
相似回答