新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 結(jié)合單片機用匯編實現(xiàn)I2CBUS總線協(xié)議

結(jié)合單片機用匯編實現(xiàn)I2CBUS總線協(xié)議

作者: 時間:2013-02-16 來源:網(wǎng)絡 收藏

  I2C數(shù)據(jù)的傳輸

  在I2C總線傳輸過程中,如圖3所示將兩種特定的情況定義為開始和停止條件,開始和停止條件由主控器產(chǎn)生:錄SCL保持“高”,SDA由“高”變?yōu)椤暗汀睍r為開始條件,SCL保持“高”,SDA由“低”變?yōu)椤案摺笔菫橥V箺l件。使用硬件接口可以很容易地檢測開始和停止條件,沒有這種接口的微機必須以每時鐘周期至少兩次對SDA取樣以便檢測這種變化。

只有當SCL線上的時鐘信號為低時,數(shù)據(jù)線上的“高”或“低”狀態(tài)才可以改變,在SDA線上的每個字節(jié)必須是8位,且傳輸?shù)淖止?jié)不限,但是每個字節(jié)必須有一個應答ACK。如果一接收器件在完成其他功能(如一內(nèi)部中斷)前不能接收另一數(shù)據(jù)的完整字節(jié)時,它可以保持時鐘線SCL為低,以促使發(fā)送器進入等待狀態(tài),當接收器準備好接受數(shù)據(jù)的其它字節(jié)并釋放時鐘SCL后,數(shù)據(jù)傳輸繼續(xù)進行。I2C數(shù)據(jù)總線傳達時序如圖4。

  數(shù)據(jù)傳送必須有應答。與應答對應的時鐘脈沖由主控制產(chǎn)生,發(fā)送器在應答期間必須下拉SDA線。當導址的被控器件不能應答時,數(shù)據(jù)保護為高,接著主控制產(chǎn)生停止條件終止傳輸。

  I2C總線的應用

  下面就是用GMS97C2051(武漢力源公司產(chǎn)品,與AT89C2051兼容)的通用I/O口作為I2C總線接口,由軟件控制實現(xiàn)數(shù)據(jù)傳送,圖5為其連線路圖。

  在單主控器的系統(tǒng)中,時鐘線僅由主控器驅(qū)動,因此可以用51的一根I/O線作為SCL信號線,將其設(shè)置為輸出方式,由軟件控制產(chǎn)生串行時鐘信號,在實際系統(tǒng)中使用P1.3,另一根I/O線P1.2作為I2C總線的串行數(shù)據(jù)線,由軟件控制在時鐘的低電平期間讀取或輸出數(shù)據(jù)。系統(tǒng)傳輸數(shù)據(jù)的過程如下:先由給出一個啟始數(shù)據(jù)信號,接著送出要訪問器件的7位地址數(shù)據(jù),并等待被控器件的就答信號,當收到應答信號后,根據(jù)訪問要求進行相應的操作。如果是讀入數(shù)據(jù),則數(shù)據(jù)線可一直設(shè)為輸入方式,中間不需要改變SDA線的工作方式,在每讀和主個字節(jié),均應依次檢測應答信號,如果是輸出數(shù)據(jù),則首先將SDA設(shè)置為輸出方式,當發(fā)送完一個字節(jié)后,需要改變SDA線為輸入方式,此時讀入被控器件的應答信號,至此完成了一個字節(jié)的傳送。當所有數(shù)據(jù)傳輸完比,應向SDA發(fā)出一個停止信號,結(jié)束該次數(shù)據(jù)傳輸。

在一個串行數(shù)據(jù)通道中.I2C總線控制器可以配置成主模式或從模式。開發(fā)過程中,MPC8250的I2C總線控制器工作在主模式,作為主設(shè)備;與總線相連的I2C設(shè)備為AT24C01A型EEPROM,作為從設(shè)備。主設(shè)備和從設(shè)備都可以工作于接收和發(fā)送狀態(tài)??偩€必須由主設(shè)備控制,主設(shè)備產(chǎn)生串行時鐘控制總線的傳輸方向,并產(chǎn)生起始和停止條件。

  以下用51匯編語言實現(xiàn)啟始、停止、讀、寫、應答的程序。

 ?。?)啟始位程序:

  ACK:CLR P1.3

  NOP

  NOP

  SETB P1.2

  NOP

  NOP

  NOP

  CPL P1.3 ;P1.3=1

  NOP

  NOP

  NOP

  DENGDAI:JB P1.2,DENGDAI RET



評論


相關(guān)推薦

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

關(guān)閉