首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

STC89C52 读取AD7810数据异常

2013-12-22 
STC89C52 读取AD7810数据错误我用AD7810做个数据采集程序,按照数据手册和一些参考资料,编写了读取数据的程

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;
学习,学习
[解决办法]
路过,学习,顶。

热点排行