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

普中51单片机学习(EEPROM)

EEPROM

IIC串行总线的组成及工作原理

I2C总线的数据传送
  1. 数据位的有效性规定

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
在这里插入图片描述

  1. 起始和终止信号

SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
在这里插入图片描述

  1. 数据传送格式
    字节传送与应答
    每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
    在这里插入图片描述
    数据帧格式
    在总线的一次数据传送过程中,可以有以下几种组合方式:
    主机向从机发送数据,数据传送方向在整个传送过程中不变:
    在这里插入图片描述
    主机在第一个字节后,立即从从机读数据:
    在这里插入图片描述
    在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。
    在这里插入图片描述

  2. 总线的寻址
    I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。
    寻址字节的位定义
    在这里插入图片描述
    主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/T位将自己确定为发送器或接收器。
    从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。

典型信号模拟
在这里插入图片描述

串行E2PROM的扩展

写入过程

单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地址,收到存储器器件的应答后,单片机就逐个发送各数据字节,但每发送一个字节后都要等待应答。当要写入的数据传送完后,单片机应发出终止信号以结束写入操作。写入n个字节的数据格式 :
在这里插入图片描述

读出过程

单片机先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,单片机要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号。当最后一个字节数据读完后,单片机应返回以“非应答”(高电平),并发出终止信号以结束读出操作。
在这里插入图片描述

AT24CXX存储器工作原理

在这里插入图片描述
总线时序
在这里插入图片描述
在这里插入图片描述

实验代码

i2c.h

#ifndef _I2C_H
#define _I2C_H#include "reg52.h"
sbit SCL=P2^1;
sbit SDA=P2^0;
void At24c02Write(unsigned char addr, unsigned char dat);
unsigned char At24c02Read(unsigned char addr);#endif

i2c.c

#include "i2c.h"void Delay10us(void)
{unsigned char a,b;for(b=1;b>0;b--)for(a=2;a>0;a--);
}void I2cStart()
{SDA=1;Delay10us();SCL=1;Delay10us();SDA=0;Delay10us();SCL=0;Delay10us();
}void I2cStop()
{SDA=0;Delay10us();SCL=1;Delay10us();SDA=1;Delay10us();
}unsigned char I2cSendByte(unsigned char dat)
{unsigned char a;unsigned char t=1;unsigned char b=1;for(a=0;a<8;a++){SDA=dat>>7;dat<<=1;Delay10us();SCL=1;Delay10us();SCL=0;Delay10us();}SDA=1;Delay10us();SCL=1;Delay10us();while(SDA){b++;if(b>200){SCL=0;	Delay10us();t=0;return b;}}SCL=0;Delay10us();return t;
}unsigned char I2cReadByte()
{unsigned char a=0,dat=0;SDA=1;Delay10us();for(a=0;a<8;a++){SCL=1;Delay10us();dat<<=1;dat|=SDA;Delay10us();SCL=0;Delay10us();}return dat;
}void At24c02Write(unsigned char addr, unsigned char dat)
{I2cStart();I2cSendByte(0xA0);I2cSendByte(addr);I2cSendByte(dat);I2cStop();
}unsigned char At24c02Read(unsigned char addr)
{unsigned char num;I2cStart();I2cSendByte(0xA0);I2cSendByte(addr);I2cStart();I2cSendByte(0xA1);num=I2cReadByte();I2cStop();return num;	
}

main.c

#include "reg52.h"
#include "i2c.h"
typedef unsigned char u8;
typedef unsigned int u16;sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 num=0;
u8 disp[4];
void delay(u16 i)
{while(i--);
}void datapros()
{disp[0]=smgduan[num/1000];disp[1]=smgduan[num/100%10];disp[2]=smgduan[num/10%100%10];disp[3]=smgduan[num%1000%100%10];
}void Keypros()
{if(k1==0){delay(1000);if(k1==0){At24c02Write(1,num);}while(!k1);}if(k2==0){delay(1000);if(k2==0){num=At24c02Read(1);}while(!k2);}if(k3==0){delay(1000);if(k3==0){num++;if(num>255){num=0;}}while(!k3);}if(k4==0){delay(1000);if(k4==0){num=0;}while(!k4);}
}void DigDisplay()
{u8 i;for(i=0;i<4;i++){switch(i){case(0):LSA=0;LSB=0;LSC=0;break;case(1):LSA=1;LSB=0;LSC=0;break;case(2):LSA=0;LSB=1;LSC=0;break;case(3):LSA=1;LSB=1;LSC=0;break;}P0=disp[3-i];delay(100);P0=0x00;}
}void main(){while(1){Keypros();datapros();DigDisplay();}
}

相关文章:

普中51单片机学习(EEPROM)

EEPROM IIC串行总线的组成及工作原理 I2C总线的数据传送 数据位的有效性规定 I2C总线进行数据传送时&#xff0c;时钟信号为高电平期间&#xff0c;数据线上的数据必须保持稳定&#xff0c;只有在时钟线上的信号为低电平期间&#xff0c;数据线上的高电平或低电平状态才允许…...

智能风控体系之供应链业务模式

供应链金融是一种针对中小企业的新型融资模式&#xff0c;将资金流有效整合到供应链管理的过程中&#xff0c;既为供应链各环节企业提供贸易资金服务&#xff0c;又为供应链弱势企业提供新型贷款融资服务&#xff0c;以核心客户为依托&#xff0c;以真实贸易背景为前提&#xf…...

最少停车数(C 语言)

题目描述 特定大小的停车场&#xff0c;数组cars[]表示&#xff0c;其中1表示有车&#xff0c;0表示没车。车辆大小不一&#xff0c;小车占一个车位&#xff08;长度1&#xff09;&#xff0c;货车占两个车位&#xff08;长度2&#xff09;&#xff0c;卡车占三个车位&#xf…...

MAC M1安装vmware和centos7虚拟机并配置静态ip

一、下载vmware和centos7镜像 1、VMWare Fusion 官网的下载地址是&#xff1a;下载地址 下载好之后注册需要秘钥&#xff0c;在官网注册后使用免费的个人秘钥 2、centos7 下载地址&#xff1a; https://biosyxh.cn:5001/sharing/pAlcCGNJf 二、虚拟机安装 直接将下…...

java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…...

Linux——网络通信TCP通信常用的接口和tcp服务demo

文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符&#xff0c;他的作用就是打开一个网络通讯端口&#xff0c;返回的这个描述符其实就可以理解为一个文件描述符&a…...

【web | CTF】反序列化打法

天命&#xff1a;因为是php的上古版本&#xff0c;所以本机无法复现&#xff0c;只能用归纳法解决&#xff0c;就是题海战术找相同点&#xff0c;fuzz来测试新的题目 题目一&#xff1a;绕过正则和绕过__wakeup函数&#xff0c;private属性 【web | CTF】攻防世界 Web_php_uns…...

如何在Linux搭建Inis网站,并发布至公网实现远程访问【内网穿透】

如何在Linux搭建Inis网站&#xff0c;并发布至公网实现远程访问【内网穿透】 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.…...

YOLOv9来了! 使用可编程梯度信息学习你想学的内容, v7作者新作!【文献速读】

YOLOv9文献速读&#xff0c;本文章使用 GPT 4.0 和 Ai PDF 工具完成。 文章地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 文章目录 文章简介有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课题在领域内值得关注的研究员&#xff1f;论文试图解决什么问题&a…...

【鸿蒙 HarmonyOS 4.0】网络请求

一、介绍 资料来自官网&#xff1a;文档中心 网络管理模块主要提供以下功能&#xff1a; HTTP数据请求&#xff1a;通过HTTP发起一个数据请求。WebSocket连接&#xff1a;使用WebSocket建立服务器与客户端的双向连接。Socket连接&#xff1a;通过Socket进行数据传输。 日常…...

QT中的多线程有什么作用?

概述 在学习QT线程的时候我们首先要知道的是QT的主线程&#xff0c;也叫GUI线程&#xff0c;意如其名&#xff0c;也就是我们程序的最主要的一个线程&#xff0c;主要负责初始化界面并监听事件循环&#xff0c;并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上…...

redis最佳实践

原则&#xff1a;redis希望存储的是热点数据&#xff0c;尽量可以在一天内访问到。 最佳实践 选择合适的数据结构 redis有String、Hash、Set、SortedSet、List等结构&#xff0c;主要依据业务需要进行选择 string:几乎所有数据都可以用string存储&#xff0c;但是最好适用于…...

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…...

【JavaEE】_HTTP请求报头header

目录 1. Host 2. Content-Length与Content-Type 2.1 Content-Length 2.2 Content-Type 3. User-Agent&#xff08;UA&#xff09; 4. Referer 5. Cookie header的整体格式是“键值对”结构&#xff0c;一行是一个键值对&#xff0c;这些键值对都是HTTP定义好的、有特殊含…...

随想录刷题笔记 —二叉树篇10 450删除二叉搜索树节点 669修剪二叉搜索树 108有序数组转换为二叉搜索树

450删除二叉搜索树节点 删除结点分为2种情况&#xff1a; 1.结点的孩子只有一个或没有&#xff0c;则直接用孩子或空替代 2.结点的孩子有两个&#xff0c;用左孩子替代&#xff0c;将左孩子的右孩子移到结点右子树的最左结点 解法一&#xff1a;递归 class Solution {publ…...

Docker基础篇(二)

docker run -d docker run -d 容器名或容器ID docker run -d 后台生成容器&#xff0c;并退出容器&#xff08;除容器中在运行脚本&#xff09; docker run -it 交互生成容器 docker run -d centos /bin/sh -c “while true; do echo zen; sleep 2;done” 查看容器中的进程…...

时序数据库TimescaleDB,实战部署全攻略

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

Gson 库的使用

Gson 是由 Google 开发的一个流行的 Java 库,用于处理 JSON 数据的序列化和反序列化。它提供了简单易用的 API,使得在 Java 应用程序中操作 JSON 数据变得非常方便。 以下是 Gson 库的一些主要特点和用法 简单易用 Gson 提供了一个简单而直观的 API,使得在 Java 应用程序中…...

Java Swing游戏开发学习1

不使用游戏引擎&#xff0c;只使用Java SDK开发游戏的学习。 游戏原理 图片来自RyiSnow视频讲解 原理结合实际代码 public class GamePanel extends Jpanel implements Runnable {...run(){}// 详情看下图... }项目结构 运行效果 代码code 在我的下载里面可以找到&#x…...

Stable Diffusion 模型的概念、类型、下载、安装、使用

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 我们在《Stable Diffusion WebUI 界面介绍》 时&#xff0c;第一个就讲到了 Stable Diffusion 模型&#xff0c;那么这个模型是什么&#xff1f;该从哪儿下载&…...

Go 1.22 对 net/http 包的路由增强功能详解

目录 方法匹配&#xff08;Method Matching&#xff09; 通配符&#xff08;Wildcards&#xff09; 路径前缀匹配 优先规则 兼容性 API 变更 小结 参考资料 Go 1.22 版本对 net/http 包的路由功能进行了增强&#xff0c;引入了方法匹配&#xff08;method matching&…...

【安卓基础3】Activity(一)

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;本文收录于 安卓学习大全&#xff0c;欢迎关注 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &…...

SpringBoot基于JWT的token做登录认证

背景 我们在基于Session做登录认证的时候&#xff0c;会有一些问题&#xff0c;因为Session存储到服务器端&#xff0c;然后通过客户端的Cookie进行匹配&#xff0c;如果正确&#xff0c;则通过认证&#xff0c;否则不通过认证。这在简单的系统中可以这么使用&#xff0c;并且…...

[ 2024春节 Flink打卡 ] -- Paimon

2024&#xff0c;游子未归乡。工作需要&#xff0c;flink coding。觉知此事要躬行&#xff0c;未休&#xff0c;特记 Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合&#xff0c;推出新一代的 Streaming Lakehouse 技术&#xff0c;…...

计算机网络——14CDN

CDN 视频流化服务和CDN&#xff1a;上下文 视频流量&#xff1a;占据着互连网大部分的带宽 Netflix&#xff0c;YouTube&#xff1a;占据37%&#xff0c;16%的下行流量 挑战&#xff1a;规模性-如何服务~1B用户&#xff1f; 单个超级服务器无法提供服务&#xff08;为什么&am…...

Docker技术仓库

数据卷 为什么用数据卷&#xff1f; 宿主机无法直接访问容器中的文件容器中的文件没有持久化&#xff0c;导致容器删除后&#xff0c;文件数据也随之消失容器之间也无法直接访问互相的文件 为解决这些问题&#xff0c;docker加入了数据卷机制&#xff0c;能很好解决上面问题…...

Kotlin学习 6

1.接口 interface Movable {var maxSpeed: Intvar wheels: Intfun move(movable: Movable): String}class Car(var name: String, override var wheels: Int 4, _maxSpeed: Int) : Movable {override var maxSpeed: Int _maxSpeedget() fieldset(value) {field value}overr…...

⭐北邮复试刷题LCR 052. 递增顺序搜索树__DFS (力扣119经典题变种挑战)

LCR 052. 递增顺序搜索树 给你一棵二叉搜索树&#xff0c;请 按中序遍历 将其重新排列为一棵递增顺序搜索树&#xff0c;使树中最左边的节点成为树的根节点&#xff0c;并且每个节点没有左子节点&#xff0c;只有一个右子节点。 示例 1&#xff1a; 输入&#xff1a;root [5,…...

获取discord上自己创建的服务器的服务器ID、频道ID以及discord的登录token(用于第三方登录)

在服务器图标上右键点击-》复制服务器ID 在频道上右键点击-》复制频道ID F12->手机模式-》application-》local storage-》填写过滤条件【token】 我开发的chatgpt网站&#xff1a; https://chat.xutongbao.top...

图纸透明加密:保护机械图纸安全的新方法

随着信息技术的不断发展&#xff0c;机械制造行业对于图纸安全的需求越来越高。机械图纸是企业的核心竞争力之一&#xff0c;泄露可能导致严重的商业损失和技术风险。为了解决这一问题&#xff0c;图纸透明加密成为了一种新的保护机械图纸安全的方法。本文将介绍图纸透明加密的…...