?? i2c_eeprom.h
字號:
/*--------------------------------------------------------------------------
I2C_EEPROM.H
Design For :I2C_EEPROM器件( 適用于:AT24C64 / AT24C128 / At24C256 / At24C512 / 2464 / 24128 /24256 )
Author:xieqin
CopyRight:2004.9.8
--------------------------------------------------------------------------*/
#ifndef __I2C_EEPROM_H__
#define __I2C_EEPROM_H__
void Write_I2C_EEPROM(unsigned char nChip,unsigned int address,unsigned char *dat,unsigned char num)
{ //nChip=器件地址,address=器件內部字節單元地址,dat=數據緩沖區首址,num=數據長度
unsigned char i;
Start_I2C(); //申請總線
if(SendByte_I2C(0xa0+(nChip<<1)))return; //發送寫命令
if(SendByte_I2C((address&0xff00)>>8))return;//發送內部地址高字節部分
if(SendByte_I2C(address&0xff))return; //發送內部地址低字節部分
for(i=0;i<num;i++)
{
if(SendByte_I2C(*dat++))return;//發送數據
}
Stop_I2C(); //釋放總線
}
void Read_I2C_EEPROM(unsigned char nChip,unsigned int address,unsigned char *x,unsigned char num)
{ //nChip=器件地址,address=器件內部字節單元地址,x=數據緩沖區首址,num=數據長度
unsigned char i;
//對24系列的器件而言,要讀取器件內部數據必須兩次申請I2C總線,
//第一次用于設置器件內部地址指針
//第二才以"讀取當前地址單元的數據"的方式讀取數據
Start_I2C(); //申請總線
if(SendByte_I2C(0xa0+(nChip<<1)))return; //發送寫命令
if(SendByte_I2C((address&0xff00)>>8))return;//發送內部地址高字節部分
if(SendByte_I2C(address&0xff))return;//發送內部地址低字節部分
Start_I2C(); //重新申請總線
if(SendByte_I2C(0xa1+(nChip<<1)))return; //發送讀命令
for(i=0;i<num-1;i++)//接收前num-1個字節
{
*x++=ReadByte_I2C();
AckS_I2C(0);//發送有效應答
}
*x++=ReadByte_I2C();//接收最后一個字節
AckS_I2C(1); //發送無效應答
Stop_I2C(); //釋放總線
}
unsigned char CurrentAddressRead(unsigned char nChip)//從當前地址讀取數據函數
{ //nChip=器件地址,函數返回讀取的一字節數據
unsigned char dat;
Start_I2C(); //重新申請總線
if(SendByte_I2C(0xa1+(nChip<<1)))return; //發送讀命令 (包括器件地址)
dat=ReadByte_I2C;//讀取一字節數據
AckS_I2C(1);//發回無效應答
Stop_I2C();//釋放總線
return dat;//返回讀取的數據
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -