微控制器 I2C匯流排通訊程式

2021-09-20 15:21:50 字數 2593 閱讀 7404

為保證資料的可靠性,i2c匯流排的資料傳送有嚴格的時序要求。i2c匯流排的起始訊號、終止訊號、傳送「0」及傳送「

//i2c匯流排寫操作,待寫入位元組dat,返回值為應答狀態

i2c_sda =1;

//8位資料傳送完後,主機釋放sda,以檢測從機應答

i2cdelay()

; i2c_scl =1;

//拉高scl

ack = i2c_sda;

//讀取此時的sda值,即為從機的應答值

i2cdelay()

; i2c_scl =0;

//再拉低scl完成應答位,並保持住匯流排

return

(~ack)

;//應答值取反以符合通常的邏輯:0=不存在或忙或寫入失敗,1=存在且空閒或寫入成功

}

unsigned

char

i2creadack()

//i2c匯流排讀操作,並傳送應答訊號,返回值為讀到的位元組

i2c_sda =0;

//8位資料傳送完後,拉低sda,傳送應答訊號

i2cdelay()

; i2c_scl =1;

//拉高scl

i2cdelay()

; i2c_scl =0;

//再拉低scl完成應答位,並保持住匯流排

return dat;

}

#include

#include

#include

#define delay_time 60

/*經實驗,不要小於50!否則可能造成時序混亂*/

#define true 1

#define false 0

sbit scl=p1^7;

/*假設由p1.7和p1.6控制*/

sbit sda=p1^6;

/********** function definition 函式定義 ************/

void

delay

(unsigned

int t)

/*延時函式*/

void

i2c_start

(void

)void

i2c_stop

(void

)void

send_0

(void

)/* send ack */

void

send_1

(void

) bit check_acknowledge

(void

)void

writei2cbyte

(char b)reentrant

char

readi2cbyte

(void

)reentrant

else

b=b<<1;

}return b;

}/**********以下為讀寫24c02的函式**********/

void

write_one_byte

(char addr,

char thedata)

void

write_a_page

(char

*buffer,

char addr)

}i2c_stop()

;}char

read_one_byte

(char addr)

void

read_n_bytes

(char

*buffer,

char n,

char addr)

i2c_stop()

;}void

main()

write_one_byte

(0x20

,0x28);

write_a_page

(myarray,

0x10);

write_a_page

(myarray2,

0x18);

mybyte=

read_one_byte

(0x20);

read_n_bytes

(rdarray,16,

0x10);

}

微控制器之I2C匯流排原理

採用序列匯流排技術可以大大簡化硬體的設計,體積減少,可靠性高。常見的匯流排,i2c inter ic bus 單匯流排,spi匯流排。i2c序列匯流排 1 進行多主機通訊 2 兩根雙線訊號線,一根資料線sda,另外一根時鐘線scl,接上拉電阻,匯流排空閒為高電平。只要有低電平,匯流排就會被拉低電平。...

I2C匯流排通訊

uart 屬於非同步通訊,比如電腦傳送給微控制器,電腦只負責把資料通過txd 傳送出來即可,接收資料是微控制器自己的事情。而 i2c 屬於同步通訊,scl 時鐘線負責收發雙方的時鐘節拍,sda 資料線負責傳輸資料。i2c 的傳送方和接收方都以 scl 這個時鐘節拍為基準進行資料的傳送和接收。i2c匯...

通訊方式 I2C匯流排

i2c器件的從機位址由4位器件位址,2 3位引腳位址和1位方向位 讀寫位 0寫1讀 i2c由 資料線 sda 與時鐘線 scl 組成 產生iic起始訊號 void iic start void 產生iic停止訊號 void iic stop void 產生ack應答 void iic ack voi...