读书人

STC89C52 读取AD7810数据异常

发布时间: 2013-12-22 15:06:55 作者: rapoo

STC89C52 读取AD7810数据错误
我用AD7810做个数据采集程序,按照数据手册和一些参考资料,编写了读取数据的程序,可是读出来不合适,请帮我看看是什么地方的原因。
单片机:STC89C52
晶振频率:11.0952M
打算用低功耗模式来采集
电路如下:
STC89C52 读取AD7810数据异常
C程序如下:


//初始化
……
AD7810_CONVEST=0;
AD7810_CLK=0;
……

//AD转换
unsigned int GetAD7810()
{
unsigned int buf=0;
unsigned char i=0;
AD7810_CONVEST=1;
AD7810_CONVEST=0;
_nop_();
_nop_();
_nop_();
for(i=0;i<10;i++)
{
AD7810_CLK=1;
_nop_();
_nop_();
_nop_();
buf=(buf<<1)|AD7810_D0;
_nop_();
_nop_();
_nop_();
AD7810_CLK=0;
_nop_();
_nop_();
_nop_();
}
return buf;
}

[解决办法]
用逻辑仪帮助就很大,
[解决办法]
X宝盗版二十来块
[解决办法]
//AD转换
unsigned int GetAD7810()
{
unsigned int buf=0;
unsigned char i=0;
AD7810_CLK=0; //一开始赋0
AD7810_CONVEST=1;
_nop_();
_nop_();
_nop_(); //这里,需要延时,考虑延时更长一点
AD7810_CONVEST=0;
_nop_();
_nop_();
_nop_(); //考虑延时更长一点
for(i=0;i<10;i++)
{
AD7810_CLK=1;
_nop_();
_nop_();
_nop_();
buf=(buf<<1)
[解决办法]
AD7810_D0;
_nop_();
_nop_();
_nop_();
AD7810_CLK=0;
_nop_();
_nop_();
_nop_();
}
return buf;
}

[解决办法]

上面的有问题。

//AD转换
unsigned int GetAD7810()
{
unsigned int buf=0;
unsigned char i=0;
AD7810_CLK=0; //一开始赋0
AD7810_CONVEST=1;
_nop_();
_nop_();
_nop_(); //这里,需要延时,考虑延时更长一点
AD7810_CONVEST=0;
_nop_();
_nop_();
_nop_(); //考虑延时更长一点
AD7810_CONVEST=1; //这里需抬电平
_nop_();
_nop_();
_nop_(); //考虑延时更长一点
for(i=0;i<10;i++)
{
AD7810_CLK=1;
_nop_();
_nop_();
_nop_();
buf=(buf<<1)
[解决办法]
AD7810_D0;
_nop_();
_nop_();
_nop_();
AD7810_CLK=0;
_nop_();
_nop_();
_nop_();
}
return buf;
}

[解决办法]
引用:
问题解决了,数据采集程序没有问题,是在初始化时,数据输入端没有初始化为1;需要加一条:
AD7810_D01;
学习,学习
[解决办法]
路过,学习,顶。

读书人网 >单片机

热点推荐