新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機模擬I2C總線讀寫EEPROM(24CXX)程序一

        單片機模擬I2C總線讀寫EEPROM(24CXX)程序一

        作者: 時間:2016-11-11 來源:網絡 收藏
        下面是一個最簡單的讀寫程序,可以用來檢測線路狀況。先附上程序和電路,后面附有說明。

        電路:

        本文引用地址:http://www.104case.com/article/201611/316791.htm

        說明:P2口的LED都是我用來檢測電路執行到哪一步的,個人覺得一目了然。

        程序:

        #include
        #define unit unsigned int
        #define uchar unsigned char
        int ok;
        sbit scl=P0^0;
        sbit sda=P0^1;
        sbit led0=P2^0;
        sbit led1=P2^1;
        sbit led2=P2^2;
        sbit led3=P2^3;
        sbit led4=P2^4;
        sbit led5=P2^5;
        sbit led6=P2^6;
        sbit led7=P2^7;

        delay(void) //delay
        {
        int i;
        led1=1;
        for(i=0;i<1;i++) led1=0;
        }

        start(void) //start
        {
        sda=1;
        scl=1;
        delay();
        sda=0;
        delay();
        scl=0;
        led0=0;
        }

        stop(void) //stop
        {
        sda=0;
        scl=1;
        delay();
        sda=1;
        delay();
        scl=0;
        }

        checkanswer(void) //check answer
        {
        sda=1;
        scl=1;
        if(sda==1)
        {
        F0=1;
        led7=0;
        }
        scl=0;
        led3=0;
        }

        sendabyte(int temps) //send a byte
        {
        uchar n=8;
        while(n--)
        {
        led2=1;
        if((temps&0x80)==0x80)
        {
        sda=1;
        scl=1;
        delay();
        scl=0;
        }
        else
        {
        sda=0;
        scl=1;
        delay();
        scl=0;
        }
        temps=temps<<1;
        led2=0;
        }
        }

        reciveabyte() //recive a byte
        {
        uchar n=8,tempr;
        while(n--)
        {//uchar idata *abyte
        scl=1;
        tempr=tempr<<1;
        if(sda==1)
        tempr=tempr|0x01;
        else
        tempr=tempr&0xfe;
        scl=0;
        }
        ok=tempr;
        return(ok);
        }

        main(void) //MAIN
        {
        start();

        sendabyte(0xa0);
        checkanswer();
        if(F0==1) return;

        sendabyte(0x00);
        checkanswer();
        if(F0==1) return;

        sendabyte(0x11);
        checkanswer();
        if(F0==1) return;
        /*-----------------------*/
        start();

        sendabyte(0xa0);
        checkanswer();
        if(F0==1) return;

        sendabyte(0x00);
        checkanswer();
        if(F0==1) return;

        start();

        sendabyte(0xa1);
        checkanswer();
        if(F0==1) return;

        reciveabyte();
        if(ok==0x11) led6=0;
        stop();
        }

        說明:

        1、寫驅動程序之前建議了解清楚24CXX系列芯片的讀寫時序,中文資料可以到我的網盤下載,免注冊下載鏈接:http://wdpvip.qupan.com/6293600.html

        2、程序功能:先在地址0x00寫入一個數據0x11,然后再讀出來,若寫入的數據和讀出的數據一樣就點亮led6。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 灵寿县| 沅陵县| 阳朔县| 勃利县| 甘谷县| 莱西市| 苏尼特右旗| 彭州市| 广宗县| 永福县| 长宁县| 贡嘎县| 安塞县| 唐山市| 元朗区| 朝阳区| 灵寿县| 子长县| 营山县| 确山县| 海盐县| 尚义县| 治多县| 衡东县| 宜兴市| 波密县| 九龙坡区| 淮北市| 塘沽区| 娄底市| 通榆县| 当雄县| 常州市| 比如县| 乌兰察布市| 扎兰屯市| 台江县| 陇西县| 邢台市| 黄山市| 安阳县|