AT24C1024全容量讀寫程序,只要讀寫起始地址和讀寫長度,程序自動跨頁,絕對原創、絕對好用,含測試程序。
單片機源程序如下:
- #include "nxplpc11xx.h"
- #include "i2c.h"
- #include "AT24C1024.h"
- /************************************************************/
- /* 函數功能:從AT24C1024中讀數據 */
- /* 入口參數StartAddr:起始地址,經測試跨頁時地址會自動加1。*/
- /* *pData:讀入的數據放到這個數組中 */
- /* nBytes:要寫的數據字節個數 */
- /************************************************************/
- void AT24C1024_Read(uint32 StartAddr, uint16 nBytes, uint8 *pData)
- {
- uint8 StartAddr_L, StartAddr_H, P0;
- StartAddr_L = StartAddr & 0x0000ff;
- StartAddr_H = (StartAddr >> 8) & 0x0ff;
- P0 = (StartAddr / 0x10000) << 1;
- I2C_Send_Ctrl(AT24C1024_Addr | P0);
- I2C_Send_Byte(StartAddr_H);
- I2C_Send_Byte(StartAddr_L);
- I2C_Stop();
- I2C_Send_Ctrl((AT24C1024_Addr | P0) + 1);
- while(nBytes != 1)
- {
- *pData++=I2C_Recieve_Byte(1); // 應答位為ACK,不釋放總線,繼續讀
- nBytes--;
- }
- *pData++=I2C_Recieve_Byte(0); // 應答位為NACK,停止讀,釋放總線
- I2C_Stop(); // 產生一個停止條件
- delay_us(10); // 這個延時是任意地址讀兩段數據時最小時間間隔,保證停止位后正常產生下一個開始位。
- }
- /*******************************************************************/
- /* 函數功能:給AT24C1024寫數據 */
- /* 入口參數StartAddr:起始地址,跨頁寫時,需要重新寫入地址數據。 */
- /* *pData:把這個數組中的數據寫入 */
- /* nBytes:要寫的數據字節個數 */
- /*******************************************************************/
- void AT24C1024_Write(uint32 StartAddr, uint16 nBytes, uint8 *pData)
- {
- uint8 StartAddr_L, StartAddr_H, P0;
- while(nBytes != 0) // 所有數據發送完畢,退出循環
- {
- StartAddr_L = StartAddr & 0x0000ff; // 計算低位地址
- StartAddr_H = (StartAddr >> 8) & 0x0ff; // 計算高位地址
- P0 = (StartAddr / 0x10000) << 1; // 計算第17位,即P0
- I2C_Send_Ctrl(AT24C1024_Addr | P0); // 帶P0發送器件地址
- I2C_Send_Byte(StartAddr_H); // 發送高位地址
- I2C_Send_Byte(StartAddr_L); // 發送低位地址
- while(nBytes != 0) // 數據未發送完,循環
- {
- I2C_Send_Byte(*pData);
- pData++;
- nBytes--;
- StartAddr++;
- if((StartAddr & 0x00ff) == 0) // 跨頁,終止當前頁循環,重新寫入新地址
- break;
- }
- I2C_Stop(); // 產生一個停止條件
- delay_ms(3); // 這個延時為兩次讀寫最小間隔時間,不要刪除,連續大量寫數據時有用。
- }
- }
復制代碼- /************************************************/
- /* AT24C1024全容量讀寫程序 */
- /* CPU型號:LPC1114FBD/302 */
- /************************************************/
- #include "nxplpc11xx.h"
- #include "i2c.h"
- #include "AT24C1024.h"
- int main()
- {
- union Initial_Value{uint8 Val_Hex[400];float Val_Float[100];}Init; //定義一個浮點數組,用于寫入和讀出,一個浮點數用4個字節
- uint16 i;
- float j;
- SysCLK_config(); // 時鐘配置
- I2C_Init(0); // 初始化I2C 快速模式
- delay_ms(10);
- for(i=0; i<100; i++) // 初始化浮點數組分別為0——99。
- {
- j = i;
- Init.Val_Float[i] = j;
- }
- AT24C1024_Write(0xff80, 400, Init.Val_Hex); // 寫入
- delay_ms (3);
- AT24C1024_Read(0xff80, 400, Init.Val_Hex);
- while(1)
- {};
- }
復制代碼
所有資料51hei提供下載:
AT24C1024.zip
(112.69 KB, 下載次數: 105)
2018-1-2 12:40 上傳
點擊文件名下載附件
AT24C1024全容量讀寫程序 下載積分: 黑幣 -5
|