当前位置: 代码迷 >> 单片机 >> STC89C52 读取AD7810数据异常
  详细解决方案

STC89C52 读取AD7810数据异常

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

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;
学习,学习
------解决方案--------------------
路过,学习,顶。