前言
在實際的應用中,我們需要一些存儲介質幫助我們來存儲一些東西,如保存一些參數和配置數據等。比較常用的有AT24Cxx系列。AT24C02芯片是以IIC接口的EEPROM器件。所謂EEPROM即電可擦除可編程只讀存儲器,是ROM的一種。它是只讀存儲器,即掉電可繼續存儲數據,而同時又可以在高于普通電壓的作用下擦除和重寫。
AT24C02
其中A0、A1、A2用于定義芯片地址,VCC和GND是供電正負接口,SCL和SDA是IIC的數據總線,WP是寫保護(若接VCC則該芯片所有內容都被保護,只能讀不能寫,一般我們直接接地)。單片機入門繪制電路板,需要正品元器件可去唯樣商城,原廠真貨。
AT24C02的從機地址前四位1010為固定值,A0,A1,A2正好與芯片的1,2,3引角對應,最末一位表示讀(1)或寫(0)。
AT24C02的內存有2Kbit(256byte),分為32頁,對其的寫操作包括字節寫和頁寫。
寫操作
字節寫
字節寫就是對指定地址的字節進行寫入操作,時序是:
①發送start信號
②發送從器件地址+寫標志“0”,并等待應答信號
③發送要寫入的地址,并等待應答信號
④發送要寫入的數據,并等應答信號
⑤發送stop信號。
頁寫
頁寫則是在字節寫的基礎上,在第⑤步之前多次使用第④步,即最后先不要發送stop信號,而是繼續發送數據,這時AT24C02就會自動將地址加一,待所有數據發送完畢再發送stop信號。
讀操作
隨機讀
隨機讀可以指定要讀取數據的地址,具體時序:
①發送start信號
②發送從器件地址+寫標志“0”,并等待應答
③發送要讀數據的地址,并等待應答
④重新發送一個start信號(也可稱為restart信號)
⑤發送從器件地址+讀標志“1”,并等待應答
⑥接收傳來的數據,收到數據后要發送非應答信號
⑦發送stop信號。
當前地址讀
當前地址讀則是只能讀取芯片內部最近一次操作的地址加一處的數據(主要在已知上次操作地址時使用),具體時序:
①發送start信號
②發送從器件地址+讀標志“1”,并等待應答
③接收傳來的數據,然后發送非應答信號
④發送stop信號。
順序讀
順序讀則是在前兩種讀操作的基礎上,在接收到數據后發送應答信號,然后就可以繼續讀上次操作地址加一處的數據了(這是在芯片內部實現的),當讀夠數據后,要發送非應答信號,最后發送stop信號。
代碼
void write_AT24C02(uchar unit_addr, uchar dat)
{
start();
write_byte(AT24C02_ADDR + 0);//下一個字節為寫,所以是+0
ack();
write_byte(unit_addr);
ack();
write_byte(dat);
ack();
end();
}
?
uchar read_AT24C02(uchar unit_addr)
{
uchar dat;
/先寫數據/
start();
write_byte(AT24C02_ADDR + 0);//下一個字節為寫
ack();
write_byte(unit_addr);
ack();
start();
write_byte(AT24C02_ADDR + 1);//下一個字節為讀
ack();
dat = read_byte();
end();
return dat;
}
?
void main()
{
write_AT24C02(0xf0, 0xae);
delay_10ms(); //寫完后,必須延時一定的時間才可以讀取
P1 = read_AT24C02(0xf0);
while(1);
}
?
審核編輯 黃昊宇
-
單片機
+關注
關注
6035文章
44554瀏覽量
634690
發布評論請先 登錄
相關推薦
評論