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

    文章

    777

    浏览量

    80626
收藏 人收藏

    评论

    相关推荐

    DS18B20温度传感器的工作原理和硬件设计

    通过本文可以了解DS18B20温度传感器工作原理、硬件设计、DS18B20单总线接口驱动编写。
    的头像 发表于 10-24 14:38 254次阅读
    <b class='flag-5'>DS18B20</b>温度传感器的<b class='flag-5'>工作</b>原理和硬件设计

    ds18b20传感器的使用方法

    Integrated开发的一种数字温度传感器,它能够提供9位到12位的温度测量精度,测量范围从-55°C到+125°C。这种传感器非常适合用于需要精确温度控制的应用,如环境监测、工业控制和家用电器。 工作原理 DS18B20传感器使用一个精密的半导体温度传感器,通过内部
    的头像 发表于 10-18 14:52 217次阅读

    ds18b20温度传感器怎么接线

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(一线)通信协议工作。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B20传感器引脚介绍 DS18B20有三
    的头像 发表于 10-18 14:50 377次阅读

    ds18b20温度传感器如何使用

    Devices的一部分)生产的数字温度传感器。它能够提供9位至12位的温度测量数据,具有高精度和可编程分辨率。DS18B20的温度测量范围为-55°C至+125°C,适用于多种环境和应用。 工作
    的头像 发表于 09-03 16:51 445次阅读

    ds18b20温度传感器是什么类型

    DS18B20温度传感器是一种数字温度传感器,它属于单总线(One-Wire)数字温度传感器类型。这意味着它仅需要一根数据线(加上电源线和地线,共三根线)就能与微处理器或其他数字电路进行通信。这种
    的头像 发表于 09-03 16:46 644次阅读

    ds18b20温度传感器和dht11的区别

    DS18B20和DHT11都是常用的温度和湿度传感器,它们在许多项目和应用中都有广泛的应用。 1. 工作原理 DS18B20 DS18B20是一种数字温度传感器,它使用1-Wire通信
    的头像 发表于 09-03 16:44 758次阅读

    STC32和STC8H驱动DS18B20测温串口发送数据

    STC32G12K128 和 STC8H8K64U 驱动 DS18B20 模块,采集环境温度并通过串口发送数据至电脑
    的头像 发表于 06-27 16:27 668次阅读
    STC32和STC8H驱动<b class='flag-5'>DS18B20</b>测温串口发送数据

    DS18B20温度传感器工作原理

    DS18B20以其独特的工作原理、卓越的技术参数和广泛的应用场景,成为了市场的明星产品。 深入了解DS18B20工作原理 DS18B20
    的头像 发表于 06-19 16:01 889次阅读

    DS18B20温度传感器的优缺点

    可编程寄存器:DS18B20内部具有可编程寄存器,允许用户对其进行配置和控制,以满足不同的应用需求。
    发表于 04-04 11:39 3992次阅读

    树莓派Pico上使用DS18B20温度传感器

    DS18B20 温度传感采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量。
    的头像 发表于 11-21 14:21 1239次阅读
    树莓派Pico上使用<b class='flag-5'>DS18B20</b>温度传感器

    为什么ds18b20不会在esp8266启动时候把电平拉低?

    不好说了。 我实验过,当2号端口接着单总线ds18b20,esp8266可以正常启动。但是,并不清楚为什么ds18b20不会在esp8266启动时候把电平拉低,所以来问问大家。
    发表于 11-10 06:54

    Proteus8.6两个DS18B20只一个能用why?

    这两个DS18B20都是带仿真功能的,俩元件外观一模一样,分别用同一个程序仿真一个读出数值正常,另一个(高精度)的不正常,难道驱动程序不同? 谁遇到过,如果是程序不同,改怎么改程序? 已
    发表于 11-09 06:39

    请问DS18B20测温C程序怎么写?

    DS18B20测温C程序怎么写?
    发表于 11-07 07:20

    机智云采用MCU方案采集DS18B20温度,一直无法读取数据怎么解决?

    单片机:STC8A8K64S4A12;ESP8266-01 采用机智云的MCU方案,51单片机的程序是自动生成的,基础功能已经实现,但是一直无法读取DS18B20数据,DS18B20控制程序已经验证没有问题,DS18B20是不是
    发表于 11-06 07:45

    如何用ds18b20读取来的数据并通过串口发送到pc?

    如何用ds18b20读取来的数据并通过串口发送到pc?
    发表于 11-06 07:26