ad7705读取数据的程序为什麽不行?

2020-02-05 08:47发布

/* 从AD7705读一个字 */  
uint ReadWord7705()  
{
    uchar i;  
    uint x ;  
    AdClk=1;  
    for(i=0;i<16;i++)
    {
        AdClk=0;
        x<<=1;
        Wait7705(AD_CLK_WIDTH);         
        if(AdDout)  
        x|=0x01;  
        AdClk=1;  
        Wait7705(AD_CLK_WIDTH);
        
    }  
    return x;
}
这样的程序不行。实际采到的数据的最高位改为1了。就是如果数据是0X0123,变成0X8123了。
/* 从AD7705读一个字 */  
uint ReadWord7705()  
{
    uchar i;  
    uint x ;  
    AdClk=1;  
    for(i=0;i<16;i++)
    {
        AdClk=0;  
        Wait7705(AD_CLK_WIDTH);         
        if(AdDout)  
        x|=0x01;  
        AdClk=1;  
        Wait7705(AD_CLK_WIDTH);
        x<<=1;
    }  
    return x;
}
这样是正常的,
搞不明白。向大家请教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
jqfsjt
1楼-- · 2020-02-05 12:56
主要是   x<<=1;  的位置一个是在前面(不正常),一个是在后面(正常)。
理论上分析是一样的,但是结果是不一样的。
keepflying
2楼-- · 2020-02-05 13:06
回复【1楼】jqfsjt
-----------------------------------------------------------------------

楼主最后搞出来没有?
jqfsjt
3楼-- · 2020-02-05 14:18
////////////////////////////////
//从AD7705读一个字
uint ReadWord7705()  
{
   uchar i;  
   uint x ;  
   AdClk=1;  
   for(i=0;i<16;i++)
    {
       AdClk=0;         
       if(AdDout)
         x++;     
       // x|=0x01;      //X++ 和X|=0X01 的效果是一样的
       AdClk=1;  
       x<<=1;
    }  
   AdClk=1;
   AdDin=1;
   return x;
}
studydev
4楼-- · 2020-02-05 19:23
 精彩回答 2  元偷偷看……

一周热门 更多>