中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > I2C總線驅(qū)動(dòng)(C51語(yǔ)言源程序)

        I2C總線驅(qū)動(dòng)(C51語(yǔ)言源程序)

        作者: 時(shí)間:2013-01-07 來(lái)源:網(wǎng)絡(luò) 收藏

        i2c 總線上單片機(jī)系統(tǒng)中常用到的總線技術(shù)這里給大家介紹一個(gè)源程序。

        //#pragma ot(6,SIZE)
        #i nclude AT89X52.H>
        #i nclude intrins.h>
        #define ERRORCOUNT 10
        #define read 0xa1
        #define write 0xa0
        sbit SDA=P1^6;
        sbit SCL=P1^5;
        enum eepromtype {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
        enum eepromtype EepromType;

        //DataBuff為讀寫數(shù)據(jù)輸入/輸出緩沖區(qū)的首址
        //ByteQuantity 為要讀寫數(shù)據(jù)的字節(jié)數(shù)量
        //Address 為EEPROM的片內(nèi)地址
        //ControlByte 為EEPROM的控制字節(jié),具體形式為(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
        //表示讀操作,R/W=0為寫操作,A2,A1,A0為EEPROM的頁(yè)選或片選地址;
        //EepromType為枚舉變量,需為M2401至M24256中的一種,分別對(duì)應(yīng)24C01至24C256;
        //函數(shù)返回值為一個(gè)位變量,若返回1表示此次操作失效,0表示操作成功;
        //ERRORCOUNT為允許最大次數(shù),若出現(xiàn)ERRORCOUNT次操作失效后,則函數(shù)中止操作,并返回1
        //SDA和SCL由用戶自定義,這里暫定義為P0^0和P0^1;
        //其余的用戶不用管,只要把只子程序放在你的程序中并調(diào)用它就可以了;


        /*******************************I2C(源程序)**********************************************/
        bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
        unsigned char ControlByte,enum eepromtype EepromType)
        {
        void Delay(unsigned char DelayCount);
        void I2CStart(void);
        void I2CStop(void);
        bit I2CRecAck(void);
        void I2CNoAck(void);
        void I2CAck(void);
        unsigned char I2CReceiveByte(void);
        void I2CSendByte(unsigned char sendbyte);
        unsigned char data j,i=ERRORCOUNT;
        bit errorflag=1;
        while(i--)
        {
        I2CStart();
        I2CSendByte(ControlByte0xfe);
        if(I2CRecAck())
        continue;
        if(EepromType>M2416)
        {
        I2CSendByte((unsigned char)(Address>>8));
        if(I2CRecAck())
        continue;
        }
        I2CSendByte((unsigned char)Address);
        if(I2CRecAck())
        continue;
        if(!(ControlByte0x01))
        {
        j=ByteQuantity;
        errorflag=0; //********clr errorflag
        while(j--)
        {
        I2CSendByte(*DataBuff++);
        if(!I2CRecAck())
        continue;
        errorflag=1;
        break;
        }
        if(errorflag==1)
        continue;
        break;
        }
        else
        {
        I2CStart();
        I2CSendByte(ControlByte);
        if(I2CRecAck())
        continue;
        while(--ByteQuantity)
        {
        *DataBuff++=I2CReceiveByte();
        I2CAck();
        }
        *DataBuff=I2CReceiveByte(); //read last byte data
        I2CNoAck();
        errorflag=0;
        break;
        }
        }

        I2CStop();
        if(!(ControlByte0x01))
        {
        Delay(255);
        Delay(255);
        Delay(255);
        Delay(255);
        }
        return(errorflag);
        }


        /*****************以下是對(duì)I2C總線的操作子程序***/
        /*****************啟動(dòng)總線**********************/
        void I2CStart(void)
        {
        SCL=0; //
        SDA=1;
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        SDA=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;
        SDA=1; //
        }


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉