• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于I2C協(xié)議的開機次數(shù)記錄

    基于I2C協(xié)議的開機次數(shù)記錄

    作者: 時間:2012-11-30 來源:網(wǎng)絡(luò) 收藏

    在之前我講過,也給出了簡單例子,這次利用,我們可以做一個小實驗,讓單片機單片機,也就是機器使用

    本文引用地址:http://www.czjhyjcfj.com/article/148234.htm

    // 內(nèi)容:每次都將加1 并存儲到EEPROM。這樣就能直觀的看到機器的使用 //

    // 次數(shù)用P1口 LED做為顯示,次數(shù)大于256是將溢出,按復(fù)位模擬 //

    // 或者直接通過開關(guān)開機 //

    #include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

    #include //包含NOP空指令函數(shù)_nop_();

    #define AddWr 0xae //寫數(shù)據(jù)地址,需要參考24c02芯片文檔

    #define AddRd 0xaf //讀數(shù)據(jù)地址

    sbit Sda=P1^2; //定義總線連接端口

    sbit Scl=P1^1;

    sbit WP=P1^0; //寫保護(hù),這里不使用

    /*------------------------------------------------

    延時程序

    ------------------------------------------------*/

    void mDelay(unsigned char j)

    {

    unsigned int i;

    for(;j>0;j--)

    {

    for(i=0;i125;i++)

    {;}

    }

    }

    /*------------------------------------------------

    啟動IIC總線

    ------------------------------------------------*/

    void Start(void)

    {

    Sda=1;

    _nop_();_nop_();

    Scl=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Sda=0;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Scl=0;

    }

    /*------------------------------------------------

    停止IIC總線

    ------------------------------------------------*/

    void Stop(void)

    {

    Sda=0;

    _nop_();

    Scl=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Sda=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Scl=0;

    }

    /*------------------------------------------------

    應(yīng)答IIC總線

    ------------------------------------------------*/

    void Ack(void)

    {

    Sda=0;

    _nop_();_nop_();_nop_();

    Scl=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Scl=0;

    _nop_();_nop_();

    }

    /*------------------------------------------------

    非應(yīng)答IIC總線

    ------------------------------------------------*/

    void NoAck(void)

    {

    Sda=1;

    _nop_();_nop_();_nop_();

    Scl=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Scl=0;

    _nop_();_nop_();

    }

    /*------------------------------------------------

    發(fā)送一個字節(jié)

    ------------------------------------------------*/

    void Send(unsigned char Data)

    {

    unsigned char BitCounter=8;

    unsigned char temp;

    do

    {

    temp=Data;

    Scl=0;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    if((temp0x80)==0x80)

    Sda=1;

    else

    Sda=0;

    Scl=1;

    temp=Data1;

    Data=temp;

    BitCounter--;

    }

    while(BitCounter);

    Scl=0;

    }

    /*------------------------------------------------

    讀入一個字節(jié)并返回

    ------------------------------------------------*/

    unsigned char Read(void)

    {

    unsigned char temp=0;

    unsigned char temp1=0;

    unsigned char BitCounter=8;

    Sda=1;

    do

    {

    Scl=0;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    Scl=1;

    _nop_();_nop_();_nop_();_nop_();_nop_();

    if(Sda)

    temp=temp|0x01;

    else

    temp=temp0xfe;

    if(BitCounter-1)

    {

    temp1=temp1;

    temp=temp1;

    }

    BitCounter--;

    }

    while(BitCounter);

    return(temp);

    }

    /*------------------------------------------------

    寫入數(shù)據(jù)

    ------------------------------------------------*/

    void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)

    {

    unsigned char i;

    unsigned char *PData;

    PData=Data;

    for(i=0;i

    {

    Start();

    Send(AddWr); //寫入芯片地址

    Ack();

    Send(Address+i);//寫入存儲地址

    Ack();

    Send(*(PData+i));//寫數(shù)據(jù)

    Ack();

    Stop();

    mDelay(20);

    }

    }

    /*------------------------------------------------

    讀出數(shù)據(jù)

    ------------------------------------------------*/

    void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)

    {

    unsigned char i;

    unsigned char *PData;

    PData=Data;

    for(i=0;i

    {

    Start(); //寫入芯片地址

    Send(AddWr);

    Ack();

    Send(Address+i);//寫入存儲地址

    Ack();

    Start();

    Send(AddRd); //讀入地址

    Ack();

    *(PData+i)=Read();//讀數(shù)據(jù)

    Scl=0;

    NoAck();

    Stop();

    }

    }

    //以上程序是EEPROM24C02程序部分,IICScl=0;

    /*------------------------------------------------

    主程序


    上一頁 1 2 下一頁

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 哈尔滨市| 西乡县| 将乐县| 白山市| 上饶县| 城步| 泰和县| 乐亭县| 桦川县| 云梦县| 合作市| 高尔夫| 安西县| 安庆市| 渭南市| 忻城县| 商洛市| 威远县| 阜城县| 巨野县| 乌兰县| 寻乌县| 个旧市| 仁布县| 荃湾区| 平陆县| 鸡东县| 孟连| 英吉沙县| 安仁县| 封开县| 长子县| 阳江市| 十堰市| 禹州市| 镇原县| 定陶县| 高清| 休宁县| 长汀县| 梨树县|