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

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ds2482读取个别18b20,温度返回0x7FF是什么原因导致的?如何解决?

    DS2482驱动18B20,大多数18B20读取温度正常,但有的18B20读取温度异常,返回0x7FF。 针对该问题进行了一下排查工作 1
    发表于 05-13 07:34

    实际温度低于-55时,DS1B20读取结果是什么?

    请问下当实际温度低于-55度时,DS18B20读取导致的温度值是保持为-55度 还是 其它值 ?
    发表于 05-08 06:03

    HJ18B20 数字单总线温度传感器

    和 TL、配置寄存器等组成。 1. 64 位光刻 ROM 是生产厂家给每一个出厂的 HJ18B20 命名的产品序列号,可以看作为该器件的 地址序列号。其作用是使每一个出厂的 HJ18B20 地址序列号都
    发表于 04-21 14:17

    探索DS1868B双数字电位器:性能、应用与设计要点

    探索DS1868B双数字电位器:性能、应用与设计要点 在电子工程师的日常设计工作中,数字电位器是一种非常实用的元件,它能够实现对电阻值的精确控制,为电路设计带来了极大的灵活性。今天,我们就来深入
    的头像 发表于 04-17 11:15 232次阅读

    PIC18FXX20系列闪存微控制器编程全解析

    PIC18FXX20系列闪存微控制器编程全解析 在电子设计领域,微控制器的编程是一项基础且关键的工作。今天我们聚焦Microchip的PIC18FXX20系列闪存微控制器,深入探讨其编程规范和相关
    的头像 发表于 04-08 10:55 314次阅读

    DS92LV1818位总线LVDS串行器/解串器的深度解析

    DS92LV1818位总线LVDS串行器/解串器的深度解析 在电子设计领域,数据传输的高效性和稳定性一直是工程师们关注的重点。TI推出的DS92LV18 18位总线LVDS串行器/解
    的头像 发表于 12-30 10:05 555次阅读

    CW32F003怎样延时1微秒?

    CW32F003怎样延时1微秒,DS18B20,DHT11需要使用
    发表于 12-30 07:19

    探索DS90C363B:高性能LVDS发射器的卓越之选

    +3.3V 可编程LVDS发射器,专为18位平板显示器(FPD)链接设计,最高支持65 MHz的工作频率。 文件下载: ds90c363b.pdf 一、DS90C363B的特性亮点
    的头像 发表于 12-29 17:00 1523次阅读

    CW32L031嘀嗒定时器怎样定时1us?

    CW32L031嘀嗒定时器 怎样定时1us,以便DS18B20,DHT11使用。提供一下代码
    发表于 12-10 07:40

    请问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

    STM32项目分享:矿井环境监测系统

    01—项目简介1.功能详解STM32矿井环境监测系统功能如下:STM32F103C8T6单片机作为主控制器DS18B20测量环境温度
    的头像 发表于 08-16 10:03 1199次阅读
    STM32项目分享:矿井环境监测系统

    低频段 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