DS18B20写0和写时序问题

2020-02-05 09:22发布

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++;
  }
}
}
了不知道那个事正确理解?要是按照使用手册应该是第二种使用正确
为什么好多写成第一种方式,该怎么解释第一种呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。