新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C總線在單片機上的實現

        I2C總線在單片機上的實現

        作者: 時間:2012-03-07 來源:網絡 收藏

        圖5是一個伺服系統的結構圖。它用8XC752的PWM輸出經放大后來驅動電機,電機的轉速由測速機測取并直接送到8XC752片內的A/D電路。處理后的有關信息經送到LCD驅動芯片PCF8577以驅動64段LCD顯示板。

        3.2 通用I/O端口作為接口

        目前,51、96系列的應用很廣,但是由于它們都沒有接口,從而限制了在這些系統中使用具有I2C總線接口的器件。通過對I2C總線時序的分析,可以用51的兩根I/O線來實現I2C總線的功能。接I2C總線規定:SCL線和SDA線是各設備對應輸出狀態相“與”的結果,任一設備都可以用輸出低電平的方法來延長SCL的低電平時間,以迫使高速設備進入等待狀態,從而實現不同速度設備間的時鐘同步。因此,即使時鐘脈沖的高、低電平時間長短不一,也能實現數據的可靠傳送,可以用軟件控制I/O口做I2C接口。下面就是用GMS97C2051的通用I/O口來作為I2C總線接口,并由軟件控制實現數據傳送的例子,圖6為其連線圖。

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

        下面給出51系列用匯編語言實現啟始、停止、讀、寫、應答的程序,讀者也可以根據I2C總線時序在96系列或其它單片機上實現I2C總線接口。

        a.啟動位程序

        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

        b.讀數據程序

        讀字節可以在當前地址讀(CURRENT READ),也可以隨機讀(RANDOM READ),讀出數據的最后一個字節后不用加應答信號。

        READ:PUSH 0EH

        CLR P1.4

        LCALL BSTART ;START

        MOV A,#0A0H ;SEND THE CNOTROL BYTE

        LCALL SENDBYTE

        LCALL ACK

        MOV A,R1 ;SEND THE ADDRESS

        LCALL SENDBYTE

        LCALL ACK

        LCALL BSTART ;START



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新闻| 观塘区| 桂平市| 团风县| 乌鲁木齐县| 浠水县| 德令哈市| 华安县| 竹山县| 杭州市| 莱西市| 松江区| 正镶白旗| 临西县| 伊宁县| 炎陵县| 鄂尔多斯市| 青海省| 长沙县| 镇沅| 龙游县| 昭觉县| 九台市| 饶平县| 沙雅县| 大厂| 高安市| 乐昌市| 新龙县| 陇西县| 岚皋县| 江都市| 遂平县| 平和县| 鹤山市| 武义县| 云和县| 临西县| 临城县| 理塘县| 会昌县|