关于ds18b20读操作的问题

2019-07-18 12:02发布

//*******read************
unsigned char read1820(void)
{
unsigned char i,bi;
unsigned char tmp;
DQ = 1; _nop_(); //准备读;
for(i=0;i<8;i++)
{
DQ=0; //
_nop_(); //主机拉低总线1us;
DQ = 1; //主机释放总线到高电平,从机开始放置数据;
delay_us(2); //延时9us等待数据稳定;
_nop_();
bi=DQ; //总机在12us处读取数据,从最低位开始;
tmp=(tmp>>1)|(bi<<7);//将tmp右移一位然后或上左移七位的bi;


delay_us(30); //延时55us;
DQ = 1; _nop_(); //恢复总线为高电平;
}
return tmp; }
在这里 tmp=(tmp>>1)|(bi<<7);中不是很理解 假如ds18b20要发送原始数据为01011101的温度值 那么在它放在总线上的数据顺序应该是反过来的10111010 那么通过怎么操作结束后返回的值tmp又为01011101啊? 请各位大神详细说明下 谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。