作业帮 > 综合 > 作业

向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 06:52:04
向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解
//
ReadOneChar(void) //向DS18B20读一字节数据
{
unsigned char i=0; //定义符号变量i
unsigned char dat=0; //定义符号变量dat
for(i=8;i>0;i--) //8位计数器
{
DQ=1; //DQ先置高
delay(1); // 延时
DQ=0; //发送复位脉冲,主机开始读0时间片
dat>>=1; //复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
DQ=1;
if(DQ)
dat|=0x80; //按位或然后赋值给dat,读取数据最高位为1
delay(4);
}
return(dat);
}
另外dat的数据不是0吗,右移不还是0吗,也就是data不变啊?data的数据和什么寄存器有关吗,是8位还是几位,与DQ有什么关系,如何读取数据,并赋值.还有dat|=0x80; 也只是读高位啊,那其它位呢?
DAT向右移一位dat>>=1;
如果DQ=0则高位补0 if(DQ)
否则补一
dat|=0x80