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)
|