i2c.txt

来自「基于I2C协议的读写程序,本人是用作IC卡读卡器用的」· 文本 代码 · 共 110 行

TXT
110
字号
ORG 0000H
MOV SP,#68H
MOV P1,#0FFH
LCALL I2CSTART
MOV A,#0A0H
LCALL I2CWRITE
LCALL ACK
MOV A,#01H
LCALL I2CWRITE
LCALL ACK
LCALL I2CSTART
MOV A,#0A1H
LCALL I2CWRITE
LCALL ACK
LCALL I2CREAD
LCALL NACK
LCALL I2CSTOP
MOV P3,A
L1:     JB P1.5,L1
        LCALL D2MS
        JB P1.5,L1
        MOV R7,#00H
        MOV P3,R7
        LCALL WRITE
        SJMP L1
I2CSTART:    CLR P1.0
             SETB P1.1
             LCALL SDELAY
             SETB P1.0
             LCALL SDELAY
             CLR P1.1
             LCALL SDELAY
             CLR P1.0
             LCALL SDELAY
             RET
I2CSTOP:     CLR P1.1
             LCALL SDELAY
             SETB P1.0
             LCALL SDELAY
             SETB P1.1
             LCALL SDELAY
             CLR P1.0
             LCALL SDELAY
             CLR P1.1
             LCALL SDELAY
             RET
I2CWRITE:    MOV R6,#08H
LA1:         CLR P1.0
             LCALL SDELAY
             RLC A
             MOV P1.1,C
             SETB P1.0
             LCALL SDELAY
             DJNZ  R6,LA1
             RET
I2CREAD:     MOV R6,#08H
LA2:         CLR P1.0
             LCALL SDELAY
             SETB P1.1
             LCALL SDELAY
             SETB P1.0
             LCALL SDELAY
             MOV C,P1.1
             RLC A
             DJNZ R6,LA2
             RET
ACK:         CLR P1.1
             LCALL SDELAY
             SETB P1.0
             LCALL SDELAY
             CLR P1.0
             LCALL SDELAY
             SETB P1.1
             LCALL SDELAY
             RET
NACK:        SETB P1.1
             LCALL SDELAY
             SETB P1.0
             LCALL SDELAY
             CLR P1.0
             LCALL SDELAY
             CLR P1.1
             LCALL SDELAY
             RET
WRITE:       LCALL I2CSTART
             MOV A,#0A0H
             LCALL I2CWRITE
             LCALL ACK
             MOV A,#01H
             LCALL I2CWRITE
             LCALL ACK
             MOV A,R7
             LCALL I2CWRITE
             LCALL ACK
             LCALL I2CSTOP
             RET
D2MS:        MOV R4,#10H
LD1:         MOV R5,#08H
LD2:         NOP
             NOP
             DJNZ R5,LD2
             DJNZ R4,LD1
             RET
SDELAY:      MOV       R2,     #18D
SDEL1:       NOP
             DJNZ      R2,     SDEL1
             RET


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?