<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > I2C串行總線(xiàn)在單片機8031應用系統中的設計與實(shí)現

I2C串行總線(xiàn)在單片機8031應用系統中的設計與實(shí)現

作者: 時(shí)間:2012-01-30 來(lái)源:網(wǎng)絡(luò ) 收藏

1 概述

  I2C (inter IC bus)總線(xiàn)是由Philips公司提出的串行通信規范,常見(jiàn)的中文譯名有“集成電路間總線(xiàn)”或“內部集成電路總線(xiàn)”。它使用兩條線(xiàn):串行數據線(xiàn)(SDA)和串行時(shí)鐘線(xiàn)(SCL),使連接到該總線(xiàn)上可訪(fǎng)問(wèn)的器件之間傳送信息,屬于多主控制總線(xiàn)??偩€(xiàn)上的每個(gè)器件均可設置唯一的地址,從而可實(shí)現器件的有效訪(fǎng)問(wèn)。自Philips公司推出后,Philips公司及其他公司紛紛相繼推出了許多產(chǎn)品,如各種微處理器、存儲器(PCF8571/8570,128/256 字節)、A/D(PCF8591)、D/A(TDA8442/8444)轉換器、E2PROM及各種I2C總線(xiàn)電路(PCF8584)等。由于I2C總線(xiàn)的使用可以簡(jiǎn)化電路,省掉了很多常規電路中的器件,提高產(chǎn)品的可靠性,在許多領(lǐng)域尤其在目前使用的IC卡獲得了廣泛的應用,國際標準ISO7816-2規定了IC卡與讀寫(xiě)設備信息傳輸是基于I2C總線(xiàn)傳輸協(xié)議的。不僅如此,I2C總線(xiàn)在家電方面也有較廣泛的應用,如國產(chǎn)長(cháng)虹NC-3機芯彩電,東芝火箭炮等。盡管Philips公司推出帶有I2C 總線(xiàn)接口的80C31系列,如:8XC528、8XC552、8XC562、8XC751等,但在組成的智能化儀表和測控系統中,乃有相當比例數量使用的是MCS51、AT89C5X系列,如8031、8751、AT89C51、AT89C52等,它們不具有I2C串行總線(xiàn)接口。本文將結合筆者在開(kāi)發(fā)智能化產(chǎn)品用到的E2PROM,介紹在不具有I2C串行總線(xiàn)接口的單片機8031應用系統中實(shí)現I2C總線(xiàn)接口的方法和軟件設計。

2 I2C總線(xiàn)的組成及I2C總線(xiàn)性能

2.1 I2C總線(xiàn)的特點(diǎn)

  由于I2C總線(xiàn)僅用二條線(xiàn)來(lái)傳達信息,因而具有獨特的優(yōu)點(diǎn):
 ?、?可最大限度地簡(jiǎn)化結構;可實(shí)現電路系統的模塊化、標準化設計。
 ?、?標準I2C總線(xiàn)模塊的組合開(kāi)發(fā)方式大大地縮短了新產(chǎn)品的開(kāi)發(fā)周期。
 ?、?I2C總線(xiàn)系統具有很大的靈活性;I2C總線(xiàn)各節點(diǎn)具有獨立的電氣特性。
 ?、?I2C總線(xiàn)系統可方便地對某一節點(diǎn)電路故障進(jìn)行診斷與跟蹤,有很好的可維護性。

2.2 I2C總線(xiàn)的組成

  I2C總線(xiàn)是芯片間串行傳輸總線(xiàn),與SPI,MICROWIRE/PLUS接口不同,它以一根串行數據線(xiàn)和一根串行時(shí)鐘線(xiàn)組成,如圖1所示,它是全雙工雙向數據傳輸線(xiàn),核心是主控CPU,被控器的SDA,SCL要相應地接到I2C總線(xiàn)的SDA,SCL上,可以方便地構成多機系統和外圍器件擴展系統。I2C總線(xiàn)采用了器件地址的硬件設置方法,從而使硬件系統具有簡(jiǎn)單而靈活的擴展方法。按照I2C總線(xiàn)的規定,其SDA、SCL各要通過(guò)上拉電阻接到電源VCC上。

I2C串行總線(xiàn)在單片機8031應用系統中的設計與實(shí)現

圖1 I2C總線(xiàn)的組成

2.3 I2C總線(xiàn)協(xié)議

  任何總線(xiàn)的推出及應用都有其特有的規定,其總線(xiàn)時(shí)序圖如圖2所示。

I2C串行總線(xiàn)在單片機8031應用系統中的設計與實(shí)現

圖2 I2C總線(xiàn)時(shí)序圖

  I2C總線(xiàn)一般須滿(mǎn)足如下協(xié)議:

 ?、?只有當總線(xiàn)不忙時(shí),數據傳送才能開(kāi)始;
 ?、?數據傳送期間,無(wú)論何時(shí)時(shí)鐘線(xiàn)為高,數據線(xiàn)必須保持穩定。當時(shí)鐘線(xiàn)為高時(shí),數據線(xiàn)的變化將認為是傳送的開(kāi)始或停止;
 ?、?當時(shí)鐘線(xiàn)為高時(shí),數據線(xiàn)由高到低的變化決定開(kāi)始條件;
 ?、?當時(shí)鐘線(xiàn)為高時(shí),數據線(xiàn)由低到高的變化決定停止條件;
 ?、?在開(kāi)始條件后,SCL低電平期間,SDA允許變化,每位數據需一個(gè)時(shí)鐘脈沖,當SCL為高時(shí),SDA必須穩定;
 ?、?主控器在應答時(shí)鐘脈沖高電平期間釋放SDA線(xiàn)高,轉由接收器控制。受控器在應答時(shí)鐘脈沖高電平期間必須拉低SDA線(xiàn),以使之為穩定的低電平作為有效應答;
 ?、?總線(xiàn)不忙時(shí),數據線(xiàn)和時(shí)鐘線(xiàn)保持為高電平。

2.4 I2C總線(xiàn)上的數據傳輸方式

  圖3為I2C 總線(xiàn)數據傳輸格式示意圖,第一部分為數據傳輸起始信號,即由此開(kāi)始進(jìn)行數據傳送;第二部分為受控IC的地址,用來(lái)選擇向哪一個(gè)受控IC傳送數據;第三部分為讀/寫(xiě)位,它指示出受控IC的工作方式;第四部分為應答信號,它是被CPU選中的受控IC向CPU傳回的確認信號;第五部分為傳送的數據;第六部分為停止位。在I2C總線(xiàn)上掛接的所有被控IC都要有一個(gè)自己的地址,CPU在發(fā)送數據時(shí),I2C總線(xiàn)上的所有被控IC都會(huì )將CPU發(fā)出位于起始信號后面的受控電路地址與自己的地址相比較,如果兩者相同,則該被控IC認為自己被CPU選中,然后按照讀/寫(xiě)位規定的工作方式接收或發(fā)送數據。

起始被控IC地址讀/寫(xiě)控制位應答位數據停止

圖3 I2C總線(xiàn)數據傳輸格式

3 I2C總線(xiàn)在單片機8031中的實(shí)現

  因為8031單片機不帶有I2C總線(xiàn)硬件接口,只能靠編寫(xiě)軟件來(lái)模擬I2C總線(xiàn)時(shí)序。這里以單片機應用系統中較為常見(jiàn)的E2PROM中AT24C02為例,給出了在8031上利用I/O線(xiàn)實(shí)現I2C串行總線(xiàn)的方法和軟件設計。根據I2C總線(xiàn)時(shí)序圖和I2C總線(xiàn)的數據傳輸規范,給出詳細的AT24C02起始、停止、發(fā)送和接收R7個(gè)字節的驅動(dòng)程序清單。

I2C串行總線(xiàn)在單片機8031應用系統中的設計與實(shí)現

圖4 I2C總線(xiàn)接口原理圖

 ORG  ××××      ??;程序開(kāi)始地址。
 SCL  EQU P1.1   ??;選擇P1.1作時(shí)鐘線(xiàn)。
 SDA  EQU P1.0   ??;選擇P1.0作數據線(xiàn)。
  功能:WRITE是寫(xiě)入程序。將R1指示的R7個(gè)片內字節寫(xiě)入AT24C02中,寫(xiě)入首址由R0指示。
 WRITE:ACALL STAR   ??;發(fā)出起始信號。
     MOV A,#0A0H  ??;發(fā)出寫(xiě)命令。
     ACALL OUTB
     JC WBE     ??;無(wú)回答,結束操作。
     MOV A,R0   ??;發(fā)出E2PROM首址。
     ACALL OUTB
     JC WBE     ??;無(wú)回答,結束操作。
 WR1: MOV A,@R1   ??;取一字節內容。
     ACALL OUTB   ??;寫(xiě)入E2PROM中。
     JC WBE     ??;無(wú)回答,結束操作。
     INC R1     ??;指向下一字節。
     DJNZ R7,WR1  ??;寫(xiě)完全部字節。
 WBE: AJMP STOP   ??;發(fā)出結束信號。
  功能:READ是讀出程序。將R1指示的R7個(gè)E2PROM字節讀入片內RAM中,首址由R0指示。
 READ: ACALL STAR   ??;發(fā)出起始信號。
     MOV A,#0A0H  ??;發(fā)出寫(xiě)命令。
     ACALL OUTB
     JC RDE     ??;無(wú)回答,結束操作。
     MOV A,R1   ??;發(fā)出E2PROM首址。
     ACALL OUTB
     JC RDE     ??;無(wú)回答,結束操作。
     ACALL STOP   ??;發(fā)出結束信號。
     NOP      ??;延時(shí)。
     NOP
     ACALL STAR   ??;再次發(fā)出起始信號。
     MOV A,#0A1H  ??;發(fā)出讀命令。
     ACALL OUTB
     JC RDE     ??;無(wú)回答,結束操作。
 RD1: MOV B,#08H  ??;每移出8位組成一字節。
 RD2: CLR SCL    ??;移出一個(gè)時(shí)鐘脈沖。
     NOP
     SETB SCL    ??;時(shí)鐘脈沖上升沿。
     NOP
     MOV C,SDA   ??;讀入一位。
     RLC A     ??;拼裝到累加器中。
     NOP
     DJNZ B,RD2  ??;拼完一字節。
     MOV @R0,A   ??;存入片內。
     INC R0     ??;指向下一地址。
     CLR SCL    ??;時(shí)鐘脈沖下降沿。
     CJNE R7,#1,RD3 ;是最后一個(gè)字節嗎?
     SETB SDA     ;最后一個(gè)字節不給回答信號。
     SJMP RD4
 RD3: CLR SDA    ??;準備好回答信號。
 RD4: NOP
     SETB SCL    ??;時(shí)鐘脈沖上升沿。
     NOP      ??;等待E2PROM讀取回答信號
     NOP
     CLR SCL    ??;回答完畢。
     SETB SDA     ;準備讀入下一字節。
     DJNZ R7,RD1   ;讀完全部字節。
     CLR C
 RDE: AJMP STOP   ??;發(fā)出結束信號。
  功能:OUTB是向E2PROM發(fā)出一字節信息的子程序。
 OUTB: MOV B,#08H  ??;一字節8位。
 OUT1: CLR SCL    ??;將時(shí)鐘線(xiàn)拉低。
     RLC A     ??;移出一位。
     MOV SDA,C    ;放到數據線(xiàn)上。
     SETB SCL     ;將時(shí)鐘線(xiàn)升高。
     NOP      ??;等待一位信息送入E2PROM中。
     DJNZ B,OUT1   ;發(fā)送完8位。
     CLR SCL    ??;將時(shí)鐘線(xiàn)拉低。
     SETB SDA     ;準備接收回答信號。
     SETB SCL     ;將時(shí)鐘線(xiàn)升高。
     NOPMOV C,SDA ??;接收回答信號。
     CLR SCL    ??;將時(shí)鐘線(xiàn)拉低。
     RET
  功能:STAR是起始信號。
 STAR: SETB SDA     ;將數據線(xiàn)升高。
     SETB SCL     ;將時(shí)鐘線(xiàn)升高。
     NOP      ??;延時(shí)。
     CLR SDA    ??;將數據線(xiàn)拉低,發(fā)出起始信號。
     NOP      ??;延時(shí)。
     CLR SCL    ??;將時(shí)鐘線(xiàn)拉低。
     RET
  功能:STOP是結束信號。
 STOP: CLR SCL     ;將時(shí)鐘線(xiàn)拉低。
     CLR SDA    ??;將數據線(xiàn)拉低。
     NOP
     SETB SCL     ;將時(shí)鐘線(xiàn)升高。
     NOP
     SETB SDA     ;將數據線(xiàn)升高,發(fā)出結束信號。
     RET
     END

4 結束語(yǔ)

  本文給出了用8031匯編語(yǔ)言模擬I2C總線(xiàn)的時(shí)序的起始、停止及主控器向I2C總線(xiàn)的發(fā)送和接收R7字節的程序,讀者也可根據I2C總線(xiàn)的操作時(shí)序在A(yíng)TMEL89系列、68HC05系列等單片機及其外設接口如8255、8155或74LS377上實(shí)現I2C總線(xiàn)的操作,具有一定的通用性,且易于嵌入移植。

參考文獻
 1 Atmel Integrated Circuit Date Book,1994
 2 武漢力源公司.CMOS串行EEPROM原理及應用
 3 王卓人,鄧晉鈞,劉宗祥.IC卡的技術(shù)與應用.北京:電子工業(yè)出版社,1999.2



關(guān)鍵詞: 單片機 I2C總線(xiàn) 接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>