向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解//ReadOneChar(void) //向DS18B20读一字节数据{unsigned char i=0; //定义符号变量iunsigned char dat=0; //定义符号变量datfor(i=8;i>0;i--) //8位计数器{DQ=1; //DQ先
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 20:04:16
![向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解//ReadOneChar(void) //向DS18B20读一字节数据{unsigned char i=0; //定义符号变量iunsigned char dat=0; //定义符号变量datfor(i=8;i>0;i--) //8位计数器{DQ=1; //DQ先](/uploads/image/z/8595930-66-0.jpg?t=%E5%90%91DS18B20%E8%AF%BB%E4%B8%80%E5%AD%97%E8%8A%82%E6%95%B0%E6%8D%AE%2Cdat%3E%3E%3D1%3B+if%28DQ%29+dat%7C%3D0x80%3B+%E6%80%8E%E4%B9%88%E7%90%86%E8%A7%A3%2F%2FReadOneChar%28void%29+%2F%2F%E5%90%91DS18B20%E8%AF%BB%E4%B8%80%E5%AD%97%E8%8A%82%E6%95%B0%E6%8D%AE%7Bunsigned+char+i%3D0%3B+%2F%2F%E5%AE%9A%E4%B9%89%E7%AC%A6%E5%8F%B7%E5%8F%98%E9%87%8Fiunsigned+char+dat%3D0%3B+%2F%2F%E5%AE%9A%E4%B9%89%E7%AC%A6%E5%8F%B7%E5%8F%98%E9%87%8Fdatfor%28i%3D8%3Bi%3E0%3Bi--%29+%2F%2F8%E4%BD%8D%E8%AE%A1%E6%95%B0%E5%99%A8%7BDQ%3D1%3B+%2F%2FDQ%E5%85%88)
向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解//ReadOneChar(void) //向DS18B20读一字节数据{unsigned char i=0; //定义符号变量iunsigned char dat=0; //定义符号变量datfor(i=8;i>0;i--) //8位计数器{DQ=1; //DQ先
向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; 也只是读高位啊,那其它位呢?
向DS18B20读一字节数据,dat>>=1; if(DQ) dat|=0x80; 怎么理解//ReadOneChar(void) //向DS18B20读一字节数据{unsigned char i=0; //定义符号变量iunsigned char dat=0; //定义符号变量datfor(i=8;i>0;i--) //8位计数器{DQ=1; //DQ先
DAT向右移一位dat>>=1;
如果DQ=0则高位补0 if(DQ)
否则补一
dat|=0x80