- 24c65 和24c64 可通用,俺的編程器就這樣 [haotz] [50次] 01-3-24 下午 09:50:14
- 24LC65 I2C EEPROM字節(jié)讀寫驅動程序(修正版) [龍嘯九天] [645次] 01-5-12 下午 12:27:07
修改,在讀寫EEPROM過程中關閉掉中斷,否則在同時讀寫EEPROM和串口通訊時
會有隨機的誤碼,請大家注意!
/*---------------------------------------------------------------------------
調用方式:void Write24LC65(uint address,uchar ddata) ﹫2001/03/23
函數(shù)說明:在指定地址address(address<0x2000)寫入一個字節(jié)ddata
-----------------------------------------------------------------------------*/
void Write24LC65(uint address,uchar ddata)
{
EA=0;
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(0xae); //寫從地址
ACK();
write_8bit(address>>8);
ACK();
write_8bit(address&0x00FF);
ACK();
write_8bit(ddata);
ACK();
SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
();SDA=1; //STOP
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
EA=1;
delay(10);
}
/*------------------------------------------------------------------------------
調用方式:uchar Read24LC65(uint address) ﹫2001/03/23
函數(shù)說明:讀取24LC65指定地址address(address<0x2000)的數(shù)據(jù)。
------------------------------------------------------------------------------*/
uchar Read24LC65(uint address)
{
uchar ddata=0;
uchar i=8;
EA=0;
SDA=0;_nop_();SCL=0; //START
write_8bit(0xae); //寫從地址
ACK();
write_8bit(address>>8);
ACK();
write_8bit(address&0x00FF);
ACK();
//以上是一個“啞”寫操作,相當于設置當前地址
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(0xaf); //寫從地址,置為讀模式
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
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
EA=1;
delay(5);
return ddata;
}





