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

『51单片机』AT24C02[IIC总线]

存储器的介绍 

ROM的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。

注→在后面发展的ROM是可以可写可读并且是可以达到掉电不丢失的(但是它名字还是ROM)

🍎存放单片机工作时的程序,单片机在上电工作的时候,程序指令制导单片机完成设定的功能。没有ROM存储器,单片机是不能够进行工作的。
RAM的功能⇢RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。

🍏数据存储器(RAM)存储单片机运行期间所需要的数据和临时生成的数据是需要能够快速读出和写入数据的。此类存储器在掉电之后,存储的数据会丢失,并不能永久保存。

PROM:只能写入一次,第一次写好以后就一直是这个数据了不能被修改(一次性)

EPROM:PROM的升级版本。

E2PROM:AT24C02也是E2PROM。

RAM的优势⇢存储速度特别快。缺点⇢掉电丢失。

ROM的优势⇢掉电不丢失。缺点⇢存储比较慢速度更不上。

🍎综上所示⇢所以我们是需要这两者相互结合。

我们需要高速存储的使用就放进到RAM程序运行的时候都是存储在RAM里面,然后我们需要永久保存的时候就使用ROM存储。我们就很好的利用这两个存储器的长处。

存储单元

🍊说明⇢任何计算系统都需要两种类型的存储器→程序存储器和数据存储器。程序存储器,顾名思义,包含程序,即要由CPU执行的指令。另一方面,数据存储器需要在执行指令时存储临时数据。通常,程序存储器是只读存储器或ROM数据存储器是随机存储器或RAM。数据存储器有时也称为读写存储器(R/WM)

存储器的简化模型

注→上述右图的二极管[单向导电性]是防止对其它行产生干扰作用抑制干扰方式。

注→PROM之所以称之为:一次性编程是因为蓝色的二极管很容易被击穿,击穿之后就相当于短路了。而没有击穿就相当于是断开。

存储器在电路内部实际上都是一个网状结构。其中横向的线我们可以称之为是地址总线就是用来选择哪一位线就是哪一位地址,而下面这个线(纵向)就是我们的数据总线。

假设⇢我们选择了第一行给了一个高电平("1")剩下的我们暂时不接。然后我们把这些网格交错的地方第一个第二个第三个节点给连接上,剩下的都不进行连接。那么我们在读取下面的这个⑧位的数据总线上就是:第一个、第二个、第三个节点连接上了就从纵向下来就是("1")后面的线没有进行连接那么它就是一个悬空的状态可以暂时把它当作是("0")

那么这里存储的数据就是:1 1 1 0 0 0 0 0 注意这是第一行存储的数据。那么第二行实际上也是一样的。

如上↑便是存储器存储的最基本的原理。

重点⇢存储器是一种网格形式、左边给个地址下面就可以输出数据。

重点说明⇢这个地址一次只能选中一行(全体目光向我看齐😛)所以一般在地址总线之前我们都会加一个译码器(138译码器)

AT24C02

AT24C02是一种可以实现掉电不丢失的存储器。

可用于保存单片机运行时想要永久保存的数据信息。

例:就像我们单片机在运行时候的参数吖~像温度传感器高于某一个设定的阈值会报警,然后这个阈值还是可以调节的,然后把它调节好的时候就可以存进AT24C02。当下次断电再重启的时候你就是可以读取之前的数据了用作于这个。  

存储介质→E2PROM。

通讯接口→I2C总线。

容量→256字节。

引脚以及应用电路⒎脚WP(高电平有效)

在计算机运行中,有些信息只允许使用而不允许修改,就要对存储这些信息的区域采取保护措施,这种保护措施称为写保护。即对该存储区的信息只允许读出以被使用,但不允许写入以防止破坏。在上述的应用电路当中我们是给它接地的。

★注→I2C硬件接口是开漏模式,这个接口只能输出低电平,要实现高电平就要靠上拉电阻去拉高。 

内部结构框图

I2C(IIC)总线介绍

  • I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线。
  • 两根通信线⇢SCL(Serial Clock) & SDA(Serial Data)
  • 拓展⇢SCL控制线[时钟线](同步)通信双方靠一根时钟线来约定通信速率SDA(数据线)
  • 同步、半双工,带数据应答。
  • 通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。但是学习I2C还是有一定的学习难度的,但是当你学会了I2C对于要用到它的通信协议来说你又会觉得不那么的难了。 

  1. 显示屏幕(像素点好)
  2. DS3231(精度高)
  3. 陀螺仪自带传感器。

I2C电路规范

  • 所有I2C设备的SCL连在一起以及SDA连在一起。
  • 设备的SCLSDA均要配置成开漏输出模式
  • SCLSDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。
  • 开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题。

I2C时序结构

起始条件→[SCL]高电平期间SDA从高电平切换到低电平。

终止条件→[SCL]高电平期间SDA从低电平切换到高电平。

🍎注→在起始条件的时候我们最后还是把SCL给拉低的主要目的是为了能够与最后的终止条件进行一个衔接的状态。保证起始条件的时候SCL最后为低电平。

重点⇢最后的数据帧都是以S为起始P为终止的。

发送一个字节

SCL低电平期间,主机(单片机)将数据位依次放到SDA线上(高位在前)

然后拉高SCL从机(AT24C02)将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8(依次从最高位再到最低位),即可发送一个字节。在下述图中那个x代表数据变化的。

🍏注→主机相当于是单片机而AT24C02相当于是从机,在所有的线都是由主机进行控制的。

接收一个字节

SCL低电平期间,从机(AT24C02)将数据位依次放到SDA线上(高位在前)

然后拉高SCL主机(单片机)将在SCL高电平期间读取SDA数据位,同时在SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节。

注⇢主机在接收之前,需要释放SDA。我们把SDA置1就相当于释放,我们从机(AT24C02)是完全不会干预我们的这个通信线的。换言之我们的主机(单片机)释放掉SDA数据线把这个线的控制权交给从机(AT24C02),此时就是从机(AT24C02)拿到了控制权 

发送/接收(应答)

📑IIC它是带有数据应答的,所以当我们在发送一个字节之后需要接收应答。然后接收应答之后就需要发送应

SA发送应答→在接收完一个字节之后,主机在下一个时钟发送一位数据数据0表示应答数据1表示非应答

RA接收应答→在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答数据1表示非应答(主机在接收之前需要释放SDA=1)

I2C数据帧

向谁→从机AT24C02地址规定的。

发→字节上最后一位的地址来进行决定的。

什么→S:BYTE x 规定的。

🤙发送一帧数据在协议上规定如下所示🤙

开始(起始条件)
发送从机(AT24C02)地址加写
接收应答
发送第一个字节数据
接收应答
发送第二个字节数据
接收应答
.....(直到第N个BYTE,然后接收应答)
结束(终止条件)

🍎注⇢整体和上述的发送一帧数据差不多知识改变了格式。

变成了

发送 变成了 接收

下面是复合格式数据帧。

🍎注→实际上就是发送一帧数据把(Stop)去掉再和接收一帧数据给进行的结合。 

在上述就是AT20C02的读写功能。

字节写:在“字地址”处写入“数据”。

随机读:读出在“字地址”处的“数据”。

相关文章:

『51单片机』AT24C02[IIC总线]

存储器的介绍 ⒈ROM的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。 注→在后面发展的ROM是可以可写可…...

Jenkins与Rancher的配合使用

Jenkins和Rancher是两个常用的DevOps工具,可以很好地配合使用来实现持续集成和持续部署。 Jenkins是一个开源的自动化构建工具,可以实现自动化的代码构建、测试和部署等一系列操作。可以通过Jenkins来触发构建任务,例如从代码仓库中拉取最新的…...

GIS入门,常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理和使用

前言 本章介绍一下常用的多边形平滑曲线算法及其使用案例。 多边形平滑算法通常用于图形处理或计算机图形学中,以使线条或曲线在连接处平滑过渡,而不出现明显的棱角或断裂。多边形平滑算法有多种实现方法,其中一些常见的有下面几种: 贝塞尔曲线插值(Bezier Curve Interpo…...

气膜体育馆内部的采光效果如何?—轻空间

气膜体育馆内部的采光效果如何?这是许多人对这种创新建筑的一个关键关注点。 首先,气膜体育馆的采光性非常好。阳光透过屋顶时以漫射光的方式进入室内,这种透射方式使得室内的光线柔和而均匀。从内部观察,整个屋顶就像一个连续的明…...

矩阵的对称正定性判决(复习)

文章目录 本科学的数学知识忘的太快了 如何判断一个实矩阵是否是对称正定 在线性代数中,一个实对称矩阵是否为正定可以通过以下方法判断: 对称性: 首先,确认矩阵是否对称,即矩阵的转置是否等于其本身。 特征值检查&…...

网络安全之DHCP详解

DHCP:Dynamic Host Configration Protocol 动态主机配置协议 某一协议的数据是基于UDP封装的,当它想确保自己的可靠性时,这个协议要么选确认重传机制,要么选周期性传输。 DHCP是确认重传,【UDP|DHCP】,当DHCP分配完地…...

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…...

今天遇到一个GPT解决不了的问题

问题描述 你好&#xff0c;postman的一个post请求&#xff0c;编辑器里面放了一个很长的json数据&#xff0c;报Tokenization is skipped for long lines for performance reasons. This can be configured via editor.maxTokenizationLineLength.&#xff0c;但是同样的数据&a…...

优化SQL的方法

来自组内分享&#xff0c;包含了比较常使用到的八点&#xff1a; 避免使用select * union all代替union 小表驱动大表 批量操作 善用limit 高效的分页 用连接查询代替子查询 控制索引数量 一、避免使用select * 消耗数据库资源 消耗更多的数据库服务器内存、CPU等资源。 消…...

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…...

【java】接口

什么是接口 接口当中存在的是对方法的定义&#xff0c;而不是对方法的具体实现。 为什么不实现这个方法呢&#xff1f; 继承的本质是代码的复用。当一个父类会经常被继承&#xff0c;并且子类都要自己实现方法时&#xff0c;父类中的方法就会显得累赘&#xff0c;并且占用了…...

Java中的类型转换

一、类型转换 对类型转换来说分为向上类型转换和向下类型转换&#xff1a; 向上类型转换是自动完成的&#xff0c;一般是小类型向大类型转换。在引用类型中是子类型向父类型转换。向下类型转换是强制完成的&#xff0c;一般是大类型向小类型转换。在引用类型中是父类型向子类…...

定义范围对PFMEA分析的重要性——SunFMEA软件

在进行PFMEA分析时&#xff0c;定义范围是一个至关重要的步骤。这是因为&#xff0c;通过明确分析的范围&#xff0c;可以确保团队关注到最关键、最可能影响产品质量的过程&#xff0c;从而更有效地识别和解决潜在问题。今天SunFMEA软件和大家一起讨论定义范围对PFMEA操作的重要…...

json返回工具类|世界协调时间(UTC)

一、问题 世界协调时间&#xff08;UTC&#xff09;是一个标准的时间参考&#xff0c;通常被用于跨越不同时区的时间标准。要将 UTC 时间转换为中国时间&#xff08;中国标准时间&#xff09;&#xff0c;你需要将时间加上8个小时&#xff0c;因为中国位于 UTC8 时区。 初中知…...

MySQL·内置函数

目录 函数 日期函数 案例1&#xff1a;创建一张表&#xff0c;记录生日 案例2&#xff1a;创建一个留言表 案例3&#xff1a;请查询在2分钟内发布的帖子 字符串函数 案例1&#xff1a; 获取emp表的ename列的字符集 案例2&#xff1a;要求显示exam_result表中的信息&am…...

vue根据文字动态判断溢出...鼠标悬停显示el-tooltip展示

使用自定义el- tooltip 组件 定义 Tooltip是一种小型弹出框,它显示有关特定页面元素的信息,例如按钮、链接或图标。Tooltip通常以半透明的气泡形式呈现,并出现在页面元素的旁边或下方。 它可以改善用户体验,使用户更容易理解页面元素的功能和意图。用户可以通过将鼠标悬停…...

使用Tkinter实现数据预测工具的GUI界面展示

如果构建好预测模型后&#xff0c;想将预测模型通过一个交互式的页面显示&#xff0c;可以通过下边两种方式实现。 本文中代码有详细解析注释&#xff0c;便不再如往期一样分开讲解了&#xff0c;有需要的朋友可以直接拿去使用&#xff0c;代码可以直接运行&#xff0c;把预测…...

机器学习笔记-22

终章 至此吴恩达老师的机器学习课程已经完成啦&#xff0c;总结一下&#xff1a; 1.监督学习的算法&#xff1a;线性回归、逻辑回归、神经网络和向量机 2.无监督学习的算法&#xff1a;K-Means、PCA、异常检测 3.推荐系统、大规模数据处理、正则化、如何评估算法 4.上限分析、…...

车间为什么选择蒸发式冷风机?

蒸发式冷风机具有以下特点&#xff1a; 节能环保&#xff1a;蒸发式冷风机不使用压缩机和化学制冷剂&#xff0c;而是通过水的蒸发来降低温度&#xff0c;因此它是无压缩机、无冷媒、无污染的环保型产品。降温效果显著&#xff1a;在较潮湿地区&#xff0c;它一般能达到5-9℃的…...

5分钟速通大语言模型(LLM)的发展与基础知识

✍️ 作者&#xff1a;哈哥撩编程&#xff08;视频号同名&#xff09; 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5; 程序员&#xff1a;职场关键角色通识宝…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...