当前位置: 首页 > news >正文

AT24C02读写操作 一

//AT24C02初始化

void AT24C02_Init(void)

{

    IIC_Init();

}

//AT24C02的字节写入   写一个字节

void AT24C02_WordWrite(uint8_Address,uint8_t Data)

{

        //1。主机发送开始信号

         IIC_StartSignal();

      //2.主机发送器件地址 写操作

         IIC_SentBytes(0xA0);

   //3.主机等侍从机应答

    if(IIC_WaitAck()==1)  //如果没有应答

     {

        printf("AT24C02 Ack Device Address Error\n");

         IIC_StopSignal();

      }

    printf(" AT24C02 Ack Device Address OK\N");

      //4.主机发送存储地址  写操作

      IIC_SendBytes(Address);

       

if(IIC_WaitAck()==1)  //如果没有应答

     {

        printf("AT24C02 Ack Data Address Error\n");

         IIC_StopSignal();

      }

    printf(" AT24C02 Ack Data Address OK\N");

//5主机发送存储数据   写操作

 IIC_SendBytes(Data);

if(IIC_WaitAck()==1)  //如果没有应答

     {

        printf("AT24C02 Ack Write Data Error\n");

         IIC_StopSignal();

      }

    printf(" AT24C02 Ack Write Date OK\N");

//6主机发送停止信号

             IIC_StopSignal();

  }

       //AT24C02读取一个字节   随机读

uint8_t   AT24C02_WordRead(uint8_t Address )

{

               

       uint8_t data=0;              

        

//1。主机发送开始信号

         IIC_StartSignal();

      //2.主机发送器件地址 写操作

         IIC_SentBytes(0xA0);

   //3.主机等侍从机应答

        if(IIC_WaitAck()==1)  //如果没有应答

             {

                printf("AT24C02 Ack Device Write  Address Error\n");

                 IIC_StopSignal();

                }

      printf(" AT24C02 Ack Device Write   Address OK\N");

//4.主机发送存储地址 打算读取数据的地址

       IIC_SendBytes(Address);

 //5主机等待应答

      if(IIC_WaitAck()==1)  //如果没有应答

             {

                printf("AT24C02 Ack Data Device Address Error\n");

                 IIC_StopSignal();

                }

          printf(" AT24C02 Ack Data  Device Address OK\N");

//6.主机再次发送开始信号

 IIC_StartSignal();

//7.主机发送器件地址 读操作

 IIC_SentBytes(0xA1);

 //8主机等待应答

      if(IIC_WaitAck()==0)  //如果没有应答

             {

                printf("AT24C02 Ack Device Read Address Error\n");

                 IIC_StopSignal();

                }

          printf(" AT24C02 Ack  Device Read Address OK\N");

  //9主机读取1个字节数据

                    data=IIC_ReadBytes( ); 当前读

   //10主机发送应答信号

                   IIC_MasterAck(1);

//11主机发送停止信号

                IIC_StopSignal();

return data

}

//读取n字节数据

void   AT24C02_RandomRead(uint8_t Address  uint8_t *RecvBuf uint8_t Dataleng)

{       

          

//1。主机发送开始信号

         IIC_StartSignal();

      //2.主机发送器件地址 写操作

         IIC_SentBytes(0xA0);

   //3.主机等侍从机应答

        if(IIC_WaitAck()==1)  //如果没有应答

             {

                printf("AT24C02 Ack Device Write  Address Error\n");

                 IIC_StopSignal();

                }

      printf(" AT24C02 Ack Device Write   Address OK\N");

//4.主机发送存储地址 打算读取数据的地址

       IIC_SendBytes(Address);

 //5主机等待应答

      if(IIC_WaitAck()==1)  //如果没有应答

             {

                printf("AT24C02 Ack Data Device Address Error\n");

                 IIC_StopSignal();

                }

          printf(" AT24C02 Ack Data  Device Address OK\N");

//6.主机再次发送开始信号

 IIC_StartSignal();

//7.主机发送器件地址 读操作

 IIC_SentBytes(0xA1);

 //8主机等待应答

      if(IIC_WaitAck()==0)  //如果没有应答

             {

                printf("AT24C02 Ack Device Read Address Error\n");

                 IIC_StopSignal();

                }

          printf(" AT24C02 Ack  Device Read Address OK\N");

  //9主机读取1个字节数据

Datalen=Datalen-1;

while(Datalen--)

{

                    *IRecvBuf++=IIC_ReadBytes( ); 

                          IIC_MasterAck(0);          //表示主机收到

}

*IRecvBuf=IIC_ReadBytes( );   //读最后一个字节

   //10主机发送应答信号

                   IIC_MasterAck(1);

//11主机发送停止信号

                IIC_StopSignal();

return data

}

//uint8_t AT24C02_CurrentAddressRead(void) 当前读 保存当前下一个地址

{     

                             uint8_t data=0;              

        

//1。主机发送开始信号

         IIC_StartSignal();

      //2.主机发送器件地址 读操作

         IIC_SentBytes(0xA1);

   //3.主机等侍从机应答

        if(IIC_WaitAck()==1)  //如果没有应答

             {

                printf("AT24C02 Ack Device Address Error\n");

                 IIC_StopSignal();

                }

printf(" AT24C02 Ack Device  Address OK\N");

      //4.主机读取1个字节数据

                    data=IIC_ReadBytes(); 当前读 读当前下一个地址

   //5主机发送应答信号

                   IIC_MasterAck(1);

//6主机发送停止信号

                IIC_StopSignal();

}

相关文章:

AT24C02读写操作 一

//AT24C02初始化 void AT24C02_Init(void) { IIC_Init(); } //AT24C02的字节写入 写一个字节 void AT24C02_WordWrite(uint8_Address,uint8_t Data) { //1。主机发送开始信号 IIC_StartSignal(); //2.主机发送器件地址 写操作 IIC_SentBytes(0xA0); //3.主机等侍从机应…...

.NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务

在这篇文章中,我们将了解 .NET 8 中为托管服务引入的一些新生命周期事件。请注意,这篇文章与 .NET 8 相关,在撰写本文时,.NET 8 目前处于预览状态。在 11 月 .NET 8 最终版本发布之前,类型和实现可能会发生变化。要继续…...

Redis--Geo指令的语法和使用场景举例(附近的人功能)

文章目录 前言Geo介绍Geo指令使用使用场景:附近的人参考文献 前言 Redis除了常见的五种数据类型之外,其实还有一些少见的数据结构,如Geo,HyperLogLog等。虽然它们少见,但是作用却不容小觑。本文将介绍Geo指令的语法和…...

127.0.0.1和0.0.0.0的区别

在网络开发中,经常会涉及到两个特殊的IP地址:127.0.0.1和0.0.0.0。这两者之间有一些关键的区别,本文将深入介绍它们的作用和用途。 127.0.0.1 127.0.0.1 是本地回环地址,通常称为 “localhost”。作用是让网络应用程序能够与本地…...

SpringBoot ES 聚合后多字段加减乘除

SpringBoot ES 聚合后多字段加减乘除 在SpringData Elasticsearch中,聚合统计的原理主要依赖于Elasticsearch本身的聚合框架。Elasticsearch提供了强大的聚合功能,使得你可以对文档进行各种计算和统计,从而得到有关数据集的有用信息。 Elast…...

React16源码: React中requestCurrentTime和expirationTime的源码实现补充

requestCurrentTime 1 )概述 关于 currentTime,在计算 expirationTime 和其他的一些地方都会用到 从它的名义上来讲,应等于performance.now() 或者 Date.now() 就是指定的当前时间在react整体设计当中,它是有一些特定的用处和一些…...

【论文阅读】Deep Graph Contrastive Representation Learning

目录 0、基本信息1、研究动机2、创新点3、方法论3.1、整体框架及算法流程3.2、Corruption函数的具体实现3.2.1、删除边(RE)3.2.2、特征掩盖(MF) 3.3、[编码器](https://blog.csdn.net/qq_44426403/article/details/135443921)的设…...

设计模式-简单工厂

设计模式-简单工厂 简单工厂模式是一个集中管理对象创建,并根据条件生成所需类型对象的设计模式,有助于提高代码的复用性和维护性,但可能会导致工厂类过于复杂且违反开闭原则。 抽象提取理论: 封装对象创建过程解耦客户端与产品…...

Django ORM 中的单表查询 API(1)

在 Django 中,对象关系映射(ORM)提供了一种功能强大、表现力丰富的数据库交互方式。ORM 允许开发人员使用高级 Python 代码执行数据库查询,从而更轻松地处理数据库实体。 下面,我们将探讨 Django ORM 中单表查询 API …...

电子雨html代码

废话不多说下面是代码&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Code</title><style>body{margin: 0;overflow: hidden;}</style></head><body><c…...

xadmin基于Django的后台管理系统安装与使用

xadmin是基于Django的后台管理系统 官网&#xff1a;http://sshwsfc.github.io/xadmin/ github地址&#xff1a;https://github.com/sshwsfc/xadmin 安装方式 pip安装 pip install xadmin在setting配置中添加&#xff1a; INSTALLED_APPS [xadmin,crispy_forms, ]在urls.py…...

[go语言]输入输出

目录 知识结构 输入 1.Scan ​编辑 2.Scanf 3.Scanln 4.os.Stdin --标准输入&#xff0c;从键盘输入 输出 1.Print 2.Printf 3.Println 知识结构 输入 为了展示集中输入的区别&#xff0c;将直接进行代码演示。 三者区别的结论&#xff1a;Scanf格式化输入&#x…...

【SpringBoot系列】AOP详解

🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收…...

openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c

文章目录 openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c概述笔记END openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c 概述 对私钥对明文做签名(摘要算法为SHA256) 用公钥对密文做验签(摘要算法为SHA256) 笔记 /*! \file rsa_pss_hash.c \note openss…...

Redis相关知识点

1.什么是Redis Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;数据库&#xff0c;它支持网络&#xff0c;可基于内存亦可持久化&#xff0c;并提供多种语言的API。Redis具有高效性、原子性、支持多种数据结构、…...

嵌入式开发--STM32G4系列片上FLASH的读写

这个玩意吧&#xff0c;说起来很简单&#xff0c;就是几行代码的事&#xff0c;但楞是折腾了我大半天时间才搞定。原因后面说&#xff0c;先看代码吧&#xff1a; 读操作 读操作很简单&#xff0c;以32位方式读取的时候是这样的&#xff1a; data *(__IO uint32_t *)(0x080…...

嵌入式-Stm32-江科大基于标准库的GPIO的八种模式

文章目录 一&#xff1a;GPIO输入输出原理二&#xff1a;GPIO基本结构三&#xff1a;GPIO位结构四&#xff1a;GPIO的八种模式道友&#xff1a;相信别人&#xff0c;更要一百倍地相信自己。 &#xff08;推荐先看文章&#xff1a;《 嵌入式-32单片机-GPIO推挽输出和开漏输出》…...

2024年1月17日Arxiv热门NLP大模型论文:THE FAISS LIBRARY

Meta革新搜索技术&#xff01;提出Faiss库引领向量数据库性能飞跃 引言&#xff1a;向量数据库的兴起与发展 随着人工智能应用的迅速增长&#xff0c;需要存储和索引的嵌入向量&#xff08;embeddings&#xff09;数量也在急剧增加。嵌入向量是由神经网络生成的向量表示&…...

深度解析JVM类加载器与双亲委派模型

概述 Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心&#xff0c;其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念&#xff0c;并解释它们在实际开发中的应用。 1. 什么是类加载器&#xff1f; 类加载器是JVM的一部分&#xff0c;负…...

前端下载文件流,设置返回值类型responseType:‘blob‘无效的问题

前言&#xff1a; 本是一个非常简单的请求&#xff0c;即是下载文件。通常的做法如下&#xff1a; 1.前端通过Vue Axios向后端请求&#xff0c;同时在请求中设置响应体为Blob格式。 2.后端相应前端的请求&#xff0c;同时返回Blob格式的文件给到前端&#xff08;如果没有步骤…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...