新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C通信模塊c語言庫文件

        I2C通信模塊c語言庫文件

        作者: 時間:2016-11-30 來源:網絡 收藏
        文件名i2c.h


        /***************************************************
        名稱:I2C通信模塊修改版
        編寫:YuMin_Dong
        時間:2012.11.17
        ***************************************************/
        #ifndef _I2C_H_
        #define _I2C_H_
        sbit SDA=P1^0;
        sbit SCL=P1^1;
        uint8 ACK;

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


        //開啟I2C總線
        void I2C_Start()
        {
        SDA=1;
        //_nop_();
        //_nop_();
        //_nop_();
        _nop_();
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;//鉗主總線
        _nop_();
        _nop_();
        }

        //停止I2C總線
        void I2C_Stop()
        {
        SDA=0;
        //_nop_();
        //_nop_();
        //_nop_();
        _nop_();
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;
        }

        //I2C通信主機發送字節
        void I2C_SendByte(uint8 byte)
        {
        uint8 i;
        for(i=0;i<8;i++)
        {
        if(byte&0x80)
        SDA=1;
        else SDA=0;
        _nop_();
        SCL=1;//使SDA數據有效
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;
        byte<<=1;
        _nop_();
        _nop_();
        }
        SDA=1;//數據線浮高
        _nop_();
        _nop_();
        SCL=1;//使讀取的數據有效,判斷是否應答或非應答
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        if(SDA==1)
        ACK=0;//收到非應答信號
        else ACK=1;//收到應答信號
        SCL=0;//鉗總線
        _nop_();
        _nop_();
        }

        //I2C通信主機接收字節
        uint8 I2C_ReceiveByte()
        {
        uint8 i;
        uint8 byte;

        for(i=0;i<8;i++)
        {
        SDA=1;//拉高準備接收
        _nop_();
        SCL=1;
        byte<<=1;
        if(SDA==1)
        byte|=0x01;
        else byte&=0xfe;
        SCL=0;
        _nop_();
        _nop_();
        }
        return byte;
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 财经| 白朗县| 贵溪市| 改则县| 吴桥县| 兴安县| 永泰县| 岐山县| 石台县| 东安县| 隆回县| 兴业县| 噶尔县| 正宁县| 正蓝旗| 霸州市| 肃南| 长春市| 承德县| 阜康市| 息烽县| 绵竹市| 舞阳县| 浦江县| 阿克| 炉霍县| 桦甸市| 博湖县| 岳阳市| 交口县| 石首市| 环江| 中山市| 斗六市| 九江市| 淮阳县| 应城市| 荥经县| 商河县| 晋江市| 凤阳县|