一. DS18B20简介

DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

二. DS18B20的特性

1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电

2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微 处理器与DS18B20的双向通讯。

3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网 多点测温。

4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一 只三极管的集成电路内。

5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃ 和0.0625℃,可实现高精度测温。

7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms 内把温度值转换为数字,速度更快。

8、测量结果直接输出数字温度信号,以"一根总线"串行传送给CPU,同时可传送 CRC校验码,具有极强的抗干扰纠错能力

。 9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。

三. DS18B20实物图

四. DS18B20的内部结构

五. DS18B20的ROM指令表

操作rom的流程

六. DS18B20的RAM指令表

操作ram的流程

 

单总线协议DS1820代码

一.DS18B20初始化

(1).数据线拉到低电平“0”。

(2).延时480微妙(该时间的时间范围可以从480到960微妙)。

(3).数据线拉到高电平“1”。

(4).延时等待80微妙。如果初始化成功则在15到60微妙时间内产生一个由DS18B20所返回的低电平“0”.根据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时判断。

(5).若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(3)步的时间算起)最少要480微妙。

二.DS18B20读时序

(1).将数据线拉低“0”。

(2).延时1微妙。

(3).将数据线拉高“1”,释放总线准备读数据。

(4).延时10微妙。 //等待数据稳定

(5).读数据线的状态得到1个状态位,并进行数据处理。

(6).延时45微妙。 (7).重复1~7步骤,直到读完一个字节

数据手册内读解释:

三.DS18B20写时序

(1).数据线先置低电平“0”

(2).延时15微妙。

(3).按从低位到高位的顺序发送数据(一次只发送一位)。

(4).延时60微妙。

(5).将数据线拉到高电平。

(6).重复1~5步骤,直到发送完整的字节。

(7).最后将数据线拉高。

数据手册内的解释

写时间片(write timeslots)

DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令( 0XCC )→发开始转换命令( 0X44)→延时→复位→发送 SKIP ROM 命令( 0XCC)→发读存储器命令( 0XBE)→连续读出两个字节数据(即温度)→ 结束。

四、读DS18B20温度代码

 1 #ifndef _hwjs_H
2 #define _hwjs_H
3
4 #include "system.h"
5
6
7
8 void Hwjs_Init(void);
9 u8 HW_jssj(void);
10
11 //定义全局变量
12 extern u32 hw_jsm;
13 extern u8 hw_jsbz;
14
15
16 #endif
  1 #include "hwjs.h"
2 #include "SysTick.h"
3
4
5 u32 hw_jsm; //定义一个32位数据变量,保存接收码
6 u8 hw_jsbz; //定义一个8位数据的变量,用于指示接收标志
7
8
9 /*******************************************************************************
10 * 函 数 名 : Hwjs_Init
11 * 函数功能 : 红外端口初始化函数 时钟端口及外部中断初始化
12 * 输 入 : 无
13 * 输 出 : 无
14 *******************************************************************************/
15 void Hwjs_Init()
16 {
17 GPIO_InitTypeDef GPIO_InitStructure;
18 EXTI_InitTypeDef EXTI_InitStructure;
19 NVIC_InitTypeDef NVIC_InitStructure;
20
21 /* 开启GPIO时钟及管脚复用时钟 */
22 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
23
24 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;//红外接收
25 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
26 GPIO_Init(GPIOG,&GPIO_InitStructure);
27
28 GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource15); //选择GPIO管脚用作外部中断线路
29 EXTI_ClearITPendingBit(EXTI_Line15);
30
31 /* 设置外部中断的模式 */
32 EXTI_InitStructure.EXTI_Line=EXTI_Line15;
33 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
34 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
35 EXTI_InitStructure.EXTI_LineCmd=ENABLE;
36 EXTI_Init(&EXTI_InitStructure);
37
38 /* 设置NVIC参数 */
39 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //打开全局中断
40 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为0
41 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级为1
42 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
43 NVIC_Init(&NVIC_InitStructure);
44
45 }
46
47
48 /*******************************************************************************
49 * 函 数 名 : HW_jssj
50 * 函数功能 : 高电平持续时间,将记录的时间保存在t中返回,其中一次大约20us
51 * 输 入 : 无
52 * 输 出 : t
53 *******************************************************************************/
54 u8 HW_jssj()
55 {
56 u8 t=0;
57 while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_15)==1)//高电平
58 {
59 t++;
60 delay_us(20);
61 if(t>=250) return t;//超时溢出
62 }
63 return t;
64 }
65
66
67 void EXTI15_10_IRQHandler(void) //红外遥控外部中断
68 {
69 u8 Tim=0,Ok=0,Data,Num=0;
70 while(1)
71 {
72 if(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_15)==1)
73 {
74 Tim=HW_jssj();//获得此次高电平时间
75
76 if(Tim>=250) break;//不是有用的信号
77
78 if(Tim>=200 && Tim<250)
79 {
80 Ok=1;//收到起始信号
81 }
82 else if(Tim>=60 && Tim<90)
83 {
84 Data=1;//收到数据 1
85 }
86 else if(Tim>=10 && Tim<50)
87 {
88 Data=0;//收到数据 0
89 }
90
91 if(Ok==1)
92 {
93 hw_jsm<<=1;
94 hw_jsm+=Data;
95
96 if(Num>=32)
97 {
98 hw_jsbz=1;
99 break;
100 }
101 }
102
103 Num++;
104 }
105 }
106
107 EXTI_ClearITPendingBit(EXTI_Line15);//如果不清除中断标志 CPU会一直执行中断函数顺序执行完成后再从头执行
108 }
 1 #include "system.h"
2 #include "SysTick.h"
3 #include "led.h"
4 #include "usart.h"
5 #include "hwjs.h"
6
7
8 /*******************************************************************************
9 * 函 数 名 : main
10 * 函数功能 : 主函数
11 * 输 入 : 无
12 * 输 出 : 无
13 *******************************************************************************/
14 int main()
15 {
16 u8 i=0;
17
18 SysTick_Init(72);
19 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
20 LED_Init();
21 USART1_Init(9600);
22 Hwjs_Init();
23
24 while(1)
25 {
26 if(hw_jsbz==1) //如果红外接收到
27 {
28 hw_jsbz=0; //清零
29 printf("红外接收码 %0.8X\r\n",hw_jsm); //打印
30 hw_jsm=0; //接收码清零
31 }
32
33 i++;
34 if(i%20==0)
35 {
36 led1=!led1;
37 }
38
39 delay_ms(10);
40 }
41 }

(stm32f103学习总结)—DS18B20的更多相关文章

  1. ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程

    ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程 原文地址:http://www.cnblogs.com/NickQ/p/9026545.html 一.开发板与ds18b20的入门 ...

  2. STM32F103学习进程

    软硬件下载程序和程序运行的相关问题和解决方案,以我自身买的STM32F103C8T6为例 (1) 硬件需要 1. 购买一个STM32F103XXX的板子.这是一个操作实践性非常强的一个学习过程,如果没 ...

  3. (stm32f103学习总结)—GPIO结构

    一.GPIO基本结构 二.GPIO工作模式 输入模式 输入浮空 输入上拉 输入下拉 模拟输入 输出模式 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 库函数中所对应的代码 1 typedef e ...

  4. (stm32f103学习总结)—stm32外部中断

    一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...

  5. (stm32f103学习总结)—stm32中断系统

    一.NVIC 介绍 NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功 ...

  6. (stm32f103学习总结)—输入捕获模式

    一.输入捕获介绍 在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种.STM32F1 除了基本定时器 TIM6 和 TIM7,其他定时器都具有输入捕获功能.输入捕获可以对输入 ...

  7. (stm32f103学习总结)—stm32 PMW输出实验

    一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...

  8. 基于stm32CubeMX和keil5的stm32f103学习编程

    0.       准备 先用st-link连接stm32核心板与PC,用于烧录 St-link Stm32 3.3V 3.3V GND GND SWDIO DIO SWCLK DCLK 再用USB串口 ...

  9. (stm32f103学习总结)—stm32定时器中断

    一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...

随机推荐

  1. 使用linux 的shell脚本进行sftp文件上传与下载

    一.批量上传: #!/bin/bash #SFTP配置信息 #用户名 USER=root #密码 PASSWORD=5EYS40T04BMF #待上传文件根目录 SRCDIR=/u02/dab/sft ...

  2. java创建线程的四种方法

    第一种:  通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runna ...

  3. 自己写了个Java RMI(远程方法调用)的实现案例

    自己简单写了个Java RMI(远程方法调用)的实现案例. 为了更好理解RMI(远程方法调用).序列化的意义等等,花费三天多的时间肝了一个Java RMI的实现案例. !!!高能预警!!! 代码量有点 ...

  4. pandas补充(其二)与matplotlib补充

    今日内容概要 pandas补充知识(2) matplotlib补充知识 今日内容详细 pandas补充 数据汇总 # 数据透视表 pd.pivot_table(data,values-None,ind ...

  5. 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充

    今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...

  6. c/c++ 内存泄漏分析

    Valgrind: https://zhuanlan.zhihu.com/p/111556601 valgrind输出结果分析 valgrind输出结果会报告5种内存泄露,"definite ...

  7. Linux CentOS7.X- 添加用户

    1.创建用户 useradd username 其中,username是要创建用户的用户名(root使用): 2.设置密码 passwd username 其中,username是指定要修改密码的用户 ...

  8. C#-使用HttpListener创建http服务

    参考: c# 通过HttpListener创建HTTP服务 运行服务端程序,启动监听器httpobj.Start();时报错:System.Net.HttpListenerException: 'Ac ...

  9. vue项目部署到阿里云服务器(windows),Nginx代理!

    项目构成: 前端:vue+vant-ui, 数据库:mysql, 后端:node.js 部署方式:nginx代理: 一,首先要拥有自己的服务器,阿里,腾讯都可以,我用的是阿里的: 如果只是做个人项目的 ...

  10. 使用阿里巴巴开源镜像站镜像——Kubernetes 镜像

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 Kubernetes 镜像简介 Kubernetes 是一个开源系统,用于容器化应用的自动部署.扩缩和管理.它将构成应用的容器按逻辑单位进行分组以 ...