DS18B20时序研究

       2012年刚学51单片机的时候,玩过DS18B20,忘的差不多了。最近再次用到,记一片流水账,加深理解,以防又忘掉。

1、整体把握

(1)读写数据都是低位先行;

(2)默认12bit,可以配置为9,10,11,12bit,精度0.5,0.25,0.125,0.0625;

(3)符号位S为0,表示正值,符号位s为1表示负值。

2、芯片检测

static uint8_t DS18B20_Check(void)
{
  uint8_t retry=0;
  
  while(DS18B20_DQ_READ()&&retry<200)
  {
    retry++;
    _delay_us(1);
  }
  if(retry>=200)
  {
    return 0;//未检测到设备
  }
  else
  {
    retry=0;
  }
  
  while(!DS18B20_DQ_READ()&&retry<240)
  {
    retry++;
    _delay_us(1);
  }
  
  if(retry>=240)
  {
    return 0;//未检测到设备
  }
  else
  {
    return 1;   //检测到设备
  }
}

3、写数据

(1)所有的写逻辑,都是有主机拉低总线再释放总线开始(总线电平:高->低);

(2)所有的写(写1位)最少持续60us,相邻两个写之间大于1us;

(3)DS18B20在第15us-60us之间采样。

static void DS18B20_Write_Byte(uint8_t dat)
{
    uint8_t j, testb;
    
    for (j=1;j<=8;j++) 
    {
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_LOW(); // Write 1
            _delay_us(2);                            
            DS18B20_DQ_HIGH();
            _delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_LOW(); // Write 0
            _delay_us(60);             
            DS18B20_DQ_HIGH();
            _delay_us(2);                          
        }
    }
}

4、读数据

(1)所有的读逻辑,都是有主机拉低总线再释放总线开始(总线电平:高->低->高);

(2)在主机产生读信号之后(下降沿),15us之内读取DS18B20。

 

static uint8_t DS18B20_Read_Bit(void)
{
  uint8_t dat;
  
  DS18B20_DQ_LOW();
  _delay_us(2);
  DS18B20_DQ_HIGH();
  _delay_us(10);

  if(DS18B20_DQ_READ())
  {
    dat=1;
  }
  else
  {
    dat=0;
  }
  _delay_us(45);
  return dat;
}

static uint8_t DS18B20_Read_Byte(void)
{
   uint8_t i,j,dat;     
   dat=0;
   for (i=1;i<=8;i++) 
   {
      j=DS18B20_Read_Bit();
      dat=(j<<7)|(dat>>1);
   }    
   return dat;
}

5、DS18B20命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值