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