0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DS18B20的组成以及工作过程

ss 来源:李天生博客园、CSDN_朱坚强 作者:李天生博客园、 2021-07-08 09:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DS18B20一般都是由64位ROM温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器组成。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

DS18B20的工作过程:

1.复位操作

2.执行ROM操作的5条指令之一:1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。

3.存储器操作命令:温度转换、读取温度、设定上下限温度值等指令

4.读取温度数据:主机读取温度数据后进行数据处理。

应用实例

数字电子温度计

功能:显示当前温度值,可显示正和负温度值

程序:

#include《reg52.h》

/*------SEG PORT-----*/

#define LEDADDR P2

#define LED_port P0

/*------DS18B20 PORT-----*/

sbit DB_B20=P0^0;

/*-----COMMON FUNCTION----*/

void delay_us(unsigned int time);

/*-----SEG FUNCTION-------*/

unsigned char seg_val[6];

unsigned char ledcode[12] = {0XC0,0XF9,0XA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff};//共阳极数码管0,1,2,3,4,5,6,7,8,9,-,null

unsigned char currled=0;

unsigned char led_en=0x04;//

void display(void);

void display_tem(void);

/*--- DS18B20 FUNCTION-----*/

unsigned char tem_pnt;

unsigned char tem_num;

bit tem_sign;

bit reset_B20(void);

unsigned char read_b20_byte(void);

void write_b20_byte(unsigned char);

void convert_cmd_b20(void);

void read_cmd_b20(void);

void data_convert_b20(void);

/*--- TIME FUNCTION-----*/

unsigned char times;

void times_init(void);

/*-----------------------*/

main()

{

times_init();

while(1)

{

display_tem();

display();

}

}

/*-----COMMON FUNCTION----*/

void delay_us(unsigned int us)

{

while(us--);//for(;us》0;us--);//while(time--);

}

/*-----SEG FUNCTION-------*/

void display(void)

{

LEDADDR=0xff;

LED_port=(LED_port&0x03)|led_en;

led_en《《=1;

if(currled==1)

LEDADDR=ledcode[seg_val[currled]]& 0x7f;

else

LEDADDR=ledcode[seg_val[currled]];

currled++;

if(currled==6)

{

currled=0;

led_en=0x04;

}

delay_us(300);

}

void display_tem(void)

{

unsigned char n;

unsigned char p;

if(tem_sign==0)

{

n=~(tem_num-1);

p=~(tem_pnt-1);

}

else

{

n=tem_num;

p=tem_pnt;

}

seg_val[5]=11;

seg_val[4]=11;

seg_val[3]=n/100;

n=n%100;

seg_val[2]=n/10;

if(seg_val[3]==0)

{

seg_val[3]=11;

if(seg_val[2]==0)

seg_val[2]=11;

}

seg_val[1]=n%10;

seg_val[0]=p;

if(seg_val[2]==11 && seg_val[3]==11 && tem_sign==0)

seg_val[2]=10;

else if(seg_val[3]==11 && tem_sign==0)

seg_val[3]=10;

else if(tem_sign==0)

seg_val[4]=10;

}

/*--- DS18B20 FUNCTION-----*/

bit reset_B20(void)

{

bit state;

DB_B20=0;

delay_us(29);//》480us 29

DB_B20=1;

delay_us(3);//15---60us 3

state=DB_B20;

delay_us(25);//480us 25

return state;

}

void write_b20_byte(unsigned char cmd)

{

unsigned char i;

for(i=0;i《8;i++)

{

DB_B20=0;

DB_B20=cmd&0x01;

delay_us(5);

DB_B20=1;

cmd》》=1; //6

}

delay_us(5);

}

unsigned char read_b20_byte(void)

{

unsigned char rbyte=0;

unsigned char i;

for(i=0;i《8;i++)

{

rbyte》》=1;

DB_B20=0;

DB_B20=1;

//delay_us(1);

if(DB_B20)

rbyte |= 0x80;

delay_us(6); //6

}

return rbyte;

}

void convert_cmd_b20(void)

{

reset_B20();

write_b20_byte(0xcc);

write_b20_byte(0x44);

}

void read_cmd_b20(void)

{

reset_B20();

write_b20_byte(0xcc);

write_b20_byte(0xbe);

}

void data_convert_b20(void)

{

unsigned char a;

unsigned char b;

int point;

a=read_b20_byte();

b=read_b20_byte();

point=(a & 0x0f)*625+500;

tem_pnt=point/1000;

tem_num=a》》4 | b《《4;

if(tem_num & 0x80)

tem_sign=0;

else

tem_sign=1;

}

/*--- TIME FUNCTION-----*/

void times_init(void)

{

times=29;

TMOD=0X01;

TH0=0X3C;

TL0=0XB0;

EA=1;

ET0=1;

TR0=1;

}

void time0(void) interrupt 1

{

if(times==19)

convert_cmd_b20();

else if(times==9)

read_cmd_b20();

else if(times==0)

{

data_convert_b20();

times=29;

}

times--;

TH0=0X3C;

TL0=0XB0;

}

/*---------------------*/

整合自:李天生博客园、CSDN_朱坚强

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DS18B20
    +关注

    关注

    10

    文章

    782

    浏览量

    83082
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32F003内部上拉电阻是多少?

    最近在调试DS18B20,用寄生电源,所以需要上拉电阻,如果不接外部上拉电阻,芯片内部的上拉电阻可以不?
    发表于 11-21 06:15

    要做一个DS18B20的读取程序,单总线需要配置为输入或者输出,怎么配置好?

    目前要做一个DS18B20的读取程序,单总线需要配置为输入或者输出。怎么配置好
    发表于 11-18 06:30

    使用18b20软件包报错怎么解决?

    In file included from ../packages/ds18b20-latest/src/dallas_ds18b20_sensor_v1.c:12:0: C
    发表于 10-14 06:49

    低频段 LNA 前端模块(B26/B5/B18/B19、B8、B20B12/13/17、B28A、B28BB29) skyworksinc

    电子发烧友网为你提供()低频段 LNA 前端模块(B26/B5/B18/B19、B8、B20
    发表于 06-27 18:32
    低频段 LNA 前端模块(<b class='flag-5'>B</b>26/<b class='flag-5'>B</b>5/<b class='flag-5'>B18</b>/<b class='flag-5'>B</b>19、<b class='flag-5'>B</b>8、<b class='flag-5'>B20</b>、<b class='flag-5'>B</b>12/13/17、<b class='flag-5'>B</b>28A、<b class='flag-5'>B28B</b> 和 <b class='flag-5'>B</b>29) skyworksinc

    单片机实例项目:DS18B20温度传感器

    单片机实例项目:DS18B20温度传感器,推荐下载!
    发表于 06-03 20:59

    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    的OneWire通信,大幅提升项目开发效率。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器和 Air780EPM 搭配
    的头像 发表于 03-20 17:52 905次阅读
    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议调试的注意事项

    在物联网设备开发中,精准且稳定的数据传输是构建智能系统的核心。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器
    的头像 发表于 03-17 16:57 578次阅读
    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议调试的注意事项

    基于FPGA的DS18B20数字温度传感器测温实例

    本文将使用三段式状态机(Moore型)的写法来对DS18B20进行测温操作,以便了解DS18B20和熟悉三段式状态机的写法。
    的头像 发表于 03-17 11:06 2084次阅读
    基于FPGA的<b class='flag-5'>DS18B20</b>数字温度传感器测温实例

    DS28EC20 adi

    电子发烧友网为你提供ADI(ADI)DS28EC20相关产品参数、数据手册,更有DS28EC20的引脚图、接线图、封装手册、中文资料、英文资料,DS28EC20真值表,DS28EC20
    发表于 03-10 18:32
    <b class='flag-5'>DS28EC20</b> adi

    DS18B20实时温度传感器中文资料

    DS18B20 是一种单总线数字温度传感器,它被广泛应用于各种领域,例如气象监测、室内温度控制、工业自动化等。DS18B20 采用了单总线接口(One-Wire Interface),这意味着可以通过单个引脚与微控制器通信,大大简化了连接和布线
    发表于 02-28 17:02 5次下载

    SAR ADC的工作过程和关键指标

    ADC以其低功耗、高精度、小尺寸以及适中的速度和分辨率,在中等至高分辨率应用中占据主导地位。本文将详细介绍SAR ADC的概念、工作过程、关键指标以及其在不同领域的应用。
    的头像 发表于 02-02 13:57 2212次阅读

    恒流三极管的工作过程和电路结构

    恒流三极管是一种特殊的半导体器件,它在一定条件下能够提供稳定的电流输出,不受负载变化的影响。这种特性使其在多种电子电路中得到了广泛应用,如LED驱动电路、电池充电管理、电化学分析等。本文将深入探讨恒流三极管的工作过程和电路结构,以期为读者提供全面的技术理解。
    的头像 发表于 02-02 13:47 929次阅读

    基于FPGA的温度传感器(ds18b20)驱动设计

    本篇主要讨论基于FPGA的温度传感器(ds18b20)驱动设计---第一版 设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。 首先介绍DS18b20DS18B20
    的头像 发表于 01-16 14:08 2044次阅读
    基于FPGA的温度传感器(<b class='flag-5'>ds18b20</b>)驱动设计

    【正点原子STM32H7R3开发套件试用体验】DS18B20、DHT11温湿度采集

    DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。 工作电源: 3.0~5.5V/DC (可以数据线寄生电源) 在
    发表于 01-01 11:16

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20实验

    封装形式,从而使系统设置灵活、方便,设定分辨率以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。其内部结构如下图所示。 图29.1.1.1 DS18B20内部结构图ROM中的64位序列号是出厂
    发表于 12-25 09:43