单总线编程介绍(用于DS18B20)
单总线介绍
单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线
一根通信线:DQ
异步、半双工
单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线
单总线的电路规范
设备的DQ均要配置成开漏输出模式(与I2C总线相似)
DQ添加一个上拉电阻,阻值一般为4.7KΩ左右(与I2C总线相似)
若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
单总线时序结构
初始化:
主机将总线拉低至少480us,然后释放总线,等待15 ~ 60us后,存在的从机会拉低总线60 ~ 240us以响应主机,之后从机将释放总线
sbit OneWire_DQ = P3^7; //DS18B20d
/*** @brief单总线初始化* @param无* @retval返回从机应答值,0为应答,1为不应答*/
unsigned char OneWire_Init()
{unsigned char i;unsigned char AckBit;OneWire_DQ = 1;OneWire_DQ = 0;i = 247;while (--i); //使用STC-ISP生成的500us延时OneWire_DQ = 1;i = 47;while (--i); //延时100usAckBit = OneWire_DQ;i = 247;while (--i); //延时500usreturn AckBit;
}
发送一位:
主机将总线拉低60 ~ 120us,然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
想发送0则按左边的时序,想发送1则按右边的时序
/*** @brief 主机发送一位* @param 要发送的数据位* @retval无*/
void OneWier_SendBit(unsigned char Bit)
{unsigned char i;OneWire_DQ = 0;i = 4;while (--i); //延时10usOneWire_DQ = Bit;i = 24;while (--i); //延时50usOneWire_DQ = 1;
}
接收一位:
主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1 ,整个时间片应大于60us
/*** @brief主机接收一位* @param无* @retval返回接收到的位*/
unsigned char OneWire_ReceiveBit()
{unsigned char i;unsigned char Bit;OneWire_DQ = 0; //先将总线拉低i = 2;while (--i); //延时5usOneWire_DQ = 1; //释放总线i = 2;while (--i); //延时5usBit = OneWire_DQ; //读取总线i = 24;while (--i); //延时50usreturn Bit;
}
解释:
主机接收0:主机拉低总线几us后,释放总线,如果从机立马拉低总线,则表示从机想发送0,主机应该在15us的末尾读取总线状态0
主机接收1:主机拉低总线后,释放总线,从机并没有拉低总线,则表示从机想发送1,主机在15us末尾读取总线状态1
发送一个字节:
连续调用8次发送一位的时序,依次发送一个字节的8位(低位在前)
/*** @brief 发送一个字节* @param要发送的数据* @retval无*/
void OneWire_SendByte(unsigned char Data)
{unsigned char i;for(i = 0; i < 8; i++){OneWier_SendBit(Data & (0x01<<i));}
}
接收一个字节:
连续调用8次接收一位的时序,依次接收一个字节的8位(低位在前)
/*** @brief 接收一个字节* @param无* @retval返回接收到的数据*/
unsigned char OneWire_ReceiveByte()
{unsigned char i;unsigned char Data = 0x00;for(i = 0; i < 8; i++){if(OneWire_ReceiveBit()){Data|=(0x01<<i);}}return Data;
}
单总线编程介绍(用于DS18B20)相关推荐
- C#多线程编程介绍——使用thread、threadpool、timer
C#多线程编程介绍--使用thread.threadpool.timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread ...
- 新手必看的编程介绍,帮你推荐学习方案!
新手必看的编程介绍,帮你推荐学习方案! VB是什么? ) y0 {6 G# G; j3 B VB 是Visual Basic编程语言 * B. O2 G# z) O1 |- g8 `4 ^ 编写计算机 ...
- wxWidgets GUI 编程介绍
wxWidgets GUI 编程介绍 导论 wxWidgets 是C++的跨平台开发框架.它由 Julian Smart 于1992年在爱丁堡大学人工智能应用研究院发起的,自那之后,该框架分发到了众多 ...
- JS高级进阶总结day01---面向对象编程介绍,new的工作原理以及构造函数,原型对象,实力函数三者之间的关系
02-面向对象编程 1.1-面向对象编程介绍 本小节知识点 1.理解什么是面向对象编程 面向对象不是一门技术,而是一种解决问题的思维方式 面向对象的本质是对面向过程的一种封装 2.理解什么是对象 对象 ...
- 来吧,嘤!,c++高级编程介绍
c++高级编程介绍 学c++确实是件痛苦的事,这水平得一步步抬上去,实话说学校教的也不好,就更痛苦了,还要学这学那,对技术没半点提升.最近就在学这个,没得方向,只好自己归纳了.嘤!嘤! 目录 预处理 ...
- UE4入门学习4:C++编程介绍
- - 文章 UE4入门学习4:C++编程介绍 作者 游蓝海( http://blog.csdn.net/you_lan_hai ) UE4直接使用C++作为逻辑层语言,这样引擎层与逻辑层语言统一,不 ...
- 计算机概述(三)——编程介绍
计算机概述系列目录 第一章 计算机概述(一)--计算机发展历程与基础表示 第二章 计算机概述(二)--构建CPU 第三章 计算机概述(三)--编程介绍 文章目录 计算机概述系列目录 前言 一.早期的编 ...
- Reactor (1)Mono和Flux进行响应式编程介绍
Reactor Mono和Flux进行反应式编程 官网:https://projectreactor.io/ 教程:https://projectreactor.io/docs/core/releas ...
- 2021年大数据常用语言Scala(二十):函数式编程 介绍
目录 函数式编程 介绍 函数式编程的意义在哪? 函数式编程 介绍 我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程.下面的这些操作是学习的重点. 现在我们将会逐渐接触函数式编程的方 ...
最新文章
- Sprint(第十天11.23)
- 限时抢订!价值4800元TechNet Plus赠阅一年!今天己到哈~~~
- python路径找类并获取静态字段
- Android Activity学习笔记——Activity的启动和创建
- 同步装饰器来替换线程安全类
- 使用模拟的单元测试–测试技术5
- Centos7 开机启动汇总
- python经典程序实例-Python简单基础小程序的实例代码
- 日志模块logging
- win10系统如何启动sql服务器,升级win10后sql2005 sql服务无法启动如何解决
- 360系统修复过程中卡慢问题的解决方案
- Unity Kinect体感跑酷互动游戏方案
- linux sdl windows.h,SDL入门教程(十):1、多语言支持,Win32下的GetText
- HJ82 将真分数分解为埃及分数(需要知道求埃及数的数学方法)
- mysql 部分汉字乱码_一次mysql部分汉字乱码解决过程
- grep的语法和用法
- subprocess模块call的用法
- 计算机毕业论文会计,会计毕业论文6000字
- js如何打开编辑服务器端文件夹,js 打开本地或共享文件夹
- mysql类型转换及小数点保留问题(cast函数)
热门文章
- python 爬网页版钉钉消息_Python实现钉钉订阅消息功能
- 【交通信号灯相位说明及设置】
- 能玩java游戏oppo按键手机_游戏手机排行榜 | OPPO Reno果然不负期待
- Office这么多版本傻傻分不清,到底哪个版本好用?
- 北邮计算机专业的培养方案,现代邮政学院2016级专业培养方案-北京邮电大学.PDF...
- + kt360buy - 牛肉丸是用牛的什么部位做的
- 换屏后sim卡显示无服务器,话机屏幕上显示“插入SIM卡”、“SIM卡无效”、“请插入UIM卡”,“无法获得网络服务”或“紧急呼叫”...
- webapi2学习笔记
- 生活中常见的电压值,你知道多少?
- 浅析安科瑞无线测温装置在香港科技大学配电系统中的设计应用