DS18B20测温模块原理及应用(一)

文章详细介绍了DS18B20传感器的机构、功能,以及与51单片机的交互过程,包括64位ROM、暂存器、EEPROM的操作逻辑,初始化、读写时序,以及温度测量精度、CRC校验、报警功能等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、机构及功能的介绍

选自王云著《51单片机》
选自王云著《51单片机》

二、64位ROM、暂存器、EEPROM

在这里插入图片描述

三、DS18B20操作逻辑

在这里插入图片描述

四、初始化、读、写时序.

  1. 单总线初始化时序

选自王云著《51单片机》

/*****初始化DS18B20*****/
unsigned char DS18B20—_init(void)
{
  unsigned char x=0;
  DQ = 1;      //DQ复位
  delay(8);    //稍做延时
  DQ = 0;      //单片机将DQ拉低
  delay(80);   //精确延时,480us-960us,
  DQ = 1;      //拉高总线
  delay(8);     //精确延时,16us-80us  丛从机等待时间
  x = DQ;      //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  delay(4);
  return x;
}
  1. 写入时序
    选自王云著《51单片机》
void DS18B20_write_char(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
	delay(4);
    DQ = 1;
    dat>>=1;
  }
  delay(4);
}

3、读出时序
选自王云著《51单片机》

//写一个字节到DS18B20    时序包含在函数内,写入一个字节
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
	DS18B20_IO_OUT();	//SET PG11 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;	// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;	// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}
————————————————

五、重难点

     **以下问题为51单片机学习过程中发现的,个人觉得比较偏,目前以系统性学习为主,待STM32单片机学习再深入:**
  1. 测量温度范围宽,测量精度高。DS18B20的测量范围为-55~+125℃。在-10~+85℃范围内,精度为±0.5℃。分辨率可编程,DS18B20的测量分辨率可由用户通过程序设定9~12位。其中9~12位对应的温度分辨率分别为0.5℃、0.25℃、0.125℃和0.0625℃。
    .以上为资料上内容,个人认为分辨率为读书精度,以上±0.5为实际DS18B20温度精度 8位CRC:由CRC发生器产生,作为2、
  2. ROM中的前56位编码的校验码。
    (猜测可能性大)个人理解为此CRC码可由暂存器第8byte设置。(很不靠谱猜测,目前找到的搜索匹配程序不可行,理论上可以为搜索DS18B20提供便利,匹配低8位家族码,再跳过中间48位,再匹配最高的8位CRC码,单个工程中的元器件有限,地址完全够用)。
  3. 报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。
    报警的状态表现,怎么定位到那一个报警,报警触发条件等
  4. 启动温度转换,代码为44H,用于启动DS18B20进行温度测量,执行温度转换命令后DS18B20保持等待状态。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又忙于温度转换的话,DS18B20将在总线上输出“0”;若温度转换完成,则输出“1”。
    转换温度应该是当执行该命令后,DS18B20将温度数据转换到暂存器中,而不是此命令开始后时刻转换待主机读取。转换开启以后,需要等一会(理论上720us的最大转换时间)再进行读取或其他操作
  5. 读电源,代码为B4H,用于将DS18B20的供电方式信号发送到主机。若在这条命令发出之后发出读时间隙,DS18B20将返回它的供电方式,“0”为寄生电源,“1”为外部电源。
    此状态下,0/1怎么读取,函数怎么写等需要具体了解。初始化,64位ROM匹配或跳过,写入该指令,再判断IO的值
  6. 搜索ROM函数、匹配ROM函数、读出ROM函数需要了解并独立写出。

**//*下一章会将相关程序列出来,尽量自己写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值