藍橋杯----AT24C02

(5-1)、AT24C02掉電不丟失寫入與讀取

??????? AT24C02就是將數據寫入E2PROM,保證寫入數據掉電不丟失。考頻低,一般不考,頂天考幾個數據E2PROM,上電立馬讀取。AT24C02數據讀取一定放在主程序最前面,否則會出現一些問題。通信方式也是I2C,因此底層代碼跟AD、DA基本一樣。存在下面我們來講一下寫入與讀取的時序。

?

寫入時序:(如圖 二十二)

①初始化(通信起始信號)

②發送I2C設備地址(高七位是設備地址,最后一位是讀寫位,寫為0,讀取為1,A2、A1、A0置0,開始寫操作0xa0,如圖 二十一)

③從機發送反饋應答(從機發送0表明接收成功)

④寫入從機設備地址(一般為8的倍數,如0、8、16、24…)

⑤從機發送反饋應答

⑥逐個寫入數據、從機發送反饋應答、延時200再寫(while循環)

⑦停止信號

? ? ? ? ? ? ? ?圖 二十一 AT24C02設備地址

?

讀取時序:(如圖 二十三)

①初始化(通信起始信號)

②發送I2C設備地址(高七位是設備地址,最后一位是讀寫位,寫為0,讀取為1,A2、A1、A0置0,開始寫操作0xa0,如圖 二十一)

③從機發送反饋應答(從機發送0表明接收成功)

④寫入從機設備地址(一般為8的倍數,如0、8、16、24…)

⑤從機發送反饋應答

⑥重新初始化

⑦發送開始讀取信號0xa1

⑧從機發送反饋應答(從機發送0表明接收成功)

⑨開始讀取數據(無需延時)、讀取完成主機發送反饋1、還有數據發送0

⑩停止信號

? ? ? ? ? ? ? ? ? ?圖 二十二 AT24C02寫入

? ? ? ? ? ? ? ? ? 圖 二十三 AT24C02讀取

?

(5-2)AT24C02寫入與讀取代碼解讀

? ? 如圖 二十四,我們按照寫入的時序一步步分析,*String表示指針,傳入數組名,就可以需要寫入的 數據全部寫入,Number就是數組里面有幾個數據。

? ? 首先發送開始信號,再發送從機地址并反饋(0xA0)

? ? 再選擇需要寫入的寄存器地址(8的倍數),從該位置開始寫,寫入一次后地址會自增,數據自動放在下一位地址。

? ? 此時開始寫入數據,每次寫入后需要延時200,循環Number次后,數組數據全部寫完,停止。

?

? ? ? ? ? ? ? ? 圖 二十四 AT24C02寫入數據代碼

?

? ? 如圖 二十五,我們按照讀取的時序一步步分析,*String表示指針,傳入數組名,就可以將指定地址Address開始的數據全部讀取,Number就是讀取數據的個數。

? ?首先發送開始信號,再發送從機地址+讀寫位(讀為0、寫為1),并反饋(0xA0)

? ?再選擇需要讀取的寄存器地址(8的倍數),從該位置開始讀取,與寫入原理相同,讀取一次后地址會自增,第二次讀取時是第一次地址自加后的位置下的數據。

? ?重新初始化,發送寄存器地址+讀寫位置(讀為0、寫為1),反饋。

? ?此時開始讀取數據,循環Number次后,數組數據全部讀取完。此時注意只有當Number==0時也就是數據已經讀取完了,發送反饋1,不在讀取;Number!=0說明還有數據,發送反饋0,繼續讀取。最后停止時序。最后,請一定記得把讀取的代碼放在main函數最前面!

?

? ? ? ? ? ? ?圖 二十五 AT24C02讀取數據代碼

提供參考代碼,希望對讀者有幫助

#include <STC15F2K60S2.H>
#include <INTRINS.H>sbit sda = P2^1;
sbit scl = P2^0;
/*	#   I2C代碼片段說明1. 	本文件夾中提供的驅動代碼供參賽選手完成程序設計參考。2. 	參賽選手可以自行編寫相關代碼或以該代碼為基礎,根據所選單片機類型、運行速度和試題中對單片機時鐘頻率的要求,進行代碼調試和修改。
*/#define DELAY_TIME	5//
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}//
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}//
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}//
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}//
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}//
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}//
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}/*IIC通信過程1、AT24C02寫入起始信號-開始寫操作(0xa0)--反饋---寫入從機地址--反饋---寫入數據反饋--延時200--停止2、AT24C02讀取起始信號-開始寫操作(0xa0)--反饋--寫入從機地址--反饋--重新開始--開始讀操作(0xa1)--反饋--開始讀取并反饋(不再接收發送1)---停止/**
* @brief     AT24C02_Write往AT24C02中寫入數據保證掉電不丟失* @param  *String--傳入數組名* @param   Address寄存器地址(8的倍數,如0、8、16、24...)* @param   Number--需要發送的數據總共幾位
*/void AT24C02_Write(unsigned char *String,unsigned char Address,unsigned char Number)
{I2CStart();I2CSendByte(0xa0);    //寫入從機地址I2CWaitAck();I2CSendByte(Address); //開始寫入的寄存器地址I2CWaitAck();while(Number--){I2CSendByte(*String++);    //寫入數據I2CWaitAck();I2C_Delay(200);    //延時}I2CStop();I2C_Delay(255);  I2C_Delay(255);I2C_Delay(255);I2C_Delay(255);//保證時序
}//從地址Address開始讀取Number個數據,并放入*String數組中(指針)
void AT24C02_Read(unsigned char *String,unsigned char Address,unsigned char Number)
{I2CStart();I2CSendByte(0xa0);    //寫入從機地址I2CWaitAck();         //反饋I2CSendByte(Address);    //開始寫入的寄存器地址I2CWaitAck();I2CStart();           //重新開始I2CSendByte(0xa1);    //開始讀操作I2CWaitAck();while(Number--)    //讀取Number數據{*String++ = I2CReceiveByte();if(Number)  //如何Number!=0表示還有數據需要讀取,發送反饋0,繼續讀取I2CSendAck(0);elseI2CSendAck(1);   //如何Number==0表示讀取完畢,不再接收,發送反饋1}I2CStop();
}

?

?

?

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

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

相關文章

【物聯網】基于樹莓派的物聯網開發【19】——樹莓派搭建MQTT客戶端及MQTTX使用

場景介紹 實現測試客戶端與 MQTT 服務器的連接、訂閱、取消訂閱、收發消息等功能。 MQTT發布消息到代理服務器 安裝paho-mqtt 使用pip工具安裝paho-mqtt&#xff0c;輸入以下指令即可&#xff1a; sudo pip install paho-mqtt安裝 MQTT 客戶端庫 為了方便連接到 MQTT 服務器&am…

5G-A技術浪潮勾勒通信產業新局,微美全息加快以“5.5G+ AI”新勢能深化場景應用

7月31日&#xff0c;國家互聯網信息辦公室發布《國家信息化發展報告》。《報告》中提出&#xff0c;新一代通信技術研發取得新成果&#xff0c;5G-A地空通信&#xff08;5G-ATG&#xff09;技術研發成功并完成測試驗證。5G-A技術研發測試驗證移動通信技術一般代際生命周期為10年…

SQLite Where 子句詳解

SQLite Where 子句詳解 SQLite 是一款輕量級的數據庫管理系統,廣泛應用于移動設備、嵌入式系統以及個人電腦。在 SQLite 中,WHERE 子句是 SQL 查詢語句中不可或缺的一部分,它用于指定查詢條件,從而篩選出滿足特定條件的記錄。本文將詳細介紹 SQLite 中的 WHERE 子句,包括…

AI IDE+AI 輔助編程-生成的大綱-一般般

引言概述 AI IDE 和 AI 輔助編程的興起及其對開發效率的影響提出核心問題&#xff1a;AI 工具能否真正幫助程序員減少加班&#xff08;告別 996&#xff09;&#xff1f;AI IDE 與 AI 輔助編程的定義與現狀解釋 AI IDE&#xff08;集成 AI 的開發環境&#xff09;和 AI 輔助編程…

ABP VNext + Dapr Workflows:輕量級分布式工作流

&#x1f680; ABP VNext Dapr Workflows&#xff1a;輕量級分布式工作流 &#x1f4da; 目錄&#x1f680; ABP VNext Dapr Workflows&#xff1a;輕量級分布式工作流一、引言 ?TL;DR &#x1f525;二、環境與依賴 &#x1f6e0;?三、系統架構與流程圖 &#x1f3d7;?四、…

? Unity 實現UI視差滾動效果(Parallax)鼠標控制、可拓展陀螺儀與腳本控制

? 效果如下在許多游戲、APP 或動效頁面中&#xff0c;我們常見的一種視覺效果是 視差滾動&#xff08;Parallax Scrolling&#xff09;&#xff1a;前景、中景、背景在鼠標或設備移動時以不同速率輕微移動&#xff0c;從而營造出一種空間感和深度感。目前遇到這樣一個需求 所以…

【05】VM二次開發——模塊參數配置--帶渲染/不帶渲染(WinForm界面調用 模塊參數配置)

文章目錄1 Winform 窗口界面 &#xff08;帶渲染的參數配置控件&#xff09;2 配置代碼3 運行測試4 不帶渲染的參數配置控件 對比4.1 添加控件4.2 代碼及演示效果模塊參數配置本教程介紹如何在VM二次開發中對模塊參數進行配置 1 Winform 窗口界面 &#xff08;帶渲染的參數配置…

Android 之 藍牙通信(2.0 經典)

??一、環境配置??1. ??添加依賴??在 build.gradle 中添加庫依賴&#xff1a;dependencies {implementation com.github.akexorcist:bluetoothspp:1.0.0 }2. ??權限聲明&#xff08;AndroidManifest.xml&#xff09;?<uses-permission android:name"androi…

使用 Scikit-LLM 進行零樣本和少樣本分類

使用 Scikit-LLM 進行零樣本和少樣本分類 使用 Scikit-LLM 進行零樣本和少樣本分類 在本文中&#xff0c;您將學習&#xff1a; Scikit-LLM如何將OpenAI的GPT等大型語言模型與Scikit-learn框架集成以進行文本分析。零樣本和少樣本分類之間的區別以及如何使用Scikit-LLM實現它…

android內存作假通殺補丁(4GB作假8GB)

可過如下app檢測&#xff1a; 安兔兔、魯大師、白眼、AIDA64、CPU X、CPU-Z、DevCheck、DeviceInfoHW lyw235yk235:~/Extend/lyw235/V/sprdroid1_v_4/sprdroid1_v$ git diff vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c diff --git a/vnd/bsp/kernel5.15/kernel5.15/mm/pag…

Android 之 MVC架構

介紹1. MVC架構分工????Model層??&#xff1a;處理數據驗證、網絡請求等業務邏輯。??View層??&#xff1a;XML布局定義界面&#xff0c;Activity處理用戶輸入和顯示結果。??Controller層??&#xff1a;Activity作為控制器&#xff0c;協調Model和View的交互對于登…

Centos Docker 安裝手冊(可用)

Centos 安裝 Docker # 卸載舊版 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinux # 安裝依賴工具 yum install -y yum-utils device-mapper-persistent-d…

烽火HG680-KX-海思MV320芯片-2+8G-安卓9.0-強刷卡刷固件包

烽火HG680-KX-海思MV320芯片-28G-安卓9.0-強刷卡刷固件包U盤強刷刷機步驟&#xff1a;1、強刷刷機&#xff0c;用一個usb2.0的8G以下U盤&#xff0c;fat32&#xff0c;2048塊單分區格式化&#xff08;強刷對&#xff35;盤非常非常挑剔&#xff0c;usb2.0的4G U盤兼容的多&…

Python爬蟲實戰:研究pycares技術構建DNS解析系統

1. 引言 1.1 研究背景 隨著互聯網的飛速發展,網絡上的數據量呈現爆炸式增長。網絡爬蟲作為一種高效的數據采集工具,被廣泛應用于數據分析、市場調研、學術研究等領域。傳統的爬蟲在進行大規模數據采集時,往往會受到 DNS 解析效率的制約,成為影響爬取性能的瓶頸之一。 DNS…

從 0 到 1 認識 Spring MVC:核心思想與基本用法(下)

文章目錄&#x1f4d5;4. 響應??4.1 返回靜態頁面??4.2 返回數據ResponseBody???4.3 返回HTML代碼片段???4.4 返回JSON??4.5 設置狀態碼??4.6 設置Header&#xff08;了解&#xff09;&#x1f4d5;5. 案例練習??5.1 加法計算器??5.2 用戶登錄??5.3 留言板…

Python-初學openCV——圖像預處理(五)——梯度處理、邊緣檢測、圖像輪廓

目錄 一、圖像梯度處理 1、垂直邊緣提取 2、Sobel算子 3、Laplacian算子 二、圖像邊緣檢測 1、高斯濾波 2、計算圖像的梯度、方向 3、非極大值抑制 4、雙閾值篩選 三、繪制圖像輪廓 1、概念 2、尋找輪廓 3、繪制輪廓 一、圖像梯度處理 還記得高數中的一階導數求極值…

【Redis】安裝Redis,通用命令,常用數據結構,單線程模型

目錄 一.在Ubuntu系統安裝Redis 二. redis客戶端介紹 三. 全局命令 3.1.GET和SET命令 3.2.KEYS&#xff08;生產環境禁止使用&#xff09; 3.3.EXISTS 3.4.DEL 3.5.EXPIRE 3.6.TTL 3.6.1.Redis的過期策略 3.6.2.基于優先級隊列/堆的實現去實現定時器 3.6.3.定時器&a…

ubuntu22.04系統實踐 linux基礎入門命令(三) 用戶管理命令

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址&#xff1a;星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 之所以推薦給大家使用&#xff0c;是因為上面的云主機目前是免費使用的…

DPDK中的TCP頭部處理

1. TCP頭部結構 TCP頭部通常為20字節&#xff08;不含可選字段&#xff09;&#xff0c;每個字段占據固定的字節位置。以下是TCP頭部的結構&#xff0c;按字節位置逐一說明&#xff1a;0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 …

開源在線客服系統Chatwoot配置文件

參考&#xff1a; https://developers.chatwoot.com/self-hosted/deployment/dockerhttps://developers.chatwoot.com/self-hosted/deployment/docker 1、.env 配置文件 # Learn about the various environment variables at # https://www.chatwoot.com/docs/self-hosted/co…