DS18B20温度传感器随笔

DS18B20温度传感器

  • 复位

    时序图如下所示:低电平持续时间为480-960us,高电平持续时间为15-60us,然后低电平持续60-240us。

hong

代码如下:

void ds18b20_rst(void)
{
  IO_OUT;                //输出模式
  DQ_OUT=0;              //拉低DQ引脚
  delay_us(600);         //延时480-960us
  DQ_OUT=1;              //拉高DQ引脚
  while(DQ_OUT);         //等待器件应答(器件拉低),约15-60us后
  while(!DQ_OUT);        //应答脉冲出现后,等待器件拉高,约60-240us后
}
  • 写0操作

    时序图如下所示:

wwwwwwww

代码如下:

void ds18b20_write_zero(void)
{
  IO_OUT;                    //输出模式
  DQ_OUT=0                   //拉低引脚
  delay_us(80);              //延时60-120us
  DQ_OUT=1;                  //拉高引脚
  delay_us(2);
}
  • 写1操作
    在这里插入图片描述

代码如下:

void ds18b20_write_one(void)
{
  IO_OUT;                           //输出模式
  DQ_OUT=0
  delay_us(2);
  DQ_OUT=1;
  delay_us(80);
}
  • 读0、1操作

在这里插入图片描述

代码如下:

unsigned char ds18b20_read_bit(void)
{
  unsigned char data;
  IO_OUT;
  DQ_OUT=0;
  delay_us(2);
  DQ_OUT=1;
  DQ_IN;
  delay_us(2);
  if(DQ_IN)
    data=1;
  else
    data=0;
  delay_us(500);  
  return data;
}
  • 写1字节

代码如下:

void ds18b20_write_byte(unsigned char data)
{
  unsigned char i,testb;
  IO_OUT;
  for(i=0;i<8;i++)
  {
    testb=data&0x01;                 //从低位开始写
    data>>=1;
    if(testb)
      ds18b20_write_one();
    else
      ds18b20_write_zero();
  }
}
  • 读一字节

代码如下:

unsigned char ds18b20_read_byte(void)
{
  unsigned char i,j,data=0;
  for(i=0;i<8;i++)
  {
    j=ds18b20_read_bit();
    data=(j<<7)|(data>>1);      //从低位开始读
  }
  return data;
}
  • 开始读取数据

代码如下:

void ds18b20_start(void)
{                                                                  
   ds18b20_rst();              
   ds18b20_write_byte(0xcc);   // 跳过ROM
   ds18b20_write_byte(0x44);   //温度转换
}
  • 初始化

代码如下:

unsigned char ds18b20_init(void)
{
  gpio_init();     //此引脚需根据相应的单片机进行配置
  ds18b20_rst();
} 
  • .读取温度

代码如下:

short get_tempetature(void)
{
  unsigned char TL,TH;
   short tem;
   ds18b20_start();           //开始转换
   delay_ms(700);             //等待转换完成
   ds18b20_init();    
   ds18b20_write_byte(0xcc);   //跳过ROM
   ds18b20_write_byte(0xbe);   //读取暂存寄存器    
   TL=ds18b20_read_byte();     //低八位 
   TH=ds18b20_read_Byte();     //高八位,注意前五位为符号位只有全为0的时候温度是正的     
   tem=TH;                      //获得高八位
   tem<<=8;   
   tem+=TL;                     //获得底八位
   return tem;    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值