AT24C02
- 目的:存盤資料
- 原理
- 寫入
- 讀出
目的:存盤資料
做一件事,首先了解他的目的,我們使用AT24C03是為了存盤資料在eeprom中,達到斷電仍可保存的目的,
于是我們就需要弄清如何將資料寫入 以及 如何讀出寫入的資料,
我將以最簡單的方式教你依據資料手冊 寫出 存盤資料的程式,
原理
寫入

從上圖可以發現,卻認為的SDA為低電平~,我們有官方給的驅動里可以找到這么一個函式
void IIC_SendAck(bit ackbit)
{
SCL = 0;
SDA = ackbit; // 0:應答,1:非應答
IIC_Delay(DELAY_TIME);
SCL = 1;
IIC_Delay(DELAY_TIME);
SCL = 0;
SDA = 1;
IIC_Delay(DELAY_TIME);
}
IIC_SendAck(0)可以作為發送應答~
控制位元組的高四位 1010 = 9
低4位由A0,A1,A2, 0 組成,其中A0,A1,A2電平 表示選擇哪一個AT24C02,注意

起始位: start
控制位元組: 一般來說 為0x90
確認位: 上面我們提及的發送應答,將SDA置0;
地址位元組:存盤資料的地址,AT24xx00的器件,只使用地址位元組的低四位,所以存盤地址為0~255
資料位元組: 我們想存盤的資料
P: 停止位
請注意確認位的正確書寫,不能少寫也不能多寫,只有應答了,單片機才清楚你已經執行上一步,他才會準備下一步要做什么,否則程式將停滯不前或者跑飛
void W_at24c02(u8 address,u8 dat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_SendAck(0);
IIC_SendByte(address);
IIC_SendAck(0);
IIC_SendByte(dat);
IIC_SendAck(0);
IIC_Stop();
}
讀出

由芯片手冊,我們看出隨機讀取操作才能正確的將我們當前存盤地址的資料 讀取出來,而當前讀取操作會 讀取到我們寫入地址再+1 的地址,里面沒有存盤我們的資料,
并且,隨機讀取,需要先發送位元組地址(此時為寫操作),位元組地址發送完畢后,主器件收到確認信號就產生起始條件,
下面是代碼流程:

s起始位: start
控制位元組: 0x90(此時為寫如)
確認位: 上面我們提及的發送應答,將SDA置0;
地址位元組:之前我們寫入過資料的地址
確認位: 將SDA置0;
s起始位: start
控制位元組: 0x91(此時為讀操作)
資料位元組: 讀取 之前發送的地址位元組 里的資料
這里沒有確認位
P: 停止位
u8 R_at24c02(u8 address)
{
u8 temp;
IIC_Start();
IIC_SendByte(0xa0);
IIC_SendAck(0);
IIC_SendByte(address);
IIC_SendAck(0);
IIC_Start();
IIC_SendByte(0xa1);
IIC_SendAck(0);
temp = IIC_RecByte();
IIC_Stop();
return temp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266282.html
標籤:其他
