51单片机DS18b02 的驱动程序求解释下,程序在下面,为什么程序中DQ=1了;再判断不是DQ肯定是1吗?求高手!

2024-12-27 00:07:27
推荐回答(2个)
回答1:

unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续读8个二进制位数据
{
dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位
if(DATA==1) //如果读出的数据是1
dat|=0x80; //将1取出,写在dat的最高位
SCLK=1; //将SCLK置于高电平,为下降沿读出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}

回答2:

仔细看DS18B02的时序说明,DQ=1,这是主机释放DQ,使从机能够将DQ拉低或拉高来传输1bit,就是说DQ = 1是主机释放,然后if(DQ)value |= 0x80:是接收从机传输的1bit的数据