新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機I2C總線協(xié)議的實現(xiàn)

        51單片機I2C總線協(xié)議的實現(xiàn)

        作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        //-----------------------函數(shù)聲明,變量定義-------------------------------------------------------

        #include

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

        #include

        sbit SDA=P1^0;// 將p1.0口模擬數(shù)據(jù)口

        sbit SCL=P1^1;// 將p1.1口模擬時鐘口

        #define NUM 10 // 接收和發(fā)送緩存區(qū)的深度

        #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

        unsignedcharidata sendbuf[NUM];// 數(shù)據(jù)發(fā)送緩沖區(qū)

        unsignedcharidata receivebuf[NUM];// 數(shù)據(jù)接收緩沖區(qū)

        bit bdata SystemError;// 從機錯誤標(biāo)志位

        //------------------------------------------------------------------------------------------------

        // 函數(shù)名稱: iic_start()

        // 函數(shù)功能: 啟動I2C總線子程序

        //------------------------------------------------------------------------------------------------

        voidiic_start(void)

        { EA=0;//時鐘保持高,數(shù)據(jù)線從高到低一次跳變,I2C通信開始

        SDA = 1;

        SCL = 1;

        delayNOP();// 延時5us

        SDA = 0;

        delayNOP();

        SCL = 0;

        }

        //------------------------------------------------------------------------------------------------

        // 函數(shù)名稱: iic_stop()

        // 函數(shù)功能: 停止I2C總線數(shù)據(jù)傳送子程序

        //------------------------------------------------------------------------------------------------

        voidiic_stop(void)

        {

        SDA = 0;//時鐘保持高,數(shù)據(jù)線從低到高一次跳變,I2C通信停止

        SCL = 1;

        delayNOP();

        SDA = 1;

        delayNOP();

        SCL = 0;

        }

        //------------------------------------------------------------------------------------------------

        // 函數(shù)名稱: slave_ACK

        // 函數(shù)功能: 從機發(fā)送應(yīng)答位子程序

        //------------------------------------------------------------------------------------------------

        voidslave_ACK(void)

        {

        SDA = 0;

        SCL = 1;

        delayNOP();

        SDA = 1;

        SCL = 0;

        }

        //------------------------------------------------------------------------------------------------

        // 函數(shù)名稱: slave_NOACK

        // 函數(shù)功能: 從機發(fā)送非應(yīng)答位子程序,迫使數(shù)據(jù)傳輸過程結(jié)束

        //------------------------------------------------------------------------------------------------

        voidslave_NOACK(void)

        {

        SDA = 1;

        SCL = 1;

        delayNOP();

        SDA = 0;

        SCL = 0;

        }

        //------------------------------------------------------------------------------------------------

        // 函數(shù)名稱: check_ACK

        // 函數(shù)功能: 主機應(yīng)答位檢查子程序,迫使數(shù)據(jù)傳輸過程結(jié)束

        //------------------------------------------------------------------------------------------------

        voidcheck_ACK(void)

        {

        SDA = 1;// 將p1.0設(shè)置成輸入,必須先向端口寫1

        SCL = 1;

        F0 = 0;

        if(SDA == 1)// 若SDA=1表明非應(yīng)答,置位非應(yīng)答標(biāo)志F0

        F0 = 1;

        SCL = 0;

        }


        上一頁 1 2 下一頁

        關(guān)鍵詞: 51單片機I2C總線協(xié)

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 湖口县| 余干县| 德格县| 伊金霍洛旗| 灵丘县| 文安县| 成都市| 林芝县| 凤阳县| 汉川市| 高阳县| 阜南县| 浏阳市| 鲁甸县| 股票| 绩溪县| 诸城市| 盐亭县| 沁阳市| 常山县| 泉州市| 长海县| 台湾省| 孟村| 晋宁县| 沂源县| 迭部县| 汝城县| 鄂尔多斯市| 阿克| 深圳市| 闻喜县| 汨罗市| 永宁县| 莒南县| 三台县| 久治县| 庄浪县| 综艺| 开原市| 安丘市|