新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > I2C總線學習感想總結(一)

I2C總線學習感想總結(一)

作者: 時間:2016-11-25 來源:網絡 收藏
一:起始與終止

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

1:I2C起始條件

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

2:I2C終止條件

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

二:數據傳輸

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

SDA上的數據只能在SCL為低電平期間變化。

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

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

在CLK下降沿,從SDA線上讀取數據bit

C程序實例:

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);
}



關鍵詞: I2C總線學習感

評論


技術專區(qū)

關閉