DS18B20

在这里插入图片描述

DS18B20 是单线接口数字温度传感器,测量范围是-55℃~+125℃,-10℃~+85℃范围内精
度是±0.5℃,测量分辨率为 9~12 位(复位值为 12 位,最大转换时间为 750ms)。
DS18B20 包括寄生电源电路、 64 位 ROM 和单线接口电路、暂存器、 EEPROM、 8 位 CRC 生
成器和温度传感器等。寄生电源电路可以实现外部电源供电和单线寄生供电, 64 位 ROM 中存放
的 48 位序列号用于识别同一单线上连接的多个 DS18B20,以实现多点测温。
64 位 ROM 代码的格式为:
8 位 CRC 校验码 + 48 位序列号 + 8 位系列码(0x28)
其中 8 位 CRC 校验码是 48 位序列号和 8 位系列码的 CRC 校验码

代码

官方文件
onewire.c

#include "onewire.h"

//单总线内部延时函数
void Delay_OneWire(unsigned int t)  
{
	while(t--);
}

//单总线写操作
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//单总线读操作
unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

//DS18B20初始化
bit init_ds18b20(void)
{
  	bit initflag = 0;
  	
  	DQ = 1;
  	Delay_OneWire(12);
  	DQ = 0;
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); 
    initflag = DQ;     
  	Delay_OneWire(5);
  
  	return initflag;
}

onewire.h

#ifndef __ONEWIRE_H__
#define __ONEWIRE_H__

#include "reg52.h"
#include "intrins.h"

sbit DQ = P1^4;  //单总线接口

unsigned char Read_DS18B20(void);
bit init_ds18b20(void);
void Write_DS18B20(unsigned char dat);
unsigned int temper_change(void);

#endif

需要自己写一个温度读取函数

//读取温度的集体操作
unsigned int temper_change(void)
{
	 u8 a,b;         
   u16 t=0;
	
   init_ds18b20();       
   Delay_OneWire(15);
   Write_DS18B20(0xcc);   //跳过ROM操作命令
   Write_DS18B20(0x44);     //发送启动温度转换命令
   Delay_OneWire(250);
   init_ds18b20(); 
   Delay_OneWire(15);
   Write_DS18B20(0xcc);   //跳过ROM操作命令
   Write_DS18B20(0xbe);     //发送启动温度转换命令
	
   a=Read_DS18B20();    //先读低八位
   b=Read_DS18B20();      //再读高八位
   t=b<<8;      //左移八位
   t=t|a;      //t为16位的数,使高八位为b的值,低八位为a的值  
   t *= 0.0625*100;
   return t;    //返回温度值
}

在读取温度时需要将中断关闭,读取完毕再打开

EA = 0;
temper_v = temper_change();
EA = 1;
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐