DS18B20写0和写时序问题
DS18B20写0和写1应该是两个不同过程为什么有程序写:
/*************ds18b20写一个字节****************/
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/***************************************/
有的写成:
//写数据的一个字节,满足写1和写0的时隙要求
void WrByte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp = b&0x01;
b = b>>1;
if (btmp)
{
//写1
DQ = 0;
i++;i++; // 延时,使得15us以内拉高
DQ = 1;
i = 8;
while(i>0) i--; // 整个写1时隙不低于60us
}
else
{
//写0
DQ = 0;
i = 8;
while(i>0) i--; // 保持低在60us到120us之间
DQ = 1;
i++;
i++;
}
}
}
了不知道那个事正确理解?要是按照使用手册应该是第二种使用正确
为什么好多写成第一种方式,该怎么解释第一种呢?
第一种啊,因为DQ = dat&0x01;
它时0的话那前面本来就是0的啊,只要延时就可以了,如果是1那DQ就是1了啊 不过要注意延时,
页:
[1]