51單片機(jī)-IIC
IIC總線的硬件結(jié)構(gòu)圖:
![](http://editerupload.eepw.com.cn/fetch/20161101/324931_1_0.jpg)
IIC支持多主和主從工作方式,通常為主從工作方式。在主從工作方式中,系統(tǒng)中只有一個(gè)主器件(單片機(jī)),其它器件都是具有IIC總線的外圍從器件。在主從工作方式中,主器件啟動(dòng)數(shù)據(jù)的發(fā)送(發(fā)出啟動(dòng)信號(hào)),產(chǎn)生時(shí)鐘信號(hào),發(fā)出停止信號(hào)。 開始信號(hào):SCL為高電平,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù) 結(jié)束信號(hào):SCL為高電平,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù) 應(yīng)答信號(hào):接受數(shù)據(jù)的IC在接受到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)送特定的低電平脈沖,表示已經(jīng)接收到數(shù)據(jù)。CPU向受控單元發(fā)送一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況做出是否繼續(xù)傳送數(shù)據(jù)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。
這些信號(hào)中開始信號(hào)是必須的,結(jié)束信號(hào)和應(yīng)答信號(hào)都可以不要。
IIC總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。
![](http://editerupload.eepw.com.cn/fetch/20161101/324931_1_1.jpg)
IIC總線協(xié)議規(guī)定,每傳送一個(gè)字節(jié)數(shù)據(jù)后,都要有一個(gè)應(yīng)答信號(hào),以確定數(shù)據(jù)傳送是否被對(duì)方收到。應(yīng)答信號(hào)由接受設(shè)備產(chǎn)生,在SCL信號(hào)為高電平期間,接受設(shè)備將SDA拉為低電平,表示數(shù)據(jù)傳輸正確,產(chǎn)生應(yīng)答。
![](http://editerupload.eepw.com.cn/fetch/20161101/324931_1_2.jpg)
IIC總線的時(shí)序圖:
![](http://editerupload.eepw.com.cn/fetch/20161101/324931_1_3.jpg)
許多單片機(jī)并不具有IIC總線接口,如51單片機(jī)。
單片機(jī)模擬IIC總線通信:
啟動(dòng)代碼: void start(){
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0;
delay();
}
停止代碼:
void stop(){
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();
}
評(píng)論