普中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();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696507.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696507.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696507.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分享WebGL物體三維建模

界面效果 代碼結構 模型素材類似CT (Computed Tomography)&#xff0c;即電子計算機斷層掃描&#xff0c;它是利用精確準直的X線束、γ射線、超聲波等&#xff0c;與靈敏度極高的探測器一同圍繞物體的某一部位作一個接一個的斷面掃描。 坐標系統 渲染流程 渲染流程是個將之前準…

Sora:OpenAI引領AI視頻新時代

Sora - 探索AI視頻模型的無限可能 隨著人工智能技術的飛速發展&#xff0c;AI視頻模型已成為科技領域的新熱點。而在這個浪潮中&#xff0c;OpenAI推出的首個AI視頻模型Sora&#xff0c;以其卓越的性能和前瞻性的技術&#xff0c;引領著AI視頻領域的創新發展。讓我們將一起探討…

C++(12) 模板類、模板繼承(嚴格模式和自由模式)

文章目錄 模版類1. 模版類2. 模版參數限制3. 模版繼承3.1 嚴格模式3.2 自由模式 4. 模版類的模版函數5. 返回值類型帶有模版 模版類 1. 模版類 #include <iostream>using namespace std;/* 當前 Person 類型&#xff0c;聲明了連個模版分別對應NameType 模版類型&#…

C++ array容器用法詳解

array 容器是 C++ 11 標準中新增的序列容器,簡單地理解,它就是在 C++ 普通數組的基礎上,添加了一些成員函數和全局函數。在使用上,它比普通數組更安全(原因后續會講),且效率并沒有因此變差。 和其它容器不同,array 容器的大小是固定的,無法動態的擴展或收縮,這也就意…

【SpringCloud】使用 Spring Cloud Alibaba 之 Sentinel 實現微服務的限流、降級、熔斷

目錄 一、Sentinel 介紹1.1 什么是 Sentinel1.2 Sentinel 特性1.3 限流、降級與熔斷的區別 二、實戰演示2.1 下載啟動 Sentinel 控制臺2.2 后端微服務接入 Sentinel 控制臺2.2.1 引入 Sentinel 依賴2.2.2 添加 Sentinel 連接配置 2.3 使用 Sentinel 進行流控&#xff08;含限流…

SLAM ORB-SLAM2(19)特征點三角化

SLAM ORB-SLAM2(19)特征點三角化 1. 前言2. 初始化參數3. 計算投影矩陣4. 恢復三維點4.1. 計算推導4.2. Triangulate5. 檢查三維點5.1. 檢查三維點的深度值和視差角5.2. 檢查空間點的重投影誤差6. 最后處理1. 前言 在 《SLAM ORB-SLAM2(12)估算運動并初始地圖點》 中了解到…

如何將cocos2d-x js打包部署到ios上 Mac M1系統

項目環境 cocos2d-x 3.13 xcode 12 mac m1 big sur 先找到你的項目 使用xcode軟件打開上面這個文件 打開后應該是這個樣子 執行編譯運行就好了 可能會碰到的錯誤 在xcode11版本以上都會有這個錯誤&#xff0c;這是因為iOS11廢棄了system。 將上面代碼修改為 #if (CC_TARGE…

Java 面向對象進階 16 接口的細節:成員特點和接口的各種關系(黑馬)

成員變量默認修飾符是public static final的原因是&#xff1a; Java中接口中成員變量默認修飾符是public static final的原因是為了確保接口的成員變量都是公共的、靜態的和不可修改的。 - public修飾符確保了接口的成員變量可以在任何地方被訪問到。 - static修飾符使得接口…

vue-利用屬性(v-if)控制表單(el-form-item)顯示/隱藏

表單控制屬性 v-if 示例&#xff1a; 通過switch組件作為開關&#xff0c;控制表單的顯示與隱藏 <el-form-item label"創建數據集"><el-switch v-model"selectFormVisible"></el-switch></el-form-item><el-form-item label&…

Redis篇----第七篇

系列文章目錄 文章目錄 系列文章目錄前言一、Redis 的回收策略(淘汰策略)?二、為什么 edis 需要把所有數據放到內存中?三、Redis 的同步機制了解么?四、Pipeline 有什么好處,為什么要用 pipeline?前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍…

crontab history查看命令的執行時間

crontab crontab學習網站&#xff08;19. crontab 定時任務 — Linux Tools Quick Tutorial&#xff09; 例子 今天實際工作里用到的&#xff08;已經進行了防信息泄露處理 比如我現在希望每周三上午10:00之行一個php腳本 --gpt生成 00 10 * * 3 cd /home/user/project/r…

阿里云SSL免費證書到期自動申請部署程序

阿里云的免費證書只有3個月的有效期&#xff0c;不注意就過期了&#xff0c;還要手動申請然后部署&#xff0c;很是麻煩&#xff0c;于是寫了這個小工具。上班期間抽空寫的&#xff0c;沒有仔細測試&#xff0c;可能存在一些問題&#xff0c;大家可以自己clone代碼改改&#xf…

【大模型 數據增強】LLMAAA:使用 LLMs 作為數據標注器

【大模型 數據增強】LLMAAA&#xff1a;使用 LLMs 作為數據標注器 提出背景算法步驟1. LLM作為活躍標注者&#xff08;LLMAAA&#xff09;2. k-NN示例檢索與標簽表述化3. 活躍學習策略4. 自動重權技術 LLMAAA 框架1. LLM Annotator2. Active Acquisition3. Robust Training 總結…

SkyWalking之APM無侵入可觀測原理分析

一、 簡介&#xff08;為什么需要用到可觀測能力&#xff09; 隨著微服務的開發模式的興起&#xff0c;早期的單體架構系統已拆分為很多的子系統&#xff0c;各個子系統封裝為微服務&#xff0c;各服務間通過HTTP協議RESET API或者RPC協議進行調用。 在單體服務或者微服務較少的…

8:00面試,8:05就出來了 ,問的實在是....

從外包出來&#xff0c;沒想到竟然死在了另一家廠子 自從加入這家公司&#xff0c;每天都在加班&#xff0c;錢倒是給的不少&#xff0c;所以我也就忍了。沒想到12月一紙通知&#xff0c;所有人都不許加班&#xff0c;薪資直降30%&#xff0c;頓時有吃不起飯的趕腳。 好在有個…

AI推介-大語言模型LLMs論文速覽(arXiv方向):2024.02.05-2024.02.10

相關LLMs論文大多都是應用型文章&#xff0c;少部分是優化prompt/參數量級等等… 有一些應用文還是值得參考的&#xff0c;當工作面臨一個新的場景&#xff0c;可以學習下他人是如何結合LLMs與實際應用中的鏈接。 LLMs論文速覽&#xff1a;2024.02.05-2024.02.10&#xff1a; …

ESP8266智能家居(2)——8266發布數據到mqtt服務器

1.公共服務器 學習物聯網就離不開服務器&#xff0c;如果你資金充足的話&#xff0c;可以自己購買或者租用一個服務器。本次我選擇&#xff0c;使用免費的公共MQTT服務器。它的端口及Broker信息如下&#xff1a; 網址為&#xff1a; 免費的公共 MQTT 服務器 | EMQ (emqx.com)h…

LLMChain使用 | RouterChain的使用 - 用本地大模型搭建多Agents

單個本地大模型搭建參考博客 單個Chain&#xff1a;面對一個需求&#xff0c;我們需要創建一個llmchain&#xff0c;設置一個prompt模板&#xff0c;這個chain能夠接收一個用戶input&#xff0c;并輸出一個結果&#xff1b;多個Chain&#xff1a;考慮到同時面對多個需求&#x…

動態規劃背包問題

前言 動態規劃背包問題是一類經典的優化問題&#xff0c;涉及到選擇物品以最大化某個目標值&#xff08;通常是價值或利潤&#xff09;&#xff0c;同時受到某種約束&#xff08;如重量、體積或時間&#xff09;。背包問題可以分為多種類型&#xff0c;例如0-1背包問題、完全背…

第三百六十回

文章目錄 1. 概念介紹2. 實現方法2.1 環繞效果2.2 立體效果 3. 示例代碼4. 內容總結 我們在上一章回中介紹了"自定義SlideImageSwitch組件"相關的內容&#xff0c;本章回中將介紹兩種陰影效果.閑話休提&#xff0c;讓我們一起Talk Flutter吧。 1. 概念介紹 我們在本…