新聞中心

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

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

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

#include

本文引用地址:http://butianyuan.cn/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;// 從機(jī)錯誤標(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ù)功能: 從機(jī)發(fā)送應(yīng)答位子程序

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

voidslave_ACK(void)

{

SDA = 0;

SCL = 1;

delayNOP();

SDA = 1;

SCL = 0;

}

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

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

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

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

voidslave_NOACK(void)

{

SDA = 1;

SCL = 1;

delayNOP();

SDA = 0;

SCL = 0;

}

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

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

// 函數(shù)功能: 主機(jī)應(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 下一頁

評論


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

關(guān)閉