Yi.king 发表于 2012-5-17 13:21:11

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


tanguicaicai 发表于 2012-5-17 17:34:33

第一种啊,因为DQ = dat&0x01;
它时0的话那前面本来就是0的啊,只要延时就可以了,如果是1那DQ就是1了啊

tanguicaicai 发表于 2012-5-17 17:35:46

不过要注意延时,
页: [1]
查看完整版本: DS18B20写0和写时序问题