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