新聞中心

        EEPW首頁 > 手機與無線通信 > 設(shè)計應用 > 模擬I2C總線多主節(jié)點通信原理簡介

        模擬I2C總線多主節(jié)點通信原理簡介

        作者: 時間:2012-09-02 來源:網(wǎng)絡(luò) 收藏

        圖5給出了從的流程。進入從時,要將BUSY置為高,說明MCU現(xiàn)在正在工作,不能完成其他的任務(wù)。在MCU作為從完成接收任務(wù)后,要將BUSY置為低。MCU在接收到尋址字節(jié)后與自己的地址字節(jié)進行比較。如果是訪問自己的就進入到下面的接收程序,否則跳出。在訪問自己的時候,還要判斷主節(jié)點是讀取數(shù)據(jù)還是寫數(shù)據(jù),以便進入相應的程序。在寫字節(jié)的子程序中,從節(jié)點每發(fā)送1個字節(jié)的數(shù)據(jù)后都要察看是否有應答信號(ACK),有則說明數(shù)據(jù)接收到了;否則要跳出等待,重新發(fā)送。在讀字節(jié)的子程序中,每接收1個字節(jié)的數(shù)據(jù)就要發(fā)送1個應答信號(ACK),以示接收正常,否則主節(jié)點將停止繼續(xù)發(fā)送。在現(xiàn)有的資料中,關(guān)于從節(jié)點的和源代碼比較少,這里給出作為從節(jié)點時寫字節(jié)子程序的源代碼。由于篇幅有限其他的子程序沒有列出。

        本文引用地址:http://www.104case.com/article/154009.htm

          4 部分源代碼

          本節(jié)是在MCU多主中的部分源代碼。多主的實現(xiàn)中有幾個難點和重點。一是在作為主節(jié)點時的寫字節(jié)子程序,里面要包括發(fā)送的每位數(shù)據(jù)和的數(shù)據(jù)進行比較并做出判斷。如果數(shù)據(jù)不同,要跳出并進入從節(jié)點的狀態(tài)。由于子程序返回主程序時改變的只是PC的值而累加器(ACC)和工作寄存器(Ri)里面的值是不變的,因此MCU進入從機狀態(tài)后繼續(xù)接收剩下的數(shù)據(jù),這樣的數(shù)據(jù)并沒有丟失。二是作為從節(jié)點時的寫字節(jié)的子程序。由于時鐘線是由主節(jié)點的MCU控制的,所以怎樣根據(jù)SCL線來讀取SDA線的數(shù)據(jù)是其中的一個難點。三是在具有子地址的從節(jié)點關(guān)于是寫字節(jié)還是讀字節(jié)時的判斷。如果是寫字節(jié)時主節(jié)點會給出新的起始信號,并再次發(fā)送從節(jié)點的地址數(shù)據(jù)。這時從節(jié)點需要做出判斷是讀取數(shù)據(jù)還是寫數(shù)據(jù),并進入相應的子程序。這里給出以上三個重點和難點的子程序的源代碼,以供讀者參考。這些源代碼經(jīng)實踐證明都是正確的。

          主節(jié)點的寫字節(jié)子程序:

          ;其中的NOP可根據(jù)時鐘的快慢自己加減

          WRBYTE:MOV R0,#08H

          CLR BUSY;將BUSY值清零

          WLP:  RLC A;取數(shù)據(jù)位

          JC   WR1

          SJMP WR0;判斷數(shù)據(jù)位

          WLP1: DJNZ R0,WLP

          NOP

          OUT1: RET

          WR1:  SETB SDA;發(fā)送1

          NOP

          SETB  SCL

          MOV  C,SDA;判斷是否與發(fā)送的數(shù)據(jù)相同

          JC   GOON

          SETB  BUSY

          AJMP  OUT1

          GOON: NOP

          NOP

          NOP

          CLR SCL

          SJMP WLP1

          WR0:  CLR SDA;發(fā)送0

          NOP

          SCL

          NOP

          NOP

          NOP

          NOP

          NOP

          CLR

          SCL

          SJMP  WLP1

          從節(jié)點的寫字節(jié)子程序(返回為ACK):

          SWRBYTE:MOV R0,#08H

          WAGAIN: RRC A



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 临高县| 福清市| 崇左市| 银川市| 连山| 洞口县| 探索| 广宁县| 巴青县| 裕民县| 格尔木市| 龙岩市| 茌平县| 广南县| 黔西县| 阳高县| 丹阳市| 陵川县| 西丰县| 壶关县| 理塘县| 衡东县| 东海县| 都江堰市| 广昌县| 深泽县| 昂仁县| 汉寿县| 邢台县| 赤水市| 启东市| 富顺县| 望江县| 湛江市| 容城县| 满洲里市| 岚皋县| 丰台区| 梁山县| 西充县| 揭东县|