I2C通信读写数据过程

2023-10-27

1、先来看读数据的操作流程
在这里插入图片描述
这里面需要注意的有:

  • I2C通信启动后面不需要等待应答信号
  • 写入数据地址之后,下一步不能直接进行读取数据,需要先再一次地开启动I2C通信才可以
    程序如下:
u8 x24c02_Read(u8 address)
{
	u8 dat;
	I2CStart();//注意开启I2C之后,不需要进行应答信号的等待,如果加上了应答信号的等待,可能会导致数据无法进行正常读取
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(address);
	I2CWaitAck();
	
	I2CStart();//注意此处必须再重新开启I2C

	I2CSendByte(0xa1);
	I2CWaitAck();
	dat = I2CReceiveByte();
	I2CWaitAck();
	
	I2CStop();
	I2CWaitAck();

	return dat;
}

2、再来看数据写入的过程
在这里插入图片描述
这里面需要注意的有:

  • I2C通信启动后面不需要等待应答信号
  • 写入数据地址之后,经过一个应答信号的等待,下一步就可以直接进行写入数据

程序如下:

void x24c02_Write(u8 address,u8 dat)
{
	I2CStart();//注意开启I2C之后,不需要进行应答信号的等待,如果加上了应答信号的等待,可能会导致数据无法进行正常读取
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(address);
	I2CWaitAck();
	I2CSendByte(dat);//写入数据地址之后,这里可以直接进行数据的读取
	I2CWaitAck();
	I2CStop();
}

谨记:

  • I2C通信的启动后面不需要进行应答信号的等待
  • 在每一次的读操作或者写操作函数的后面,都需要加上几毫秒的延时,否则会导致数据读取错误
    如:
	temp = x24c02_Read(0x00);
	Delay_Ms(10);
	x24c02_Write(0x00,++temp);
	Delay_Ms(10);
  • 0xa0是设备地址+写命令
  • 0xa1是设备地址+读命令

3、写入32位整型数据:

void x24c02_Write_int(u8 address,int dat)
{
	x24c02_Write(address,(u8)(dat & 0xff));
	Delay_Ms(2);
	x24c02_Write(address+1,(u8)(dat >> 8 & 0xff));
	Delay_Ms(2);
	x24c02_Write(address+2,(u8)(dat >> 16 & 0xff));
	Delay_Ms(2);
	x24c02_Write(address+3,(u8)(dat >> 24 & 0xff));
	Delay_Ms(2);
}

4、读取32位整型数据:

int x24c02_Read_int(u8 address)
{
	int dat;
	dat = (int)x24c02_Read(address);
	Delay_Ms(2);
	dat += (int)x24c02_Read(address+1) << 8;
	Delay_Ms(2);
	dat += (int)x24c02_Read(address+2) << 16;
	Delay_Ms(2);
	dat += (int)x24c02_Read(address+3) << 24;
	Delay_Ms(2);
	return dat;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C通信读写数据过程 的相关文章

  • 软件测试需要学什么?软件测试技能图谱

    很多新手 不知道软件测试学习该如何开始 软件测试需要掌握哪些知识 下面是根据本人的理解 粗略整理的一个学习大纲 基本上涵盖了软件测试工程师需要掌握的全部技能 希望对刚入行或者准备学习测试的朋友提供一点指引 1 测试基础理论 不管有没有计算机
  • docker 搭建 Jenkins 容器 ,拉取git代码

    Docker 搭建 Jenkins 容器 拉取git代码 一 安装jenkins 前提条件 宿主机安装docker 1 拉取镜像 docker pull jenkins jenkins 2 查看镜像 docker images 列表中有je
  • C++ 引用作为函数返回值

    1 以引用返回函数值 定义函数时需要在函数名前加 2 用引用返回一个函数值的最大好处是 在内存中不产生被返回值的副本 引用作为返回值 必须遵守以下规则 1 不能返回局部变量的引用 主要原因是局部变量会在函数返回后被销毁 因此被返回的引用就成
  • unity音效添加

    音频资源AudioClip 播放的音频通过摄像头上的Audio Listener监听 Audio Listener有且只有一个 否则会报警告 创建一个空对象 重命名为Music Player 音频源 为其添加上Audio Souce组件 将
  • Mysql - 直接查询存储的Json字符串中的数据

    我们平时使用mysql 出于项目需求 可能需要直接将Java对象或者一个大json 直接存到表中的某个字段中 使用的时候再查出来 反序列化到对象或者一个Map中 方便我们操作 大多时候 我们可能并不需要所有的数据 只想使用这个对象或者jso
  • 详解synchronized与Lock的区别与使用

    引言 昨天在学习别人分享的面试经验时 看到Lock的使用 想起自己在上次面试也遇到了synchronized与Lock的区别与使用 于是 我整理了两者的区别和使用情况 同时 对synchronized的使用过程一些常见问题的总结 最后是参照
  • 关于easyExcel实体字段对应日期类型格式化问题

    可以写一个实体转换器来实现easyExcl中的Converter接口 可参考easyExcel官方文档中的 Alibaba Easy Excel 简单 省内存的Java解析Excel工具 读Excel
  • MATLAB实现传递函数

    1 简单的传递函数模型 num 1 10 den 1 5 4 3 2 G tf num den 2 零极点模型 KGain K 系统增益K Z 1 2 3 零点 P 4 5 6 极点 G zpk Z P KGain 3 反馈系统 G1 tf
  • 阿里马涛:重新定义云时代的开源操作系统

    作者 Just 出品 CSDN ID CSDNnews 随着云计算的发展 以及Linux平台的不断发展和生态系统的不断完善 越来越多的企业 云服务提供商都将Linux作为其数据中心的首选操作系统 不过 作为云基础设施的底座 针对云上产品和环
  • HyperLedger Fabric链码开发及测试

    https blog csdn net TripleS X article details 80550401 https blog csdn net weixin 44676392 article details 87938451 http
  • C# 实现多种语言切换,通过VS实现

    步骤 1 在要更换语言的界面 如Form1界面 选择属性 Language 选择要使用的语言 如下图 2 添加完语言之后VS会自动生成对应语言的 resx文件 通过该文件可以编辑语言 由于VS已经给我们添加了该界面的所有字段和变量 所以我们
  • 海思his35xx安防芯片音视频媒控驱动基础篇MIPI RX模块(一)

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 二维码如下 一 背景介绍 海思芯片的应用方向大致分为如下
  • python安装库出现retrying-Python之retrying

    retrying是一个很好用的关于重试的Python包 可以用来自动重试一些可能会运行失败的程序段 为什么选择retrying 我们在写一些程序的时候 会去调用一些外部资源 组件 这些外部程序对我们来说是不可控的 所以它们不可用 运行失败都
  • SqlServer数据库删除数据

    数据库删除数据的三种代码方式 1 删除表结构及所有数据 drop table table name 2 恢复表格出厂设置 id清空 truncate table table name 3 删除表数据 delete from table na
  • 期货怎么满仓(期货为什么不能满仓操作)

    期货满仓怎么bao cang q 您是想问期货满仓爆仓怎么处理吗 满仓交易的风险就是会强制平仓 也就是所谓的爆仓 爆仓是指 1 投资者帐户权益为负数 表明投资者不仅输光了全部保证金而且还倒欠期货经纪公司债务 2 发生爆仓时 投资者必须及时将
  • 红帽认证主要考哪些内容呢

    红帽认证考试主要考以下内容 RH124 红帽系统管理I 主要涉及访问命令行 从命令行访问文件 获取RHCEL7帮助信息 创建及查看编辑文件 管理用户和用户组 管理文件和目录权限 监视和管理Linux进程 控制服务和后台进程 管理OpenSS
  • Android自定义自动换行LinearLayout探索与实现

    Android自定义自动换行LinearLayout探索与实现 在Android开发中 我们经常需求实现一些特定的布局效果以满足用户的需求 其中之一就是自动换行布局 即当容器内的子视图数量超过一行时 自动将多余的子视图放到下一行进行显示 本
  • go语言试用标准c 库,Go语言开发(十三)、Go语言常用标准库三

    Go语言开发 十三 Go语言常用标准库三 一 sync 1 sync简介 sync提供基本的同步原语 如sync Mutex sync RWMutex sync Once sync Cond sync Waitgroup 除了Once和Wa
  • Vue Collapse 中嵌套 Collapse 折叠板在tab切换后打不开了

    name也要改成indx 监听tab改变 清空vModel 在给vModel赋值 这样就解决了

随机推荐

  • Hive元数据上亿级别存储方案的实践

    问题导读1 什么是元数据 Federation 方案 2 怎样引入 Federation 方案 3 怎样改造现有服务 背景Apache Hive 是基于 Apache Hadoop 之上构建的数据仓库 提供了简单易用的类 SQL 查询语言
  • 备份Vss工程&建立Vss目录安全体系

    一 使用备份文件 ssa进行恢复时 1 若原来作的是archive all the date的备份 并且没有将原project删除 则 永久删除 原来的project再作恢复 2 若原来作的 archive this version and
  • springboot连接redis并动态切换database

    springboot连接redis并动态切换database 众所周知 redis多有个db 在jedis中可以使用select方法去动态的选择redis的database 但在springboot提供的StringRedisTemplat
  • KVM虚拟机热扩容

    创建一个虚拟机用于练习在线扩容 virt install name centos8 3 memory 4096 currentMemory 1024 vcpus 2 maxvcpus 8 disk var lib libvirt image
  • 解决echarts饼图显示百分比,和显示内容字体及大小,如何给eCharts饼图区域指定颜色

    解决echarts饼图显示百分比 和显示内容字体及大小 基于准备好的dom 初始化echarts实例 var pieEchart echarts init document getElementById pieEchart 指定图表的配置项
  • 模糊查询java.sql.SQLException: ORA-00933: SQL 命令未正确结束 踩坑经历

    ORA 00933 1 仔细检查sql语句是否缺少逗号 2 关键字是否缺少空格 3 SQL语句中缺少关键字或者多了某个关键字 and 4 在做模糊查询时 在仔细反复检查SQL语句的前提下 未发现错误 在数据库中能正确运行 控制台就报java
  • linux下acm串口读写,使用socat将Linux终端从串口转发到TCP

    我正在开发嵌入式ARM平台Slackware 我正在使用G24 Java调制解调器 它配置为在端口 dev ttyS1和 dev ttyACM0之间转发数据 因此任何进入任何这些端口的东西都可以在另一个端口上看到 我想在其中一个端口 dev
  • 常用的前端地图框架(WebGIS框架)

    常用的前端地图框架 WebGIS框架 1 Leaflet Leaflet 是最著名的前端地图可视化库 它开源 体积小 结构清晰 简单易用 2 Mapbox GL JS Mapbox GL JS 是目前最新潮的前端地图库 它的矢量压缩 动态样
  • 虚函数表

    虚函数表是实现多态的核心 所谓多态 就是 一个函数 多种实现 当我们通过类指针或引用调用一个函数接口时 编译器在运行期间将会根据该指针或引用实际指向的对象来调用函数 而这就是通过虚函数表来实现的 换种方式说 虚函数表 完成了动态联编中寻找虚
  • 难学吗计算机网络,自学计算机网络技术难吗?应该怎么学?

    感谢邀请 根据我所知道的回答一下这个问题 小编本科学习的数学 根计算机网络不搭边 后来工作中因为需要 学习的计算机网络 根据自己的学习历程说一说哈 如有不当请批评指正 网络基础很重要网络基础知识犹如地基 非常重要 理解网络设备的配置命令 排
  • java calendar 天_Java Calendar getActualMaximum()用法及代码示例

    Calendar类的getActualMaximum int field value 方法用于根据此Calendar的时间值返回指定日历字段可能具有的最大值 用法 public int getActualMaximum int field
  • python爬虫之图形验证码学习

    python爬虫之图形验证码学习 1 Tesseract介绍 2 Tesseract安装 3 Tesseract使用 4 打码云平台 1 Tesseract介绍 有时候我们在登录或者请求一些数据时候会遇到图形验证码 因此我们引入一种能将图片
  • Android版本28用http请求CLEARTEXT communication to www.xxxxx.com not permitted by network security policy

    Android版本28报错 CLEARTEXT communication to www xxxx com not permitted by network security policy 2019 10 09 17 37 35 394 1
  • 06 Cesium—基于Cesium ion的添加地形

    文章中所有操作均是在 Cesium 1 91 版本下进行的 其它版本差异请自行适配 Cesium ion Cesium ion 是一个提供瓦片图和3D地理空间数据的平台 Cesium ion 支持把数据添加到用户自己的 CesiumJS 应
  • 径向基-薄板样条插值数学公式、原理,以及代码实现基本过程

    径向基插值部分 有关径向基插值的基本概念参考 https blog csdn net qq 18343569 article details 48227839 isappinstalled 0 from groupmessage 径向基函数
  • 高斯-勒让德求积公式及Matlab实现

    初学Markdown编辑器 编排及内容错误请指正 谢谢 1 引言 众所周知 微积分的两大部分是微分与积分 微分实际上是求一函数的导数 而积分是已知一函数的导数 求这一函数 所以 微分与积分互为逆运算 实际上 积分还可以分为两部分 第一种 是
  • TeamViewer远程的三种访问模式 (最方便的模式无需输入密码)

    先说明一下什么是无人值守访问 顾名思义 就是在电脑另一端没有人的时候 也可以使用TeamViewer进行远程控制 无需另一端电脑确认 实际上下面三种模式都是无人值守访问 亲测都可以直接远程 当然 另一端的电脑必须是TeamViewer启动的
  • VC编译的五子棋游戏核心算法分析(附源码)

    转载请标明是引用于 http blog csdn net chenyujing1234 前段时间在CSDN的资源里载得五子棋VC的源码 由于忘了链接地址 这里没有标明出处 请作者谅解 但我也把在VS2005上编译通过且加入清楚的注释的源码放
  • 全国计算机等级考试题库二级C操作题100套(第85套)

    第85套 给定程序的功能是调用fun函数建立班级通讯录 通讯录中记录每位学生的编号 姓名和电话号码 班级的人数和学生的信息从键盘读入 每个人的信息作为一个数据块写到名为myfile5 dat的二进制文件中 请在程序的下划线处填入正确的内容并
  • I2C通信读写数据过程

    1 先来看读数据的操作流程 这里面需要注意的有 I2C通信启动后面不需要等待应答信号 写入数据地址之后 下一步不能直接进行读取数据 需要先再一次地开启动I2C通信才可以 程序如下 u8 x24c02 Read u8 address u8 d