新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > I2C總線學(xué)習(xí)感想總結(jié)(一)

I2C總線學(xué)習(xí)感想總結(jié)(一)

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
一:起始與終止

本文引用地址:http://m.butianyuan.cn/article/201611/321549.htm

1:I2C起始條件

SCL高電平期間,SDA從高電平向低電平切換。

2:I2C終止條件

SCL高電平期間,SDA從低電平向高電平切換。

二:數(shù)據(jù)傳輸

1:進(jìn)行數(shù)據(jù)傳送時,在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定

SDA上的數(shù)據(jù)只能在SCL為低電平期間變化。

2:I2C總線每個CLK發(fā)送或接收一個位的數(shù)據(jù)(或地址)

在CLK上升沿,把數(shù)據(jù)bit(或地址)送到SDA線上

在CLK下降沿,從SDA線上讀取數(shù)據(jù)bit

C程序?qū)嵗?/p>

void Start_I2c()


{
SDA=1;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
_Nop();
_Nop();
}

void Stop_I2c()
{
SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
_Nop();
_Nop();
}

void SendByte(uchar c)
{
uchar BitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++)
{
if((c<
else SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
}

_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1;
SCL=0;
_Nop();
_Nop();
}

uchar RcvByte()
{
uchar retc;
uchar BitCnt;

retc=0;
SDA=1;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1;
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}



關(guān)鍵詞: I2C總線學(xué)習(xí)感

評論


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

關(guān)閉