|
-
-
- I2C_SDA EQU P1.6
- I2C_SCL EQU P1.7
-
-
- I2C_WRITE:
-
-
-
- ACALL I2C_START
- ACALL OUT
- MOV R6, #8
- WR_LP:MOV A, @R0
- ACALL OUT
- INC R0
- DJNZ R6, WR_LP
- AJMP I2C_STOP
-
-
- I2C_READ:
-
-
-
- ACALL I2C_START
- ACALL OUT
- MOV R6, #8
- MOV A, #0A1H
- ACALL OUTS
- BRDLP:
- MOV R7, #8
- SETB I2C_SDA
- INLP: CLR I2C_SCL
- ACALL DELAY6
- SETB I2C_SCL
- NOP
- MOV C, I2C_SDA
- RLC A
- DJNZ R7, INLP
- CLR I2C_SCL
- MOV @R0, A
- INC R0
- DJNZ R6, ACKLP
-
- I2C_STOP:
- CLR I2C_SDA
- ACALL DELAY5
- SETB I2C_SCL
- ACALL DELAY5
- SETB I2C_SDA
- DELAY6:
- NOP
- DELAY5:
- NOP
- RET
-
- I2C_START:
- SWAP A
- RR A
- MOV R6, A
- MOV A, #0A0H
- ACALL OUTS
- MOV A, R6
- RET
-
- ACKLP:
- CLR I2C_SDA
- SETB I2C_SCL
- ACALL DELAY5
- CLR I2C_SCL
- AJMP BRDLP
-
- OUTS:
- SETB I2C_SDA
- SETB I2C_SCL
- ACALL DELAY5
- CLR I2C_SDA
- ACALL DELAY5
- CLR I2C_SCL
-
- OUT:
- SETB C
- MOV R7, #9
- OTLP: RLC A
- NOP
- MOV I2C_SDA, C
- NOP
- NOP
- SETB I2C_SCL
- ACALL DELAY5
- CLR I2C_SCL
- DJNZ R7, OTLP
- RET
-
- END
|