关于数据移位问题

2019-07-15 10:34发布

小弟51单片机初学者,最近写了个DS18B20的测温程序,结果在向感温管发送指令时发现了个奇怪的问题,请各位大神瞧瞧咋回事。代码如下:
void Ds18b20WriteByte(uchar dat)  //向DS18B20写字节函数
{
        uchar i;  //无符号字符型
        for(i=0;i<8;i++)
        {
                DS18B20_DQ=0; //感温管数据线拉低电平
                _nop_(); _nop_();


//                DS18B20_DQ=(dat>>i) & (0x01);  //代码A:用这句来向感温器传递数据,程序下载到单片后无法正常工作
           

                DS18B20_DQ=dat & 0x01;        //代码B:把代码A替换为这一句,并加上下面的 “dat>>1”;就可以正常工作
                delay9us(5);   //此处再延时61us
                DS18B20_DQ=1;  


                dat>>=1; //代码B:这一句加上上面的 “DS18B20_DQ=dat & 0x01”,可正常工作;


                _nop_();_nop_();
        }

}



在debug对代码A、B分别进行跟踪调试,发现两种代码发送给DS18B20_DQ的内容是一样的,但代码A下载后就只显示个-000.05,无法正常工作,代码B就正常显示实际温度。鼓捣了半天了也没搞明白。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。