DS18B20温度传感器驱动文件
1、DS18B20.h 文件。主要进行函数声明,和管脚定义。
#ifndef _DS18B20_H_
#define _DS18B20_H_#include <intrins.h>
#include <reg52.h>sbit DS = P1^7; //温度测量芯片数据线void delayus(unsigned char i);
void delayms(int j);
unsigned char DS18B20_Initial();
unsigned char DS18B20_ReadByte();
void DS18B20_SendByte(unsigned char dat);
float DS18B20_ReadTmp();#endif
2、DS18B20.c 文件,驱动程序
DS18B20驱动的重点是用单片机的IO口模拟通讯时序。
/*
DS18B20温度传感器驱动程序,调用方法为:调用函数DS18B20_ReadTmp(),返回一个浮点型温度数值,
返回的温度单位为℃ 。
*/#include <reg52.h>
#include <DS18B20.h>
#include <intrins.h>/*
*函数名 :delayus(unsigned char i)
*功能 : 产生微秒级延时,经调试,12MH晶振时,延时方程为 t=6i+8 , 所需延时时间对应的i值为:10us i=0(误差-1), 15us i=1(误差-1),45us i=6(误差-1), 60us i=9(误差+2),80us i=12(误差0),480us i=79(误差+2)
*输入 :延时参数 i
*输出 :无
*/
void delayus(unsigned char i) //经调试,延时方程为 t=6i+8 , 所需延时时间对应的i值为:
{while(i){ --i;}
}/*
*函数名 :delayms(int j)
*功能 :产生毫秒级延时 t=0.21i+0.01 (t单位ms)
*输入 :j
*输出 :无
*/
void delayms(int j)
{while(j){ unsigned char k=100;while(k){--k;}--j;}
}/*
*函数名 : DS18B20_Initial()
*功能 : DS18B20的初始化
*输入 : 无
*输出 :初始化失败返回0,成功返回1
*/
unsigned char DS18B20_Initial()
{unsigned char i=0;DS=0;delayus(85); //延时480us !!!79改85,增加一些延时DS=1;while(DS){delayus(15); //延时约100usi++;if(i>5) //等待>500us{return 0; //初始化失败}}delayus(85); return 1; //初始化成功,给初始化函数返回1}/*
*函数名 :DS18B20_ReadByte()
*功能 : 读取一个字节的数据
*输入 : 无
*输出 : 读取到的数据*/
unsigned char DS18B20_ReadByte() /*单纯地复制存储数据位,不需要算术运算因此用无符号数,不能用有符号数,否则符号会占用数据位*/
{unsigned char dat=0,bi=0; unsigned char i;for(i=0;i<8;i++){DS=0; //拉低数据线_nop_(); //空指令,占用1个机器周期的时间,12MHz晶振时为1usDS=1; //释放数据线delayus(0); //延时10us ,等待温度芯片发送数据线dat=dat>>1; //右移1位,准备给最高位存入数据bi=DS; //DS不是数据,不能进行移位操作,要先存入数据字符bi中dat=dat|(bi<<7); /***将数据线DS的数据赋值到变量dat的第8位(最高位)中传感器是从低位开始发送数据,单片机要将收到的数据先存入高位,再一步步移至低位***/ delayus(6); //延时48us,进行下一次读取}return dat;
}/*
*函数名 : DS18B20_SendByte(unsigned short int dat)
*功能 : 发送一个字节命令
*输入 : 需要发送的数据
*输出 :无
*/
void DS18B20_SendByte(unsigned char dat)
{unsigned char a;for(a=0;a<8;a++){ DS=0;delayus(1); //延时15us,准备写入数据DS=dat&0x01; //写入一位数据,写入最低位数据dat=dat>>1;delayus(9); //延时等待60usDS=1; //再次拉高数据线}
}/*
*函数名: DS18B20_ReadTmp()
*函数功能: 读取温度数据,并转换成以℃为单位的数值
*输入: 无
*输出: 温度值
*/
float DS18B20_ReadTmp()
{unsigned char tml,tmh; //温度数据的低字节和高字节。分开、连续读取unsigned int tmp=0; //全部字节的温度数据(16字节)float temperature; //经转换系数运算后的温度数据,℃DS18B20_Initial(); //温度芯片初始化delayms(5); //初始化完成后延时个1ms(时序图没有这样的要求)。DS18B20_SendByte(0xcc); //跳过ROM,跳过温度芯片地址识别,直接进行温度变换DS18B20_SendByte(0x44); //发送温度变换命令DS18B20_Initial(); //温度芯片初始化delayms(5); //初始化完成后延时个1ms(时序图没有这样的要求)。DS18B20_SendByte(0xcc);DS18B20_SendByte(0xbe); //发送读暂存器命令tml=DS18B20_ReadByte(); //读取温度数据低字节,并存储到临时变量tml中tmh=DS18B20_ReadByte();tmp=tmp|tmh; //全温度字节中存入高字节tmp=(tmp<<8)|tml; //全温度字节中存入低字节temperature = tmp*0.0625; //换算温度值,℃return temperature; //将临时变量tmp的值返回给读温度指令,以便后续进行数据处理
}
DS18B20温度传感器驱动文件相关推荐
- STM32入门开发: 编写DS18B20温度传感器驱动(读取环境温度、支持级联)
一.环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103C8T6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) 温度传感器: DS1820 DS ...
- ds18b20温度传感器驱动编写
协议 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括:初始化时序.写时序.读时序. 黑色部分表示单片机操作,蓝色部分表示18b20操作,每次主机操 ...
- 51单片机DS18B20温度驱动
51单片机DS18B20温度传感器驱动,仅有.h文件,无.c文件. /***************************************************************** ...
- 解决树莓派的gpio口不能读取ds18b20的设备文件
概述 做了一个树莓派的温度检测装置,反正就是用ds18b20来传感器来检测温度这样子,不过树莓派最新的固件貌似不能读取ds18b20的设备文件 解决办法 我也是百度才知道的,把下面这句话加入/boot ...
- DS18B20温度采集报警系统,原理及汇编、C语言实现
单片机课程设计已完成,现供以参考. DS18B20单总线的工作方式 数据手册说明1: DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低 ...
- imx6ul linux读取DS18B20温度
imx6ul linux读取DS18B20温度 首先尝试加载模块 root@imx6ulevk:~# modprobe w1-gpio modprobe: FATAL: Module w1-gpio ...
- DS18B20温度测量程序文件(简单通用)
DS18B20是一个非常简单的温度传感器,对于像我这样单片机萌新是比较友好的.网上关于它的介绍非常多,包括原理.引脚.通信.以及51单片机.STM32的各种代码等等.本人写了一个简单的ds18b20. ...
- STC15F2K60S2读取DS18B20温度串口显示
为方便大家调试,特附该程序的项目下载地址 STC15F2K60S2读取DS18B20温度实例下载地址 //************************** //程序说明:stc15f2k60s2采 ...
- ESP8266_RTOS_SDK v3.x 读DS18B20温度数据
陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...
最新文章
- PrestaShop 网站后台配置(三)
- 初学spring mvc
- python多态_python 多态
- php文件的作用,php入口文件的作用-PHP问题
- Qt工作笔记-右键菜单造成内存泄漏等分析
- linux system查看内存占用,Linux查看系统内存占用
- mysql profiling_MySQL Profiling 的使用
- python中plot是什么意思_python中的plot函数是什么?
- ubuntu搭建php运行环境
- Java se官方中文API下载链接
- 双十一,美团为何静悄悄?
- MySQl安装与学习,内附SQlyog
- 华为各类工程师通信基础面试题目及答案
- 计算机表格常用根式,excel怎么建立常用根式_在excel中怎样开根号�9�3
- 爱乐乐iLELE®益生菌新品上市由妈咪爱研究中心出品
- 看我解决Linux下的OTG切换问题
- windows10怎么备份操作系统
- C语言链表怎么合并同类项,求一个关于合并同类项的编程
- android图片压缩工具类
- SEO像艺术,为自己做站最划算
热门文章
- python读写磁盘扇区数据有什么用_磁盘存放数据原理 - osc_v8xs2czi的个人空间 - OSCHINA - 中文开源技术交流社区...
- Google Maps无声导航的秘密
- 游程检验.医学统计实例详解-医学统计助手★卡方检验,t检验,F检验,秩和检验,方差分析
- 2021 新版微博转发爬虫发布
- DNF:拍卖行计算器 for JAVA 。 最近迷了毒奶粉。。索性写了个计算器~~~
- 南京大学计算机硕士毕业去向,南京大学金融硕士就业前景怎么样?快来看看就业质量报告吧...
- java毕业设计网上书城系统mybatis+源码+调试部署+系统+数据库+lw
- win10+NVIDIA GTX 960M+CUDA 8.0+cudnn6.0安装
- Mac使用Boot Camp安装win10(不用U盘)
- Yarn管理页面中Aplication history无法访问问题以及Aggregation is not enabled问题