資料介紹
現(xiàn)缺頁(yè)寫、頁(yè)讀,和CRC校驗(yàn)程序。以下程序經(jīng)過50臺(tái)驗(yàn)證,批量的效果有待考察。
為了安全起見,程序中很多NOP是冗余的,希望讀者能進(jìn)一步精簡(jiǎn),但必須經(jīng)過驗(yàn)證。
Atmel 24C01 比較特殊,為簡(jiǎn)約型,為其單獨(dú)編程.
51晶振為11.0592MHz
〖文件〗RW24CXX.c 2001/09/18
--------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
調(diào)用方式:void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata) ﹫2001/09/18
函數(shù)說明:對(duì)于IIC芯片24CXX,在指定地址address寫入一個(gè)字節(jié)ddata
?
調(diào)用方式:unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address) ﹫2001/09/18
函數(shù)說明:讀取IIC芯片24CXX,指定地址address的數(shù)據(jù)。
-----------------------------------------------------------------------------------*/
#include "reg51.h"
#include "intrins.h"
sbit SCL= P2^7;
sbit SDA= P2^6;
enum EEPROMTYPE {IIC24C01,IIC24C01A,IIC24C02,IIC24C04,IIC24C08,IIC24C16,IIC24C32,IIC24C64,IIC24C128,IIC24C256};
enum EEPROMTYPE eepromtype;
delay()
{
unsigned int i=1200;
while(i--);
}
/*----------------------------------------------------------------------------
調(diào)用方式:write_8bit(unsigned char ch) ﹫2001/03/23
函數(shù)說明:內(nèi)函數(shù),私有,用戶不直接調(diào)用。
-------------------------------------------------------------------------------*/
void write_8bit(unsigned char ch)
{
unsigned char i=8;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
while (i--)
{
SDA=(bit)(ch&0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();
ch<<=1;
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*------------------------------------------------------------------------------
調(diào)用方式:void ACK(void) ﹫2001/03/23
函數(shù)說明:內(nèi)函數(shù),私有,用戶不直接調(diào)用。
-------------------------------------------------------------------------------*/
void ACK(void)
{
unsigned char time_1;
SDA=1;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
time_1=5;
while(SDA) {if (!time_1) break;} //ACK
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void WriteIIC_24C01(unsigned char address,unsigned char ddata)
{SCL=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit( (address<<1) & 0xfe); //寫頁(yè)地址和操作方式,對(duì)于24C32-24C256,page不起作用
ACK();
write_8bit(ddata); //發(fā)送數(shù)據(jù)
ACK();
SDA=0;
_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay();
}
/*---------------------------------------------------------------------------------------------------------------
調(diào)用方式:void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata) ﹫2001/09/18
函數(shù)說明:對(duì)于IIC芯片24CXX,在指定地址address寫入一個(gè)字節(jié)ddata
-----------------------------------------------------------------------------------------------------------------*/
void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata)
{ unsigned char page,address_in_page;
if(eepromtype==IIC24C01) //如果是24c01
{
WriteIIC_24C01(address,ddata);
return;
}
page=(unsigned char)(address>>8) & 0x07;
page=page<<1;
address_in_page=(unsigned char)(address);
SCL=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xa0 | page); //寫頁(yè)地址和操作方式,對(duì)于24C32-24C256,page不起作用
ACK();
if(eepromtype>IIC24C16) //如果是24C01-24C16,地址為一字節(jié);24C32-24C256,地址為二字節(jié)
{
write_8bit(address>>8);
ACK();
}
write_8bit(address_in_page);
ACK();
write_8bit(ddata);
ACK();
SDA=0;
_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay();
}
unsigned char ReadIIC_24C01(unsigned char address)
{
unsigned char ddata=0;
unsigned char i=8;
SCL=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit( (address<<1) | 0x01); //寫頁(yè)地址和操作方式
ACK();
while (i--)
{
SDA=1;
ddata<<=1;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
if (SDA) ddata|=0x01;
}
SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay();
return ddata;
}
/*----------------------------------------------------------------------------------------------------
調(diào)用方式:unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address) ﹫2001/09/18
函數(shù)說明:讀取IIC芯片24CXX,指定地址address的數(shù)據(jù)。
------------------------------------------------------------------------------------------------------*/
unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address)
{ unsigned char page,address_in_page;
unsigned char ddata=0;
unsigned char i=8;
if(eepromtype==IIC24C01)
{
return( ReadIIC_24C01(address) );
}
page=(unsigned char)(address>>8) & 0x07;
page=page<<1;
address_in_page=(unsigned char)(address);
SDA=0;_nop_();SCL=0; //START
write_8bit(0xa0 | page); //寫頁(yè)地址和操作方式,對(duì)于24C32-24C256,page不起作用
ACK();
if(eepromtype>IIC24C16) //如果是24C32-24C256,地址為二字節(jié),先送高位,后送低位
{
write_8bit(address>>8);
ACK();
}
//如果是24C01-24C16,地址為一字節(jié);
write_8bit(address_in_page);
ACK();//以上是一個(gè)“啞”寫操作,相當(dāng)于設(shè)置當(dāng)前地址
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xa1); //寫從地址,置為讀模式
ACK();
while (i--)
{
SDA=1;
ddata<<=1;
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
if (SDA) ddata|=0x01;
}
SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; //STOP
delay();
return ddata;
}
/*分析:
該芯片采用傳統(tǒng)的IIC口的規(guī)約形式,是一個(gè)標(biāo)準(zhǔn)的經(jīng)典IIC封裝。
注:使用該程序時(shí)注意改變芯片各個(gè)接口的修改。注意屏蔽主函數(shù)。
*/
main()
{
unsigned int i;
unsigned char kk,j[32];
delay();
kk=ReadIIC_24C01( 12 );
WriteIIC_24C01(12,0x67);
kk=ReadIIC_24C01(12);
for(i=0;i<32;i++) j[i]=ReadIIC_24CXX(IIC24C01,i);
for(i=0;i<32;i++) j[i]=i*2;
for(i=0;i<32;i++) WriteIIC_24CXX(IIC24C01,i,0x55);
for(i=0;i<32;i++) j[i]=0;
for(i=0;i<32;i++) j[i]=ReadIIC_24CXX(IIC24C02,i);
}
- 24C08程序源代碼
- TCL 2139C(24C08)存儲(chǔ)器數(shù)據(jù)
- 海爾3499(24C08)存儲(chǔ)器數(shù)據(jù)
- 海爾3499 24C08存儲(chǔ)器數(shù)據(jù)
- 海爾2190 24C08存儲(chǔ)器數(shù)據(jù)
- 康佳T2123(24C08) EPROM數(shù)據(jù)
- 康佳K系列(24C08)EPROM數(shù)據(jù)
- 康佳2166A(24C08)EPROM數(shù)據(jù)
- 長(zhǎng)虹PF2193E CH08T0609 24C16機(jī)芯EPR
- 24c16讀寫驅(qū)動(dòng)程序
- 24C08/24C16 pdf datasheet
- 24c16/24c08/24c04中文資料
- AT24C02/AT24C04/AT24C08/AT24C1
- 24C32 pdf datasheet
- at24c16 c程序
- 通過IIC總線讀寫AT24C512存儲(chǔ)器 2881次閱讀
- STM32基礎(chǔ)知識(shí):IIC總線操作EEPROM存儲(chǔ)模塊AT24C02 2440次閱讀
- AT24C04芯片驅(qū)動(dòng)程序原理 2410次閱讀
- STM32G0開發(fā)筆記:EEPROM M24C02的使用方法 2941次閱讀
- 微雪電子EEPROM存儲(chǔ)模塊AT24C簡(jiǎn)介 2389次閱讀
- AT24C系列芯片的驅(qū)動(dòng)設(shè)計(jì) 4813次閱讀
- AT89S52單片機(jī)并行端口模擬I2C總線協(xié)議讀寫AT24C04的設(shè)計(jì) 2767次閱讀
- 如何使用單片機(jī)模擬讀寫24C01EEPROM數(shù)據(jù) 5146次閱讀
- 如何采用C51單片機(jī)讀寫CAT24C32 2642次閱讀
- at24c04中文資料匯總(at24c04引腳圖及功能_工作原理及電路圖) 8.1w次閱讀
- C51讀寫AT24C04源代碼及AT24C04測(cè)試程序 1.7w次閱讀
- 單片機(jī)STC12C5A60S2控制AT24C04的程序(C語(yǔ)言) 7680次閱讀
- AT24C256介紹_AT24C256燒錄的完整程序 1.5w次閱讀
- 單片機(jī)之IIC--AT24C256的讀寫程序 1.4w次閱讀
- 讀寫24LCxx系列的EEPROM的實(shí)例程序 2267次閱讀
下載排行
本周
- 148V到5KW無(wú)橋LLC雙向逆變器的電路原理圖免費(fèi)下載
- 0.26 MB | 154次下載 | 10 積分
- 22KW逆變側(cè)功率管的損耗如何進(jìn)行計(jì)算詳細(xì)公式免費(fèi)下載
- 0.40 MB | 32次下載 | 2 積分
- 3高功率密度碳化硅MOSFET軟開關(guān)三相逆變器損耗分析
- 2.27 MB | 30次下載 | 5 積分
- 4S7-200 可編程序控制器系統(tǒng)手冊(cè)
- 12.81 MB | 4次下載 | 免費(fèi)
- 5ATX電源 FSP_ATX-300PAF電路圖資料
- 0.18 MB | 1次下載 | 2 積分
- 6IP6541_L 150uA 低功耗,集成多種快充輸出協(xié)議中文資料
- 1.43 MB | 次下載 | 免費(fèi)
- 7PC5010 單通道20V_10A低邊高速驅(qū)動(dòng)器技術(shù)手冊(cè)
- 1.17 MB | 次下載 | 免費(fèi)
- 8GSV2201D 帶嵌入式MCU的DisplayPort 1.4到HDMI 2.0轉(zhuǎn)換器規(guī)格書
- 0.67 MB | 次下載 | 2 積分
本月
- 148V到5KW無(wú)橋LLC雙向逆變器的電路原理圖免費(fèi)下載
- 0.26 MB | 154次下載 | 10 積分
- 22KW逆變側(cè)功率管的損耗如何進(jìn)行計(jì)算詳細(xì)公式免費(fèi)下載
- 0.40 MB | 32次下載 | 2 積分
- 3高功率密度碳化硅MOSFET軟開關(guān)三相逆變器損耗分析
- 2.27 MB | 30次下載 | 5 積分
- 4STM32F10x參考手冊(cè)資料
- 13.64 MB | 12次下載 | 1 積分
- 5OAH0428 V1.0英文規(guī)格書
- 5.86 MB | 8次下載 | 免費(fèi)
- 6光伏并網(wǎng)逆變器原理
- 7.31 MB | 6次下載 | 2 積分
- 7NS1081/NS1081S/NS1081Q USB 3.0閃存數(shù)據(jù)手冊(cè)
- 0.40 MB | 4次下載 | 2 積分
- 8S7-200 可編程序控制器系統(tǒng)手冊(cè)
- 12.81 MB | 4次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935132次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191422次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81600次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65990次下載 | 10 積分
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論