C51单总线时序图分析与底层编程配置(DS18B20为例)

2023-05-16

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、场景
  • 二、编程实现
    • 1.初始化(复位)
    • 2.写入数据
    • 3.读数据
    • 4.测试
  • 总结


前言

单片机与外设之间的数据通讯常用的主要有:I2C、SPI、SCI总线。
I2C:同步串行二线制(1时钟线1数据线)
SPI:同步串行三线制(1时钟线1输入线1输出线)
SCI:异步通讯(1输入线1输出线)
单总线:1根线,既有时钟,又有双向数据


提示:本章主要为了了解时序图及单总线操作原理

一、场景

示例:基于DSB18B20进行单总线通讯的底层配置,主要是看懂时序图,其它单总线器件原理相同。结合代码与时序图,相对容易理解点。

二、编程实现

1.初始化(复位)

检测是否存在单总线器件(若有则会返回一个低脉冲,无则一直是高电平)。
时序图如下:
在这里插入图片描述
代码如下(示例):

bit SingleWireRst()
{
	bit ACK;		//定义一个应答信号
	EA = 0;	//关闭中断,防止干扰
	DS18B20 = 0;			//1. 总线拉低
	Delay600us();				//2.延时480us~960us,设600us
	DS18B20 = 1;					//3. 总线拉高(上拉电阻)
	Delay60us();						//4.等待15~60us,设60us。等待DS18B20拉低
	ACK = DS18B20;					//5. 总线信号返回
	while(!DS18B20);			//6.等待DS18B20拉低总线
	Delay240us();			//7.等待DS18B20释放总线
	EA = 1; //释放中断
	return ACK;			//8. 结果返回,若器件存在则0,否则一直是单总线的高电平
}

2.写入数据

时序图如下:
写0/1有共同点:拉低一段时间,等待18B20采样ok,再拉高总线
写0时,18B20采样15us~60us。
写1时,拉低总线后,大于1us到无穷大再拉高总线都可以,且18B20采样15 ~60us。
因此,可以都设计为60us,合在一起判断
在这里插入图片描述
提示:加深的采样块,代表DS18B20自身拉低/拉高电压
代码如下(示例):

unsigned char WriteSingleWire(unsigned char vdat)
{
	UC tmp;
	EA = 0;
	for(tmp = 0x01; tmp != 0; tmp <<= 1)	//按位操作
	{
		DS18B20 = 0;	//1. 拉低总线
		_nop_();			//2. 延时大于1us到无穷大,设2us
		_nop_();
		if(vdat & tmp)	//3. 判断写的位是1还是0
		{
			DS18B20 = 1;	//4.写1时,拉高总线,随后等待采样
		}
		else
		{
			DS18B20 = 0;	//5.写0时,拉低总线,随后等待采样
		}
		Delay60us();		//6.等待DS18B20采样完成,15us~60us,设60us
		DS18B20 = 1;	//7. 1位采样完成,拉高总线
	}
	EA = 1;
	return 0;
}

3.读数据

在这里插入图片描述
提示:竖立加深的操作块,代表总线采样读取位操作要在总线被拉高之前。若位是0,会被DS18B20主动拉低,若是1,会被DS18B20主动拉高。
代码如下(示例):

unsigned char ReadSingleWire()
{
	UC tmp;
	UC dat;
	EA = 0;
	for(tmp = 0x01; tmp != 0; tmp <<= 1)
	{
		DS18B20 =  0;	//1.拉低总线
		_nop_();			//2.延时大于1us,15us内完成读取,设2us
		_nop_();
		DS18B20 = 1;	//3.拉高总线,开始读取
		_nop_();
		_nop_();			//4.延时等待DS18B20动作
		if(DS18B20)
		{
			dat |= tmp;	//5.读1
		}
		else
		{
			dat &= ~tmp;	//6.读0
		}
		Delay60us();
	}
	EA = 1;
	return dat;
}

4.测试

若有BS18B20,数码管显示0,否则显示1

	#if 0
		/******测试是否存在单总线器件********/
		UC ACK;
		ACK = SingleWireRst();
		SEG_DisBuf[0] = ACK;
		SEG_DisBuf[1] = 23;
		SEG_DisBuf[2] = 23;
		SEG_DisBuf[3] = 23;
	#endif

在这里插入图片描述


总结

1.微秒级操作,操作时序时关闭中断,完成后再打开,防止干扰
2.等待时间选最大,防止遗漏。上拉电阻体现在总线拉高
3.不同的单片机IC电路,软件延时需要注意调整

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C51单总线时序图分析与底层编程配置(DS18B20为例) 的相关文章

  • node.js环境一键部署

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Golang Interface小结

    1 概述 1 1 简介 接口是一种规范 xff0c 描述了类的行为和功能 xff0c 而不做具体实现 C 43 43 定义接口的方式称为 侵入式 xff0c 而Go采用的是 非侵入式 xff0c 不需要显式声明 xff0c 只需要实现了接口
  • UART 简介

    1 引脚 UART 是一种异步全双工通信方式 xff0c 所以除了电源引脚之外 xff0c UART 常有引脚有 TXD xff0c RXD xff1b 除此之外还有硬件流控引脚 RTS 和 CTS TXD 是发送引脚 xff0c RXD
  • 无人机飞控三大算法:捷联式惯性导航系统、卡尔曼滤波算法、飞行控制PID算法

    无人机飞控三大算法 xff1a 捷联式惯性导航系统 卡尔曼滤波算法 飞行控制PID算法 一 捷联式惯性导航系统 说到导航 xff0c 不得不说GPS xff0c 他是接受卫星发送的信号计算出自身位置的 xff0c 但是当GPS设备上方被遮挡
  • [学习笔记-01]关于单片机的中断处理机制(一)

    单片机的中断处理机制 1 什么是中断 xff1f 1 1 为什么要使用中断 中断的特点 1 2 什么是中断源 xff1f 1 2 1中断源有哪些 2 中断机制的流程3 中断优先级3 1 多个中断同时发生3 2 中断嵌套 1 什么是中断 xf
  • 黑苹果突然某一天无法上网?可能设置了BIOS,这样可以有网了!

    如图所示 xff0c 本人是微星迫击炮B450 xff08 非MAX xff09 xff0c 进入BIOS设置网卡 xff0c 可以解决这样的没网的问题 如果各位的BIOS不是微星 xff0c 也没有关系 xff0c 可以找到类似的功能就可
  • LSTM模型、双向LSTM模型以及模型输入输出的理解

    循环神经网路 xff08 RNN xff09 在工作时一个重要的优点在于 xff0c 其能够在输入和输出序列之间的映射过程中利用上下文相关信息 然而不幸的是 xff0c 标准的循环神经网络 xff08 RNN xff09 能够存取的上下文信
  • 无人机中的PID控制代码略解

    无人机中的PID控制代码略解 PID的控制规律 xff1a 参考 xff1a Amov实验室 PX4中级课程 PID基础 频域函数 xff1a u s
  • 如何用Python在图片上绘制BoundingBox

    参考资料 xff1a https blog csdn net weixin 41735859 article details 106599903 在目标检测等CV领域的任务里 xff0c 经常会涉及到在图片上绘制BBox xff0c 也就是
  • uart

    1 关于UART的基本特性 xff1a xff08 1 xff09 异步串行通信 xff0c 可为全双工 半双工 单发送TX或单接收RX模式 xff1b xff08 2 xff09 支持5 xff5e 8位数据位的配置 xff0c 波特率几
  • STM32--数码管显示使用

    STM32 数码管显示 简介 1 硬件部分 STM32F103C8T6 最小系统板 一位共阴数码管 2 软件部分 Keil软件编程 数码管码表 硬件部分 数码管 简介 数码管 xff0c 也称作辉光管 xff0c 是一种可以显示数字和其他信
  • LXC 和 LXD 容器总结

    1 概述 1 1 LXC LXC是Linux Containers的缩写 它是一种虚拟化技术 xff0c 通过一个Linux内核在一个受控主机上虚拟地运行多个Linux系统 LXC使用内核的Cgroups功能 xff0c 来提供进程和网络空
  • Altium designer -- 基本规则设置--间距设置Clearance

    Altium designer 基本规则设置 xff08 1 xff09 间距设置Clearance 硬件设计 软件 Altium designer 10PCB设计 间距设置 规则名称1 xff1a Clearance 一般间距 最小间距
  • Python 百度智能云文字识别 实现手写文字识别

    Python 实现手写文字识别 简介 百度智能云人工智能平台文字识别接口使用下载IP摄像头应用 调用手机摄像头 xff0c 实现拍照实现文字识别 Python 百度智能云人工智能文字识别接口 实现手写文字识别 百度智能云 创建应用 创建Py
  • Python 天气 简单 数据分析及可视化

    Python 天气情况数据分析及可视化 环境配置 Pycharm开发环境 python 版本 python3 7 Anconda 集成开发环境 第三方库导入 span class token comment pip install 模块 清
  • STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示

    STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示 简介 BMP280是博世最新推出的数字气压传感器 xff0c 具有卓越的性能和低廉的价格 xff0c 相对精度为 0 12 hPa xff08 相当于 1米 xff09
  • 51单片机学习 光敏电阻传感器实验

    51单片机学习 光敏电阻传感器实验 一 光敏电阻模块简介 光敏电阻传感器模块是对光线敏感度的反应 xff0c 一般用来检测探头周围光线的强度 xff08 亮度 xff09 xff0c 可以通过DO输出数字信号1和0 xff0c 也可以通过A
  • 基于STM32的物联网环境监测系统

    基于STM32的物联网环境监测系统 xff08 Internet of Things environmental monitoring system based on STM32 xff09 基于机智云物联网的环境监测系统 视频演示 摘 要
  • 合宙ESP32S3 CameraWebServe 测试demo

    合宙ESP32S3 CameraWebServe 合宙ESP32S3 CameraWebServe测试 xff0c 我们需要一个OV2640的摄像头模组用来采集图像传输给ESP32的 xff0c 这里使用的OV2640是之前安信可十周年的白
  • 【学习笔记汇总】OpenStudyNote

    OpenStudyNote https imgse com i ppE5FpQ 本科毕业设计 Internet of Things environmental monitoring system based on STM32 STM32系列

随机推荐

  • 计算机视觉:场景识别(Scene Recognition)

    计算机视觉 xff1a 场景识别 xff08 Scene Recognition xff09 场景识别图像分类特征提取词袋模型集成学习分类器 算法设计结果分析总结与展望总结展望 完整程序请移步至此链接下载 场景识别 在这个项目中 xff0c
  • ROS学习笔记(六):TF坐标变换

    ROS学习笔记 xff08 六 xff09 xff1a TF坐标变换 TF的基本知识TF工具tf monitortf echostatic transform publisherview framesrqt tf tree 各坐标系及其关系
  • String, Int 和 Byte数组

    1 Bytes amp String 1 1 Bytes 61 gt String Python byte array span class token operator 61 span span class token builtin b
  • 嵌入式如何学习与职业规划

    前言 xff1a 本笔记为百问网7天物联网智能家居训练营学习总结 如何学习与职业规划 仔细观察一下周围的电子设备 xff0c 比如包里的手机 xff0c 戴着的手环 xff0c 开着的空调 家里的洗衣机 扫地机器 人 监控摄像头 智能电视
  • 逻辑盘(lvm)扩容

    1 已经创建lvm 2 扩容 目的 xff1a 把sdb容量扩给 目录 2 1 xff1a dev sdb 分区格式化 span class token function fdisk span dev sdb 命令 span class t
  • 整一篇整一篇,python3实现自动重启路由器的上的花生壳(selenium)

    python3实现自动重启路由器的上的花生壳 xff08 selenium xff09 需求介绍 xff1a 我路由器上绑定的花生壳总是失效 xff0c 解决办法是重启动一下就正常了 所以使用python3的selenium来实现 xff0
  • 运维面试题库收集

    运维面试题库收集 mysql主从同步原理 主库 打开binlog日志 xff0c 每当有从库连接到主库的时候 xff0c 主库都会创建一个线程然后发送binlog内容到从库 对于每一个即将发送给从库的sql事件 xff0c binlog输出
  • Ubuntu 20.04 安装Arkime流量分析工具

    Ubuntu 20 04 安装Arkime流量分析工具 1 安装ES span class token hvariable apt span span class token operator span span class token h
  • 数据误删除,恢复工具之R-STUDIO

    数据误删除恢复 下载地址 xff1a https download csdn net download weixin 43606975 85475091 打开软件工具R STUDIO如图 xff1a 找到对应的硬盘分区 xff0c 点击2次
  • k8s 1.23.1 部署 prometheus 钉钉推送 自定义监控配置 promql基础语法

    k8s环境安装 xff1a https blog csdn net weixin 43606975 article details 119947061 spm 61 1001 2014 3001 5502 部署prometheus v0 1
  • docker-compose 安装部署rancher 添加已有k8s集群并管理

    docker compose 安装部署 xff1a https blog csdn net weixin 43606975 article details 121159745 spm 61 1001 2014 3001 5502docker
  • jenkins动态节点添加配置和使用方式为docker in docker

    jenkins动态节点添加配置和使用 安装docker模块配置 mounts内容解释 xff1a span class token builtin type span span class token operator 61 span bi
  • k8s elk之logtash日志数据筛选、合并、字段匹配、索引区分

    申明 xff1a 我想把我收集的日志中不需要的数据 xff0c 在kibana上不展示 我想索引名字按照日志中某个字段定义名称我想把日志几行合并为一行在kibana上展示 1 安装基础环境 安装es span class token com
  • KubeEdge 二进制安装

    1 准备工作 角色IP组件k8s master192 168 3 34kube apiserver xff0c kube controller manager xff0c kube scheduler xff0c docker etcd x
  • 手动搭建VUE开发环境

    1 搭建webpack基础环境 1 1初始化项目 npm init 此时会生成一个webpack json文件 xff0c 主要是生成项目的基础信息 1 2安装webpack及手脚架 npm install webpack webpack
  • k8s部署Pyroscope并分析golang性能瓶颈

    Pyroscope是什么 Pyroscope是一种开源的应用程序性能分析工具 xff0c 它可以帮助我们发现和解决应用中的性能问题 Pyroscope支持多种编程语言并提供了丰富的性能数据 xff0c 可以帮助我们跟踪应用程序的执行情况 x
  • Jetson TX2上配置archiconda、Yolov5、tensorrtx环境问题记录

    文章目录 前言本文主要记录在Jetson TX2上配置archiconda Yolov5 tensorrtx环境中遇到的问题以及解决方法 以及一些包的分享 一 Jetson TX2刷机二 安装archiconda三 安装torch和torc
  • 二进制信号量和互斥信号量的区别

    二进制信号量和互斥信号量的区别 互斥量用于线程的互斥 xff0c 信号量用于线程的同步 这是互斥量和信号量的根本区别 xff0c 也就是互斥和同步之间的区别 互斥 xff1a 是指某一资源同时只允许一个访问者对其进行访问 xff0c 具有唯
  • 如何用xmanager启动Linux上的图形界面程序

    对于无法直接进入服务器桌面化的同学来说 xff0c 安装oracle等需要调用图形化简便安装的软件着实有些困难 xff0c 接下来我就说说如何通过xmanager调用远程桌面在自己桌面展示 1 首先下载xmanager并安装 xff1b 2
  • C51单总线时序图分析与底层编程配置(DS18B20为例)

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一 场景