24c02簡介
24C02是一個2Kbit的串行EEPROM存儲芯片,可存儲256個字節數據。工作電壓范圍為1.8V到6.0V,具有低功耗CMOS技術,自定時擦寫周期,1000000次編程/擦除周期,可保存數據100年。24C02有一個16字節的頁寫緩沖器和一個寫保護功能。通過I2C總線通訊讀寫芯片數據,通訊時鐘頻率可達400KHz。
51型號驅動程序
sbit I2C_SCL = P1^2; //控制24c02的SCL引腳
sbit I2C_SDA = P1^1; //控制24c02的SDA引腳
void I2C_Delay10us()//IIC協議所需:延遲10us函數
{
uchar a, b;
for(b=1; b>0; b--)
{
for(a=2; a>0; a--);
}
}
void I2C_Start() //開始啟動IIC,IIC協議頭
{
I2C_SDA = 1;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立時間是I2C_SDA保持時間>4.7us
I2C_SDA = 0;
I2C_Delay10us();//保持時間是>4us
I2C_SCL = 0;
I2C_Delay10us();
}
void I2C_Stop() //停止IIC,IIC協議尾
{
I2C_SDA = 0;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立時間大于4.7us
I2C_SDA = 1;
I2C_Delay10us();
}
/*******************************************************************************
* 函 數 名 : I2cSendByte(uchar num)
* 函數功能 : 通過I2C發送一個字節。在I2C_SCL時鐘信號高電平期間,
* * 保持發送信號I2C_SDA保持穩定
* 輸 入 : num ,ack
* 輸 出 : 0或1。發送成功返回1,發送失敗返回0
* 備 注 : 發送完一個字節I2C_SCL=0, 需要應答則應答設置為1,否則為0
*******************************************************************************/
uchar I2C_SendByte(uchar dat, uchar ack)
{
uchar a = 0,b = 0;//最大255,一個機器周期為1us,最大延時255us。
for(a=0; a8; a++)//要發送8位,從最高位開始
{
I2C_SDA = dat >> 7; //起始信號之后I2C_SCL=0,所以可以直接改變I2C_SDA信號
dat = dat < 1;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立時間?>4.7us
I2C_SCL = 0;
I2C_Delay10us();//時間大于4us
}
I2C_SDA = 1;
I2C_Delay10us();
I2C_SCL = 1;
while(I2C_SDA && (ack == 1))//等待應答,也就是等待從設備把I2C_SDA拉低
{
b++;
if(b > 200) //如果超過200us沒有應答發送失敗,或者為非應答,表示接收結束
{
I2C_SCL = 0;
I2C_Delay10us();
return 0;
}
}
I2C_SCL = 0;
I2C_Delay10us();
return 1;
}
uchar I2C_ReadByte() //IIC協議讀取數據
{
uchar a = 0,dat = 0;
I2C_SDA = 1; //起始和發送一個字節之后I2C_SCL都是0
I2C_Delay10us();
for(a=0; a8; a++)//接收8個字節
{
I2C_SCL = 1;
I2C_Delay10us();
dat <= 1;
dat |= I2C_SDA;
I2C_Delay10us();
I2C_SCL = 0;
I2C_Delay10us();
}
return dat;
}
/*******************************************************************************
* 函 數 名 : void At24c02Write(unsigned char addr,unsigned char dat)
* 函數功能 : 寫入24c02的一個地址的一個數據
*******************************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{
I2C_Start();
I2C_SendByte(0xa0, 1);//發送寫器件地址
I2C_SendByte(addr, 1);//發送要寫入內存地址
I2C_SendByte(dat, 0); //發送數據
I2C_Stop();
}
/*******************************************************************************
* 函 數 名 : unsigned char At24c02Read(unsigned char addr)
* 函數功能 : 讀取24c02的一個地址的一個數據
*******************************************************************************/
unsigned char At24c02Read(unsigned char addr)
{
unsigned char num;
I2C_Start();
I2C_SendByte(0xa0, 1); //發送寫器件地址
I2C_SendByte(addr, 1); //發送要讀取的地址
I2C_Start();
I2C_SendByte(0xa1, 1); //發送讀器件地址
num=I2C_ReadByte(); //讀取數據
I2C_Stop();
return num;
}
void main()
{
TMOD |= 0x01;
TH0=0XFC;
TL0=0X18;
TR0=1;
ET0=1;
EA=1;
while(1)
{
}
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
EEPROM
+關注
關注
9文章
1019瀏覽量
81560 -
存儲芯片
+關注
關注
11文章
896瀏覽量
43133 -
掉電
+關注
關注
0文章
12瀏覽量
7662
發布評論請先 登錄
相關推薦
24C02數據保存
=read_24C02(0);if(b==5)Alarm=1;}}這是我24C02的程序 這樣寫程序可以正常運行 蜂鳴器響但是下面這種寫法24C02掉電以后蜂鳴器不響 沒有讀取到數據v
發表于 12-06 09:30
24C02芯片的相關資料分享
202007每月一練 的板子上還有一個24C02芯片沒有寫教程,今天介紹一下24C02這個芯片的驅動方法。串行EEPROM 24CXX是基于I2C
發表于 01-21 11:51
24C02讀寫操作程序設計實例,24C02 read / write process
24C02讀寫操作程序設計實例,24C02 read / write process
關鍵字:24C02讀寫操作程序設計實例
24C
24c02讀寫程序(已通過測試),24C02 read / write process
24c02讀寫程序(已通過測試),24C02 read / write process
關鍵字:24c02讀寫程序(已通過測試
使用51單片機和EEPROM存儲器24C02保持保存實現流水燈的程序
本文檔的主要內容詳細介紹的是使用51單片機和EEPROM存儲器24C02保持保存實現流水燈的程序。
發表于 06-06 17:50
?7次下載
24C02 EEPROM存儲器的應用程序詳細說明
24C02 是一個非揮發 eeprom 存儲器器件,采用的 IIC 總線技術。24c02 在許多試驗中 都有出現。24c02 的應用,主要在存儲一些掉電后還要
發表于 12-22 08:00
?1次下載
24C02的秘密
本文主要介紹了一下目前市場上面24C02幾種打線方式的區別,有利于消費者在芯片選型替代、電路設計、軟件編程的注意一些細節,另外就是給出了用C語言軟件模擬I2C協議和用匯編語言軟件模擬I2C
評論