新聞中心

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

        I2C總線在單片機上的實現

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

        MOV A,#0A1H ;SEND THE CNOTROL BYTE

        LCALL SENDBYTE

        LCALL ACK

        LCALL READBYTE

        LCALL BSTOP

        POP 0EH

        RET

        送字節程序:

        SENDBYTE:PUSH 0EH

        PUSH 00H

        MOV R0,#08H

        LOOP1:CLR P1.3

        NOP

        NOP

        RLC A

        MOV P1.2,C

        CPL P1.3 ;P1.3=1

        NOP

        NOP

        DJNZ R0,LOOP1

        POP 00H

        POP 0EH

        RET

        讀字節子程序:

        READBYTE:PUSH 0EH

        PUSH 00H

        MOV R0,#08H;READ THE CONTENT

        CLR A

        LOOP4:CLR P1.3

        NOP

        NOP

        NOP

        SETB P1.3 ;P1.3=1

        MOV C,P1.2

        RLC A

        DJNZ R0,LOOP4

        MOV R2,A

        POP 00H

        POP 0EH

        RET

        c.寫數據程序:

        WRITE:PUSH 0EH

        CLR P1.4

        LCALL BSTART

        MOV A,#0A0H

        CLALL SENDBYTE ;SEND THE CONTROL BYTE

        LCALL ACK

        MOV A,R1 ;SEND THE ADDRESS

        LCALL SENDBYTE

        LCALL ACK

        MOV A,R2 ;WRITE THE CONTENT

        LCALL SENDBYTE

        LCALL ACK

        LCALL BSTOP

        POP 0EH

        RET

        連續寫的兩個字節之間最好是有10ms的延時。當然,也可以進行頁寫(PAGE WRITE),即一次性連續寫8個字節,但采用頁寫方式時每個字節后要有一個應答信號。

        d.停止位程序:

        BSTOP:CLR P1.3

        NOP

        NOP

        CLR P1.2

        NOP

        NOP

        NOP

        SETB P1.3

        NOP

        NOP

        NOP

        SETB P1.2

        RET


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 陈巴尔虎旗| 庆城县| 襄垣县| 辽阳县| 高雄县| 沈阳市| 大石桥市| 汉川市| 旌德县| 广德县| 临漳县| 天峨县| 樟树市| 裕民县| 威海市| 文安县| 遂溪县| 如皋市| 杭锦后旗| 彭阳县| 博爱县| 阿合奇县| 古丈县| 商洛市| 江山市| 仪陇县| 芮城县| 胶南市| 沈丘县| 广东省| 永宁县| 滦南县| 宝坻区| 遂川县| 定陶县| 方正县| 清水县| 上林县| 项城市| 垣曲县| 古浪县|