機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
24LC65 I2C EEPROM字節(jié)讀寫驅(qū)動程序
24LC65 I2C EEPROM字節(jié)讀寫驅(qū)動程序
 更新時間:2008-7-27 15:50:22  點擊數(shù):4
【字體: 字體顏色

/*————————————————————
〖說明〗24LC65 I2C EEPROM字節(jié)讀寫驅(qū)動程序,芯片A0-A1-A2要接VCC。
現(xiàn)缺頁寫、頁讀,和CRC校驗程序。以下程序經(jīng)過50臺驗證,批量的效果有待考
察。
為了安全起見,程序中很多NOP是冗余的,希望讀者能進一步精簡,但必須經(jīng)過驗
證。
51晶振為11.0592MHz
〖文件〗24LC65.c ﹫2001/03/23
〖作者〗龍嘯九天 c51@yeah.net http://mcs51.yeah.net
〖修改〗修改建議請到論壇公布 http://c51bbs.yeah.net
〖版本〗V1.00A Build 0323
—————————————————————*/
#define SDA P0_0
#define SCL P0_1

/*----------------------------------------------------------------------------
調(diào)用方式:write_8bit(uchar ch) ﹫2001/03/23
函數(shù)說明:內(nèi)函數(shù),私有,用戶不直接調(diào)用。
------------------------------------------------------------------------------*/
write_8bit(uchar ch)
{
uchar 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)
{
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_();
}

/*------------------------------------------------------------------------------
--
調(diào)用方式:void Write24LC65(uint address,uchar ddata) ﹫2001/03/23
函數(shù)說明:在指定地址address(address<0x2000)寫入一個字節(jié)ddata
--------------------------------------------------------------------------------
-*/
void Write24LC65(uint address,uchar 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(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_();
delay(10);
}

/*------------------------------------------------------------------------------
--
調(diào)用方式:uchar Read24LC65(uint address) ﹫2001/03/23
函數(shù)說明:讀取24LC65指定地址address(address<0x2000)的數(shù)據(jù)。
--------------------------------------------------------------------------------
-*/
uchar Read24LC65(uint address)
{
uchar ddata=0;
uchar i=8;
SDA=0;_nop_();SCL=0; //START
write_8bit(0xae); //寫從地址
ACK();
write_8bit(address>>8);
ACK();
write_8bit(address&0x00FF);
ACK();
//以上是一個“啞”寫操作,相當于設(shè)置當前地址

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_();
delay(5);
return ddata;
}

  • 24c65 和24c64 可通用,俺的編程器就這樣 [haotz] [50次] 01-3-24 下午 09:50:14

  • 24LC65 I2C EEPROM字節(jié)讀寫驅(qū)動程序(修正版) [龍嘯九天] [645次] 01-5-12 下午 12:27:07

    修改,在讀寫EEPROM過程中關(guān)閉掉中斷,否則在同時讀寫EEPROM和串口通訊時
    會有隨機的誤碼,請大家注意!

    /*---------------------------------------------------------------------------
    調(diào)用方式: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);
    }

    /*------------------------------------------------------------------------------
    調(diào)用方式: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();
        //以上是一個“啞”寫操作,相當于設(shè)置當前地址
        
        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;
    }

  • 上一篇: 4×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖
  • 下一篇: C51紅外解碼程序
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1