?? eeprom.c
字號:
#include "IIC.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define deviceaddress 0xa0 //AT24C02的設備地址
/*******************************************
函數名稱:delay_10ms
功 能:延時約6ms,等待EEPROM完成內部寫入
參 數:無
返回值 :無
********************************************/
void delay_10ms(void)
{
uint i = 1000;
while(i--);
}
/*******************************************
函數名稱:Write_1Byte
功 能:向EEPROM中寫入1個字節的數據
參 數:Wdata--寫入的數據
dataaddress--數據的寫入地址
返回值 :寫入結果:1--成功,0--失敗
********************************************/
uchar Write_1Byte(uchar wdata,uchar dataaddress)
{
start();
write1byte(deviceaddress);
if(check())
write1byte(dataaddress);
else
return 0;
if(check())
write1byte(wdata);
else
return 0;
if(check()) stop();
else return 0;
delay_10ms(); //等待EEPROM完成內部寫入
return 1;
}
/*******************************************
函數名稱:Write_NByte
功 能:向EEPROM中寫入N個字節的數據
參 數:outbuf--指向寫入數據存放首地址的指針
n--數據個數,最大不能超過8,由頁地址
決定其最大長度
dataaddress--數據寫入的首地址
返回值 :寫入結果:1--成功,0--失敗
********************************************/
uchar Write_NByte(uchar * outbuf,uchar n,uchar dataaddress)
{
uchar flag;
start();
write1byte(deviceaddress); //寫入器件地址
if(check() == 1)
write1byte(dataaddress); //寫入數據字地址
else
return 0;
if(check())
flag=writeNbyte(outbuf,n);
else
return 0;
delay_10ms(); //等待EEPROM完成內部寫入
if(flag) return 1;
else return 0;
}
/*******************************************
函數名稱:Read_1Byte_currentaddress
功 能:從EEPROM的當前地址讀取1個字節的數據
參 數:無
返回值 :讀取的數據
********************************************/
uchar Read_1Byte_currentaddress(void)
{
uchar temp;
start();
write1byte((deviceaddress|0x01));
if(check())
temp = read1byte();
else
return 0;
mnack();
stop();
return temp;
}
/*******************************************
函數名稱:Read_NByte_currentaddress
功 能:從EEPROM的當前地址讀取N個字節的數據
參 數:readbuf--指向保存數據地址的指針
n--讀取數據的個數
返回值 :讀取結果:1--成功,0--失敗
********************************************/
uchar Read_NByte_currentaddress(uchar * readbuf,uchar n)
{
start();
write1byte((deviceaddress|0x01));
if(check())
readNbyte(readbuf,n);
else
return 0;
return 1;
}
/*******************************************
函數名稱:Read_1Byte_Randomaddress
功 能:從EEPROM的指定地址讀取1個字節的數據
參 數:dataaddress--數據讀取的地址
返回值 :讀取的數據
********************************************/
uchar Read_1Byte_Randomaddress(uchar dataaddress)
{
uchar temp;
start();
write1byte(deviceaddress);
if(check())
write1byte(dataaddress);
else
return 0;
if(check())
{
start();
write1byte((deviceaddress|0x01));
}
else
return 0;
if(check())
temp = read1byte();
else
return 0;
mnack();
stop();
return temp;
}
/*******************************************
函數名稱:Read_NByte_Randomaddress
功 能:從EEPROM的指定地址讀取N個字節的數據
參 數:readbuf--指向保存數據地址的指針
n--讀取數據的個數
dataaddress--數據讀取的首地址
返回值 :讀取結果:1--成功,0--失敗
********************************************/
uchar Read_NByte_Randomaddress(uchar * readbuf,uchar n,uchar dataaddress)
{
start();
write1byte(deviceaddress);
if(check())
write1byte(dataaddress);
else
return 0;
if(check())
{
start();
write1byte(deviceaddress|0x01);
}
else
return 0;
if(check())
readNbyte(readbuf,n);
else
return 0;
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -