1. 程式人生 > >51微控制器讀寫EEPROM(AT24C02)

51微控制器讀寫EEPROM(AT24C02)

AT24C02引腳圖
AT24C02引腳功能描述

AT24C02的儲存容量為2K bit,內容分成32頁,每頁8Byte,共256Byte,操作時有兩種定址方式:晶片定址和片內子地址定址。
(1)晶片定址:AT24C02的晶片地址為1010,其地址控制字格式為1010A2A1A0R/W。其中A2,A1,A0可程式設計地址選擇位。A2,A1,A0引腳接高、低電平後得到確定的三位編碼,與1010形成7位編碼,即為該器件的地址碼。R/W為晶片讀寫控制位,該位為0,表示晶片進行寫操作。
(2)片內子地址定址:晶片定址可對內部256B中的任一個進行讀/寫操作,其定址範圍為00~FF,共256個定址單位。

函式宣告:

IIC開始函式:void IIC_Start(void
); 向IIC傳送資料:void IIC_SendByte(unsigned char address, unsigned char date); 從IIC接受資料:unsigned char IIC_RecByte(void); IIC應答函式:void IIC_Ack(void); IIC停止函式:void IIC_Stop(void);

向AT24C02寫資料步驟:
第1步:傳送開始訊號,IIC啟動;
第2步:傳送器件地址,其中讀寫標誌位為寫;
第3步:IIC應答訊號;
第4步:傳送器件內部儲存地址;
第5步:IIC應答訊號;
第6步:向器件中寫入資料;
第7步:IIC應答訊號;
第8步:傳送停止訊號,IIC停止

程式碼如下:

void writeAT24C02(unsigned char address, unsigned char date)
{
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_Ack();
    IIC_SendByte(address);
    IIC_Ack();
    IIC_SendByte(date);
    IIC_Ack();
    IIC_Stop();
}

從AT24C02中讀取資料步驟:
第1步:定義一個unsigned char型別的變數,以接受讀出的資料;
第2步:傳送開始訊號,IIC啟動;
第3步:傳送器件地址,其中讀寫標誌位為寫;
第4步:IIC應答訊號;
第5步:傳送器件內部儲存地址;
第6步:IIC應答訊號;
第7步:傳送開始訊號,IIC再次啟動;
第8步:傳送器件地址,其中讀寫標誌位為讀;
第9步:IIC應答訊號;
第10步:從器件讀出資料;
第11步:傳送停止訊號,IIC停止;
第12步:返回所讀取的資料;

程式碼如下:

unsigned char readAT24C02(unsigned char address)
{
    unsigned char date;
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_Ack();
    IIC_SendByte(address);
    IIC_Ack();
    IIC_Start();
    IIC_SendByte(0xa1);
    IIC_Ack();
    date = IIC_RecByte();
    IIC_Stop();
    return date;
}