DS18B20读取温度
一、读取温度函数
float ds18b20_read_temperture(void)
{float temp;u8 dath=0;u8 datl=0;u16 value=0;ds18b20_start();//开始转换ds18b20_reset();//复位ds18b20_check();ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0xbe);//读存储器datl=ds18b20_read_byte();//低字节dath=ds18b20_read_byte();//高字节value=(dath<<8)+datl;//合并为16位数据if((value&0xf800)==0xf800)//判断符号位,负温度{value=(~value)+1; //数据取反再加1temp=value*(-0.0625);//乘以精度 }else //正温度{temp=value*0.0625; }return temp;
}
二、开始温度转换
void ds18b20_start(void)
{ds18b20_reset();//复位ds18b20_check();//检查DS18B20ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0x44);//转换命令
}
三、复位
void ds18b20_reset(void)
{DS18B20_PORT=0; //拉低DQdelay_10us(75); //拉低750usDS18B20_PORT=1; //DQ=1delay_10us(2); //20US
}
四、检查
u8 ds18b20_check(void)
{u8 time_temp=0;while(DS18B20_PORT&&time_temp<20) //等待DQ为低电平{time_temp++;delay_10us(1); }if(time_temp>=20)return 1; //如果超时则强制返回1else time_temp=0;while((!DS18B20_PORT)&&time_temp<20) //等待DQ为高电平{time_temp++;delay_10us(1);}if(time_temp>=20)return 1; //如果超时则强制返回1return 0;
}
五、写入字节
void ds18b20_write_byte(u8 dat)
{u8 i=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次写一位,且先写低位再写高位{temp=dat&0x01;//选择低位准备写入dat>>=1;//将次高位移到低位if(temp){DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1; delay_10us(6);}else{DS18B20_PORT=0;delay_10us(6);DS18B20_PORT=1;_nop_();_nop_(); } }
}
六、读取字节高低位
u8 ds18b20_read_bit(void)
{u8 dat=0;DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1; _nop_();_nop_(); //该段时间不能过长,必须在15us内读取数据if(DS18B20_PORT)dat=1; //如果总线上为1则数据dat为1,否则为0else dat=0;delay_10us(5);return dat;
} u8 ds18b20_read_byte(void)
{u8 i=0;u8 dat=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次读取一位,且先读低位再读高位{temp=ds18b20_read_bit();dat=(temp<<7)|(dat>>1);}return dat;
}
DS18B20读取温度相关推荐
- STM32通过DS18B20读取温度
DS18B20 简介 DS18B20是一款具有高精度温度测量的芯片,测温范围是-55摄氏度到125摄氏度. DS18B20 使用单总线协议,总线通讯通过一根控制信号线实现.控制线需要一个弱上拉电阻,这 ...
- DS18B20读取温度并显示在数码管上
下面是我的函数 分3个文件:头文件,DS18B20系列子函数文件,主函数部分(既数据处理和显示部分) 头文件 #ifndef __TEMP_H_ #define __TEMP_H_#include&l ...
- DS18B20读取温度(带小数)
由于DS18B20对时间精度要求很高,所以在写读取温度之前一定要改时序 1. 单总线延时函数 //单总线延时函数 void Delay_OneWire(unsigned int t) {t*=12; ...
- DS18B20读取温度,序号匹配
1 /* DS18B20时钟端口.引脚定义 */ 2 #define DS18B20 GPIOC 3 #define DS18B20_Onboard (GPIO_Pin_15) 4 #define D ...
- 51单片机温度传感器DS18B20
51单片机温度传感器DS18B20 实现功能 插上DS18B20温度传感器,数码管显示检测的温度值 单片机型号:STC89C52 DS18B20介绍 1.DS18B20简介 DS18B20 是由 DA ...
- DS18B20测量温度
文章目录 一.DS18B20读取温度步骤 二.初始化复位时序 2.发送一个字节 二.读取数据 1.读取一个Bit 2.读取一个字节 三.启动温度转换 四.判断转换完成 五.读取温度 程序地址 一.DS ...
- MCU-51:单片机DS18B20温度报警器
目录 一.DS18B20 1.1 DS18B20介绍 1.2 引脚及应用电路 1.3 内部结构框图 1.4 存储器结构 二.单总线 2.1 单总线介绍 2.2 单总线电路规范 2.3 单总线时序结构 ...
- C51---13 DS18B20温度传感器
C51---13 DS18B20温度传感器 DS18B20介绍 引脚及电路 内部结构图 存储器的结构 单总线介绍 单总线电路规范 单总线时序结构❗ DS18B20操作流程 DS18B20数据帧 温度存 ...
- STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)
文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...
最新文章
- linux 重新分区挂载,Linux:挂载磁盘分区,linux已挂载磁盘重新分区
- java 金字塔样式输出_Java打印金字塔(正实心、正空心,倒实心、倒空心),菱形...
- excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
- 当下的力量 - [读书笔记]
- 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
- 为什么学校计算机没有声音,电脑为什么没声音,教您电脑为什么没声音
- DECOUPLED WEIGHT DECAY REGULARIZATION
- ESLint 与 Prettier使用
- 软考 软件设计师个人总结 (程序语言部分)
- 通用人工智能:我们是否接近,尝试是否有意义?
- 通过http请求上传含中文路径文件问题解决
- 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解
- Pycharm编译代码时出现“SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file ...“
- 7天搭建物联网项目 STM32 + ESP8266 第 1 节 上传数据到云平台
- SQL:查找或删除重复行
- 利用python爬取复仇者联盟3无限战争豆瓣短评
- 【Nginx】第二十二节 redirect跟permanent区别
- O365 Exchange收到钓鱼邮件的处理办法
- java文件加密软件设计_【文件夹加密超级大师和Java软件构架设计模式哪个好用】文件夹加密超级大师和Java软件构架设计模式对比-ZOL下载...
- 主流休闲游戏分析报告
热门文章
- 为啥不招北大清华的?
- \t\t使用INDY的IdMappedPortTCP控件实现动态的HTTP代理服务器
- OverLoad和 OverWrite区别
- 基因表达式编程(GEP)自学 第【3】天 Python 实现
- 使用remoting 代替c# web service实现航班eterm命令发送和接收
- UiPath与按键精灵区别
- P1119 灾后重建(基础Floyd原理的理解和运用)
- 算法竞赛入门经典(刘汝佳)——代码笔记
- cc2530期末试卷_ZigBee期末试题.docx
- 超强古文...... yi