新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴化市| 嘉黎县| 宣恩县| 平顶山市| 凯里市| 柳州市| 微山县| 平武县| 娱乐| 五大连池市| 深泽县| 高要市| 肃南| 宝坻区| 阿尔山市| 新巴尔虎左旗| 乐清市| 旺苍县| 钦州市| 通许县| 伊通| 布尔津县| 手游| 湖南省| 静安区| 思南县| 崇仁县| 黔西| 凤山县| 神池县| 乐昌市| 静海县| 那坡县| 承德市| 田林县| 鲁甸县| 兴海县| 宝清县| 民权县| 城口县| 晋宁县|