詳解資料儲存晶元AT24C02的應用及程式設計

2021-10-01 11:47:07 字數 3616 閱讀 2870

一.晶元簡介

at24c02是乙個2k位序列cmos e2prom,內部含有256個8位位元組,採用先進cmos技術實質上減少了器件的功耗。at24c02有乙個8位元組頁寫緩衝器,該器件通過iic匯流排介面進行操作,有乙個專門的寫保護功能。

二.晶元引數

1.特點

2.引腳定義

a0-a2引腳為晶元位址,用於多器件工作模式;sda、scl分別為iic通訊的資料線和時鐘線;wp為寫保護引腳,當該引腳接 gnd 時,允許正常的讀/寫操作。當該引腳接 vcc 時,晶元啟動寫保護功能;

3.參考電路

a0-a2接到gnd上,位址固定為0;scl、sda引腳內部為開漏輸出,所以需接上拉電阻;wp引腳接gnd,表示晶元可讀可寫。

三.通訊介面

1.晶元讀寫位址

在進行i2c通訊時,主機傳送啟動訊號後,再傳送定址訊號。器件的位址有7位和10位,以7為位址定址為例,定址訊號由乙個位元組構成,高7位為位址位,最低位為方向位,用來表示主機與從器件的資料傳輸方向;方向位0代表主機接下來對從器件進行寫操作;方向位為1,表明主機接下來對器件進行讀操作。

如上圖,at24c02的高4位是固定的,為1010b,低3位則由a0/a1/a2訊號線的電平決定。按照我們此處的連線, a0/a1/a2 均為 0,所以 eeprom 的 7 位裝置位址是: 1010 000b ,即 0x50。

由於 i2c 通訊時常常是位址跟讀寫方向連在一起構成乙個 8 位數,且當r/w 位為 0 時,表示寫方向,所以加上 7 位位址,其值為「 0xa0」,常稱該值為 i2c 裝置的「寫位址」;當 r/w 位為 1 時,表示讀方向,加上 7 位位址,其值為「 0xa1」,常稱該值為「讀位址」。

a0/a1/a2輸入腳用於多個器件級聯時設定器件位址,當這些腳懸空時預設值為0。當使用at24c02 時最大可級聯8個器件。如果只有乙個at24c02被匯流排定址,這三個位址輸入腳(a0、a1、a2 )可懸空(接地也可以)或連線到vss,如果只有乙個at24c01被匯流排定址這三個位址輸入腳(a0、a1、a2 )必須連線到vss。

2.iic通訊

由於51微控制器內部無整合iic控制硬體資源,所以需要軟體模擬iic通訊。函式有四個,分別為iic起始訊號、iic停止訊號、iic讀取位元組、iic寫入位元組等函式。

/*********************iic.h*************************************/

//--定義使用的io口--//

sbit i2c_scl = p2^1;

sbit i2c_sda = p2^0;

//--宣告全域性變數--//

void i2c_delay10us();

void i2c_start(); //起始訊號:在i2c_scl時鐘訊號在高電平期間i2c_sda訊號產生乙個下降沿

void i2c_stop(); //終止訊號:在i2c_scl時鐘訊號高電平期間i2c_sda訊號產生乙個上公升沿

uchar i2c_sendbyte(uchar dat, uchar ack);//使用i2c讀取乙個位元組

uchar i2c_readbyte(); //通過i2c傳送乙個位元組。在i2c_scl時鐘訊號高電平期間,保持傳送訊號i2c_sda保持穩定

/*********************iic.c*************************************/

//延時:1us

void i2c_delay10us()

}// 起始訊號:在i2c_scl時鐘訊號在高電平期間i2c_sda訊號產生乙個下降沿

void i2c_start()

//終止訊號:在i2c_scl時鐘訊號高電平期間i2c_sda訊號產生乙個上公升沿

void i2c_stop()

//通過i2c傳送乙個位元組。在i2c_scl時鐘訊號高電平期間, 保持傳送訊號i2c_sda保持穩定

uchar i2c_sendbyte(uchar dat, uchar ack)

i2c_sda = 1;

i2c_delay10us();

i2c_scl = 1;

while(i2c_sda && (ack == 1))//等待應答,也就是等待從裝置把i2c_sda拉低 }

i2c_scl = 0;

i2c_delay10us();

return 1;

}// 使用i2c讀取乙個位元組

uchar i2c_readbyte()

return dat;

}

三.控制程式

實現了基本iic通訊函式後,就可對at24c02進行操作,主要是寫入資料和讀取資料兩個函式。

晶元定址可對內部256b中的任乙個進行讀/寫操作,其定址範圍為00ff,共256個定址單位。所以可任意在00ff位址寫入我們需要儲存的資料。

1.at24c02寫入資料

時序順序為:傳送開始訊號,iic啟動->傳送器件位址,其中讀寫標誌位為寫->傳送器件內部儲存位址->向器件中寫入資料->傳送停止訊號,iic停止;

//函式功能		   : 往24c02的乙個位址寫入乙個資料

void at24c02write(unsigned char addr,unsigned char dat)

2.at24c02讀取資料

時序順序為:傳送開始訊號,iic啟動->傳送器件位址,其中讀寫標誌位為寫->傳送器件內部->傳送開始訊號,iic再次啟動->傳送器件位址,其中讀寫標誌位為讀->從器件讀出資料->返回所讀取的資料;

// 讀取24c02的乙個位址的乙個資料

unsigned char at24c02read(unsigned char addr)

3.at24c02讀寫資料

實現以上的讀寫功能,就可以使用at24c02來實現我們需要的功能。功能為:使用按鍵1,寫入num0;按鍵2,讀取num0;按鍵3,使num0加1;按鍵4,清零num0;

void main()

while((n < 20)&&(k3==0))

n=0;

n=0;

} if(k2 == 0) //按鍵2按下,讀取eeprom資料

while((n < 20)&&(k2 == 0))

n=0;

}

if(k3 == 0) //按鍵3按下,使num0自加1

n=0;

if(num0==256)

num0=0;

}

if(k4 == 0) //按鍵4按下,清零

n=0;

} lcd_display();

}}

AT24C02斷電儲存,資料寫入(rct6)

at24c02的儲存容量為2k bit,內容分成32頁,每頁8byte,共256byte,操作時有兩種定址方式 晶元定址和片內子位址定址。1 晶元定址 at24c02的晶元位址為1010,其位址控制字格式為1010a2a1a0r w。其中a2,a1,a0可程式設計位址選擇位。a2,a1,a0引腳接高...

AT24C02驅動程式

brief i2c匯流排延時 param return note static void dev eep i2c delay void brief i2c開始訊號 param return note scl高電平期間,sda乙個下降沿 scl sda static void dev eep i2c ...

AT24C02的知識總結

這週做清除報警記錄功能,所使用的儲存器晶元是at24c02,下面介紹at24c02使用的幾點關鍵點 1.at24c02寫資料和讀資料都是乙個位元組 8位 讀2個位元組 16位 會出錯,看下面datasheet 2.at24c02有2k的儲存容量,2k 2 1024 2048個位元組 所以最多可以往a...