新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > I2C總線AT24C02芯片應(yīng)用

        I2C總線AT24C02芯片應(yīng)用

        作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

        code:

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

        /*
        通訊中 SDA 口通訊雙方都可為輸出,如果一方輸出低,

        另一方則如果輸出高也不能使SDA為高,相當(dāng)于,輸出低的一方占住了SDA口。

        兩個口,一個出高一個出低,則線上電平是低的。

        這是由于,出高的驅(qū)動能力不及出低拉電流的能力。


        所以SDA=1為釋放數(shù)據(jù)線
        */

        #include

        #define uint unsigned int

        #define uchar unsigned char

        sbit sda=P2^0;

        sbit scl=P2^1;

        void delay()//執(zhí)行空語句,微秒級延時函數(shù)

        {;;}

        void delay1ms(uint z)//延時1ms

        {

        uint x,y;

        for(x=z;x>0;x--)

        {

        for(y=0;y<=110;y++)

        {

        }

        }

        }

        void init()//初始化狀態(tài)下SCL和SDA都為高電平

        {

        scl=1;

        delay();

        sda=1;

        delay();

        }

        void start()//在SCL為高電平時SDA由高電平到低電平

        {

        sda=1;

        delay();

        scl=1;

        delay();

        sda=0;

        }

        void respons()

        /*

        應(yīng)答信號,SCL在高電平期間,SDA被從設(shè)備拉為低電平表示應(yīng)答。

        (sda==1)和i<255相與,表示若在一段時間內(nèi)沒有從器件的應(yīng)答則主器件

        默認從器件已經(jīng)收到數(shù)據(jù)而不再等待應(yīng)答信號

        */

        {

        uchar i;

        scl=1;

        delay();

        while((sda==1)&&(i<250))

        {

        i++;

        }

        scl=0;

        delay();

        }

        void stop()//SCL在高電平期間,SDA一個上升沿停止信號

        {

        sda=0;

        delay();

        scl=1;

        delay();

        sda=1;

        }

        void write_byte(uchar date)//寫一個字節(jié)

        {

        uchar i,temp;

        temp=date;

        for(i=0;i<8;i++)

        {

        temp=temp<<1;

        scl=0;//只有在SCL為0期間才允許SDA數(shù)據(jù)線上的狀態(tài)才允許變化

        delay();

        sda=CY;//PSW的寄存器的CY進位標志位

        delay();

        scl=1; //SCL時鐘信號為高電平期間數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定

        delay();

        }

        scl=0;

        delay();

        sda=1;//釋放總線

        delay();

        }

        uchar read_byte()

        {

        uchar i,k;

        scl=0;

        delay();

        sda=1;//釋放總線

        delay();

        for(i=0;i<8;i++)

        {

        scl=1;

        delay();

        k=(k<<1)|sda;

        scl=0;

        delay();

        }

        //delay();here is a bug

        return k;

        }



        關(guān)鍵詞: I2C總線AT24C02芯

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 林周县| 微山县| 明光市| 繁昌县| 大渡口区| 宁安市| 青川县| 资兴市| 天镇县| 东阳市| 四川省| 苗栗县| 凉城县| 上杭县| 襄城县| 乐平市| 新绛县| 金平| 昆明市| 桐梓县| 津市市| 繁昌县| 枝江市| 安平县| 兴海县| 原阳县| 玉树县| 宁陵县| 阿拉尔市| 荥阳市| 延长县| 伊春市| 兴文县| 托克托县| 北流市| 苗栗市| 肥西县| 鹿邑县| 灌阳县| 元谋县| 塔城市|