当前位置:首页 > 单片机 > 单片机
[导读]简单介绍下DS18B20,它是独特的单线接口,仅需一个端口进行通讯9~12位的分辨率可调(RS)测温范围为-55°C~+125°C;测量范围在-10°C ~+85°C精度为±0.5°C可设置报警温度存储于EEPROM,掉电保护数据不丢适用电压3~5

简单介绍下DS18B20,它是独特的单线接口,仅需一个端口进行通讯9~12位的分辨率可调(RS)测温范围为-55°C~+125°C;测量范围在-10°C ~+85°C精度为±0.5°C可设置报警温度存储于EEPROM,掉电保护数据不丢适用电压3~5.5V

下面介绍我封装好的函数,已经测试可以使用,需要注意的是PORTReadBits,需要根据实际端口相应地移位


DS18B20.H:

#ifndef _DS18B20_H_

#define _DS18B20_H_

#include

#define DQ_PORTIOPORT_D//设置DQ引脚

#define DQ_PINBIT_14

#define SET_OP_1WIREPORTSetBits(DQ_PORT, DQ_PIN)

#define CLR_OP_1WIREPORTClearBits(DQ_PORT, DQ_PIN)

#define SET_DIR_1WIREPORTSetPinsDigitalOut(DQ_PORT, DQ_PIN)

#define CLR_DIR_1WIREPORTSetPinsDigitalIn(DQ_PORT, DQ_PIN)

#define CHECK_IP_1WIREPORTReadBits(DQ_PORT, DQ_PIN)>>14

extern void delay_us(unsigned int num);

extern void delay_ms(unsigned int num);

float gettemp(void);//读取温度值

#endif

DS18B20.C

#include "ds18b20.h"

void init_1820()

{

SET_DIR_1WIRE; //设置PC2为输出

SET_OP_1WIRE;

CLR_OP_1WIRE;

delay_us(480);//480us以上

SET_OP_1WIRE;

CLR_DIR_1WIRE;

delay_us(20);//15~60us

while(CHECK_IP_1WIRE);

SET_DIR_1WIRE;

SET_OP_1WIRE;

delay_us(140);//60~240us

}

void write_1820(unsigned char x)

{

unsigned char m;

for(m=0;m<8;m++)

{

CLR_OP_1WIRE;

if(x&(1<

SET_OP_1WIRE;

else

{CLR_OP_1WIRE;}

delay_us(40);//15~60us

SET_OP_1WIRE;

}

SET_OP_1WIRE;

}

unsigned char read_1820()

{

unsigned char temp,k,n;

temp=0;

for(n=0;n<8;n++)

{

CLR_OP_1WIRE;

SET_OP_1WIRE;

CLR_DIR_1WIRE;

k=(CHECK_IP_1WIRE);//读数据,从低位开始

if(k)

temp|=(1<

else

temp&=~(1<

delay_us(50); //60~120us

SET_DIR_1WIRE;

}

return (temp);

}

float gettemp()//读取温度值

{

unsigned char temh,teml;

unsigned int temp;

float value;

init_1820();//复位18b20

write_1820(0xcc);//发出转换命令

write_1820(0x44);

//delay_nms(800);//不延时也好使,不知道怎么回事!

init_1820();

write_1820(0xcc);//发出读命令

write_1820(0xbe);

teml=read_1820();//读数据

temh=read_1820();

temp=temh;

temp<<=8;

temp|=teml;

value=temp*0.0625;

return value;

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

中国 上海,2025年7月18日——全球领先的智能传感和发射器解决方案供应商艾迈斯欧司朗(SIX:AMS)今日宣布,推出的一款紧凑型温度传感器——AS6211,可监测奶牛体内状况,揭示外部无法观测的信息。该传感器内置于s...

关键字: 温度传感器 AS6221

本文讨论如何为特定应用选择合适的温度传感器。我们将介绍不同类型的温度传感器及其优缺点。最后,我们将探讨远程和本地检测技术的最新进展如何推动科技进步,从而创造出更多更先进的温度传感器。

关键字: 温度传感器 CPU FPGA

如果您愿意,您甚至可以使用I2Ctools在总线上读写。这可以使用命令sudo i2cget 3 0x3f 0x01来实现。这是从I2C总线3中获得的,在设备地址0x3F处,寄存器0x01的内容,这是温度传感器上的who...

关键字: ZUBoard 无刷直流电机 温度传感器

TDK株式会社(东京证券交易所代码:6762)隆重推出新系列温度传感器的首款产品—B58101A0851A000。该新元件专为电动车 (EV) 的动力系统冷却应用而设计,是一款灵敏度高的全密封型NTC热敏电阻,可实现快速...

关键字: 电动车 温度传感器 电驱系统
关闭