一、原理:
1、頁寫:一次性向AT24C02里的多個數據存儲單元地址寫入多個數據
? ? ? ? (1)在AT24C02的頁寫模式下,每次寫入數據后,存儲單元地址會自動加1。
? ? ? ? (2)一頁有8個數據存儲單元,藍橋杯的AT24C02一共有256個數據存儲單元,也就是說,藍橋杯的AT24C02只有256 / 8 = 32個頁。
? ? ? ? (3)如果一頁寫入了8個以上的數據,那么存儲單元地址就會從頭開始,比如從0x00開始頁寫,一直寫到了0x07,這時如果繼續頁寫,就會從0x00開始覆蓋原來的內容。
? ? ? ? (4)在一次頁寫里面,無需任何的延時;但是在多次頁寫時,要有5ms的延時。以下是Deepseek的回復。
?2、頁讀:一次性向AT24C02里的多個數據存儲單元地址讀取多個數據(與上述頁寫原理類似,不做重復)
注意:在寫入設備地址后,還需要寫入開始頁讀的存儲單元地址,下述原理圖未標出。
二、代碼:(只給出頁寫頁讀代碼,其他代碼未給出,請自己寫)
注:寫入之后不能立即讀取,要延時10ms左右
1、頁寫代碼
/*
函數:AT24C02頁寫函數
參數:*Data:要寫入的數據數組的首地址,Address:頁寫的首地址(最好是8的倍數,比如0x00,0x08,0x10等等),num:Data數組的長度
功能:一次性往AT24C02里的多個數據存儲地址寫入多個字節數據
返回值:無
*/
void AT24C02_Page_Write(unsigned char *Data,Address,num)
{I2CStart();I2CSendByte(0xA0);I2CWaitAck();I2CSendByte(Address);I2CWaitAck();while(num--){I2CSendByte(*Data++);I2CWaitAck();}I2CStop();Delayms(5); // 進行多次頁寫時,要加一個5ms延時,單次頁寫則不用加
}
2、頁讀代碼
/*
函數:AT24C02頁讀函數
參數:*Data:要寫入的數據數組的首地址,Address:頁寫的首地址(最好是8的倍數,比如0x00,0x08,0x10等等),num:Data數組的長度
功能:一次性往AT24C02里的多個數據存儲地址讀取多個字節數據
返回值:無
*/
void AT24C02_Page_Read(unsigned char *Data,Address,num)
{unsigned char Temp;I2CStart();I2CSendByte(0xA0);I2CWaitAck();I2CSendByte(Address);I2CWaitAck();I2CStart();I2CSendByte(0xA1);I2CWaitAck();while(num--){*Data++ = I2CReceiveByte();if(num != 0) I2CSendAck(0); // 沒讀完if(num == 0) I2CSendAck(1); // 讀完了}I2CStop();
}