单片机ds18b20的介绍和源码
来源:互联网 发布:2016十大网络神曲 编辑:程序博客网 时间:2024/05/18 00:56
DS18B20温度模块
1.1模块特征:
供电方式 (两种供电方式:供电为:3—5.5V)
DS18B20结构图
主要由2部分组成:64位ROM、9字节暂存器,如图所示
(1)64位ROM。它的内容是64位序列号,它可以被看做是该DS18B20de地址序列码,
其作用是使每个DS18B20都不相同,这样就可以实现一根总线上挂载多个DS18B20
的目的。(由于实验条件,本次只在一根总线下挂载了一个DS18B20)。
(2)9字节暂存器包含:温度传感器、上限触发TH高温报警器、下线触发TL低温报警
器、高速暂存器、8位CRC产生器。
以上部分为9字节的暂存单元(包括EEPROM)。
字节0—1是温度暂存器,用来存储转换好的温度。
字节2—3是用户用来设置最高报警和最低报警值。软件实现。(由于设计时的气候环境,
只设置了一个上限温度报警,而没有设定下限温度报警)。
字节4是配置寄存器,用来配置转换精度,让它工作在9—12位。
字节5—7保留位。
字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生。
温度寄存器
温度寄存器结构图
温度寄存器由两个字节组成,分为低8位和高8位,一共16个字节。
*其中,第0位到第3位,存储的是温度值的小数部分。
*第4位到第10位存储的是温度值的整数部分。
*第11位到第15位为符号位,全0表示是正温度,全1表示负温度。
*下表中的数值,如果相应的位为1,表示存在,如果相应的位为0,表示不存在。
配置寄存器
配置寄存器结构图
精确值:
9--bit 0.5℃
10-bit 0.25℃
11-bit 0.125℃
12-bit 0.0625℃
一般都默认为12--bit
初始化:
初始化时序包括:主机发出的复位脉冲和从机发出的应答脉冲。主机通过拉低单总线480-960us产生复位脉冲;然后由主机释放总线,并进入接收模式。主机释放总线时, 会产生一由低电平跳变为高电平的上升沿,单总线器件检测到该上升沿后,延时15-60us,接着单总线器件通过拉低总线60-240us来产生应答脉冲。主机接收到从机的以应 答脉冲后,说明有单总线器件在线,初始化完成,主机可以对从机进行ROM命令和操作。
位写入时序
写时隙:当主机把数据线从逻辑高电平拉到逻辑低电平时候,开始写时隙,两种写时间隙:写1和写0。所有写时隙必须最少持续60us,包括两个写周期间至少1us的恢 复时间。DQ引脚电平变低后,DS18B20在一个15us到60us的时间内对DQ引脚采样。如果DQ引脚高电平,写1,如果低电平,写0,主机要生成一个写1时间隙。
必须把数据线拉到低电平然后释放,在写时隙开始后的15us内允许数据拉到高电平。主机要生成一个写0时间隙,必须把数据线拉到低电平并保持60us。
位读入时序
当主机把总线从高电平拉低,并保持至少1us后释放总线;并在15us内读取从DS18B20输出的数据。
DS18B20的ROM操作命令
用途:主要用于选定在单总线上的DS18B20,分为5个命令。
1:读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。
2:匹配ROM,代码为55H,用于识别(或选中)某一特定的DS18B20进行操作。
3:搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。
4:跳过ROM,代码为CCH,当总线仅有一个DS18B20时,不需要匹配。
5:报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度
界限的节点。
启动温度转换
三个步骤:
1、复位DS18B20
2、发出跳过ROM命令(CCH)
3、发出启动温度转换命令(44H)
其中Skip ROM 命令仅适用于总线上只有一个DS18B20时的情况。
部分源码:
#include <reg52.h>#include "./delay/delay.h"#include <intrins.h>#include <stdio.h>#include "./LCD1602/LCD1602.h"sbit ds = P3^4;bit ack = 0;void ds18b20_reset(){ds = 1;ds = 0;delay_us(200);delay_us(200);ds = 1;delay_us(30);if(0 == ds){ack = 1;}else{ack = 0;}delay_us(200);delay_us(200);}void ds18b20_write_byte(unsigned char byte){unsigned char i;for(i = 0; i < 8; i++){ds = 0;_nop_();_nop_();ds = byte & 0x01;byte >>= 1;delay_us(30);ds = 1;}delay_us(30);}bit ds18b20_read_bit(){bit temp;ds = 1;ds = 0;_nop_();_nop_();ds = 1;temp = ds;delay_us(30);return temp;}unsigned char ds18b20_read_byte(){unsigned char i, j, k;for(i = 0; i < 8; i++){j = ds18b20_read_bit();k = (j << 7) | (k >> 1);}return k;}void main(){unsigned char a;unsigned char i;unsigned int temp, b;float wendu;unsigned char disbuf[20];BLK = 0;lcd1602_init();while(1){ds18b20_reset();ds18b20_write_byte(0xcc);ds18b20_write_byte(0x44);ds18b20_reset();ds18b20_write_byte(0xcc);ds18b20_write_byte(0xbe);a = ds18b20_read_byte();b = ds18b20_read_byte();temp = (b << 8) | a;wendu = (float)temp * 0.0625;sprintf(disbuf,"temp is:%7.3f",wendu);lcd1602_dis_str(0,0,disbuf);}}
- 单片机ds18b20的介绍和源码
- 单片机--ds18b20
- 【单片机】DS18B20
- STC单片机的DS18B20的C程序
- 关于DS18B20和STC单片机的编程——开博第一天
- 单片机驱动DS18B20
- 单片机学习笔记--DS18B20
- 单片机温度控制系统DS18B20
- 单片机——ds18b20
- 单片机ds18b20测量温度
- 单片机+DS18B20+12864液晶显示温度及温度变化的波形
- 51单片机以定时中断的方法实现DS18B20时序
- 基于51单片机及DS18B20温度传感器的数字温度计设计
- 51单片机,DS18B20,液晶,超声波
- DS18B20单片机C51温度计实践
- 51单片机DS18B20温度传感器详解
- 51单片机——DS18B20
- 单片机DS18b20 温度检测液晶显示
- c#@屏@蔽@窗@口@关@闭@按@钮
- 使用myeclipse自带spring3.1和hibernate4框架applicationContext.xml报错解决方法
- 遭遇fastjson的一个坑
- 【C语言】输出好看的星星图形
- Hibernate的第一个程序
- 单片机ds18b20的介绍和源码
- PAT 乙级 1002. 写出这个数
- java NIO(一)
- Hibernate查询缓存
- ARC指南1 - strong和weak指针
- R语言绘图功能之强大
- [Usaco08Jan&luogu1948] Telephone Lines
- 添加额外的路径到Android系统中
- OpenGL学习笔记: 网格剪切