I2C通信读写数据过程_i2c怎么读数据-程序员宅基地

技术标签: 蓝桥杯嵌入式比赛  

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;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36554582/article/details/87989756

智能推荐

目标检测YOLO实战应用案例100讲-智能目标检测系统在FPGA中的设计与实现_yolo fpga-程序员宅基地

文章浏览阅读1.7k次。本文结合FPGA芯片的高并行、低功耗、可重配置等优势,对基于卷积神经网络结构的目标检测算法,在端侧场景下的加速与部署进行研究与实现。本章节对本文涉及到的基本理论知识与技术手段进行介绍,为后续系统的方案分析与系统设计奠定理论基础。首先,介绍了卷积神经网络的基本组成部分及其原理。然后,对FPGA及其开发技术进行简单介绍。最后,对当前常用的部分基于FPGA的卷积神经网络加速方法进行概述。_yolo fpga

缓冲区溢出(Buffer Overflow)_buffer over flow l-程序员宅基地

文章浏览阅读1.2w次。堆栈溢出堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前,先了解以下几个概念:缓冲区 简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出 (LIFO)队列。堆栈中定义了一些操作。两个最重要的是PU..._buffer over flow l

AQS 源码流程分析_aqs 入对之后就一定顺序执行-程序员宅基地

文章浏览阅读455次。我们日常开发中,经常会碰到并发的场景,在 Java 中语言体系里,我们会想到 ReentrantLock、CountDownLatch、Semaphore 等工具,但你是否清楚它们内部的实现原理?这些工具都很类似,底层都是基于AbstractQueuedSynchronizer(AQS)来实现的。今天我们就来一起学习 AQS 内部原理。_aqs 入对之后就一定顺序执行

C语言--编写程序,绘制菱形图_c语言画菱形-程序员宅基地

文章浏览阅读4.1k次。编写一个程序,在屏幕上显示如下图形(图形的层数有输入者自行定义)源代码如下所示:#include<stdio.h>int main(){ int line; // 菱形总行数 int column; // 菱形总列数 int i; // 当前行 int j; // 当前列 printf("请输入菱形的行数(奇数):"); scanf("%d", &line); while(2) { if(line%_c语言画菱形

怎么实现跨域?配置vue跨域proxy,jsonp跨域很简单-程序员宅基地

文章浏览阅读760次,点赞10次,收藏28次。/ 封装axios请求的模块// 用axios重新生成了请求的实例baseURL: ‘’, // 项目发送axios请求的公共地址 值为空timeout: 5000 // 请求超时时间 这里是请求超过五秒后还没有获得请求结果 提示请求超时})// config包含了请求相关的所有信息// 可以同过config对象给请求配置或者修改信息return config // 将配置完成的token返回 如果不返回 请求不会继续进行// 请求发生错误时的回调函数。

兼容Office和WPS中Word图标库_wps officeimageid-程序员宅基地

文章浏览阅读108次。最近在用c#写VSTO文字操作插件,因为要同时在WPS中有效,因此进行了提取。_wps officeimageid

随便推点

苹果 macOS Sonoma 14 开发者预览版 Beta 3 发布_mac os sonoma最新版本-程序员宅基地

文章浏览阅读81次。苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 3 更新。但是并未发现 macOS 14 Sonoma 的第三个开发者测试版的新功能,且更新日志和 Beta 2 类似。_mac os sonoma最新版本

ES6-17【类、类的继承、类的实现、类的修饰】_es6 类修饰 详解-程序员宅基地

文章浏览阅读270次。一.类(1).基础最简单的定义方式class Person{}log(new Person());//Person{}log(typeof Person);function标准写法class Person{ constructor(name = "zhangsan",age = "18"){ //私有属性 this.name = name; this.age = age; } //公有属性 _es6 类修饰 详解

Java 常用类 03 可变字符串和BigDecimal(BigInteger)_java字符串和bigdecimal类-程序员宅基地

文章浏览阅读335次。3.1 可变字符串和BigDecimal3.1.1 可变字符串由于我们的字符串,是不可变的。每次都要在 字符串池里 新建和共享。这样效率很低,而且占用空间大。我们的 Java 就开发了 可变字符串下面的两者,都比传统的 String 类型要快很多。① StringBuffer:JDK1.0提供的,效率低,线程安全。它是实现开辟一个缓冲区,然后操作的时候,直接在 缓冲区里进行操作。② StringBuilder:JDK5.0提供的,效率高,线程不安全3.1.2 StringBuffer①_java字符串和bigdecimal类

【基于FPGA的芯片设计】32×32位寄存器堆_fpga2s需要多少位寄存器-程序员宅基地

文章浏览阅读2.6k次,点赞9次,收藏2次。32×32位寄存器堆设计,杭电计算机组成原理实验四,实验的开发工具是vivado2018,vivado2022也兼容2018_fpga2s需要多少位寄存器

STM32F103 软件实现随机数_stm32f103c8t6可以生成随机数么-程序员宅基地

文章浏览阅读644次。因为STM32F103C8T6,没有硬件随机数,所以需要自己通过软件配置。最后得到的mmm1变量为一个0~100的随机值。首先增加一段include用于产生真随机数。_stm32f103c8t6可以生成随机数么

微信h5页面打开微信内置地图及wx.openLocation回调成功调不起页面的问题_h5 wx.openlocation-程序员宅基地

文章浏览阅读4.5k次。先说下需求吧,我们的需求是通过一个经纬度,然后打开微信内置的地图页面代码如下://导航到停车场 gogogo() { //获取当前页面url //var url = location.href.split('#')[0]; // alert(11111) // window.location.href = // "https://apis.map.qq.com/uri/v1/marker?marker=coord:30.595810_h5 wx.openlocation

推荐文章

热门文章

相关标签