新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C串行總線在單片機8031應用系統中的設計與實現

        I2C串行總線在單片機8031應用系統中的設計與實現

        作者: 時間:2012-01-30 來源:網絡 收藏

        1 概述

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

        2 I2C總線的組成及I2C總線性能

        2.1 I2C總線的特點

          由于I2C總線僅用二條線來傳達信息,因而具有獨特的優點:
          ① 可最大限度地簡化結構;可實現電路系統的模塊化、標準化設計。
          ② 標準I2C總線模塊的組合開發方式大大地縮短了新產品的開發周期。
          ③ I2C總線系統具有很大的靈活性;I2C總線各節點具有獨立的電氣特性。
          ④ I2C總線系統可方便地對某一節點電路故障進行診斷與跟蹤,有很好的可維護性。

        2.2 I2C總線的組成

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

        I2C串行總線在單片機8031應用系統中的設計與實現

        圖1 I2C總線的組成

        2.3 I2C總線協議

          任何總線的推出及應用都有其特有的規定,其總線時序圖如圖2所示。

        I2C串行總線在單片機8031應用系統中的設計與實現

        圖2 I2C總線時序圖

          I2C總線一般須滿足如下協議:

          ① 只有當總線不忙時,數據傳送才能開始;
          ② 數據傳送期間,無論何時時鐘線為高,數據線必須保持穩定。當時鐘線為高時,數據線的變化將認為是傳送的開始或停止;
          ③ 當時鐘線為高時,數據線由高到低的變化決定開始條件;
          ④ 當時鐘線為高時,數據線由低到高的變化決定停止條件;
          ⑤ 在開始條件后,SCL低電平期間,SDA允許變化,每位數據需一個時鐘脈沖,當SCL為高時,SDA必須穩定;
          ⑥ 主控器在應答時鐘脈沖高電平期間釋放SDA線高,轉由接收器控制。受控器在應答時鐘脈沖高電平期間必須拉低SDA線,以使之為穩定的低電平作為有效應答;
          ⑦ 總線不忙時,數據線和時鐘線保持為高電平。

        2.4 I2C總線上的數據傳輸方式

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

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

        圖3 I2C總線數據傳輸格式

        3 I2C總線在單片機8031中的實現

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

        I2C串行總線在單片機8031應用系統中的設計與實現

        圖4 I2C總線接口原理圖

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

        4 結束語

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

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



        關鍵詞: 單片機 I2C總線 接口

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湟中县| 沅江市| 瑞昌市| 灵台县| 遂宁市| 青河县| 巴南区| 抚州市| 东明县| 九龙坡区| 克山县| 道真| 周宁县| 青州市| 佛山市| 彭山县| 灵宝市| 厦门市| 游戏| 神木县| 丰宁| 巫山县| 龙井市| 山阴县| 延边| 永泰县| 甘德县| 巫山县| 宣武区| 丰都县| 兴和县| 黄浦区| 安义县| 鲁甸县| 克拉玛依市| 道孚县| 镇康县| 德令哈市| 盐池县| 澜沧| 祥云县|