Код:
;PortC - #E2
;SCL - PortC.6 out
;SDAI - PortC.7 out
;SDAO - PORTC.0 in
;resistor 1.0k between SDAO & SDAI
I2C_INIT: LD A,#93
OUT (#E3),A
RET
I2C_START: LD A,#C0
OUT (#E2),A
NOP
LD A,#40
OUT (#E2),A
NOP
XOR A
OUT (#E2),A
RET
I2C_STOP: LD A,#40
OUT (#E2),A
NOP
LD A,#C0
OUT (#E2),A
NOP
RET
I2C_ADDR: PUSH AF
CALL I2C_START
POP AF
CALL I2C_SEND8
CP 1
RET Z
SCF
RET
I2C_SEND8: PUSH BC
LD B,8
SND1: RLC A
LD C,A
JR C,SND2
LD A,0
OUT (#E2),A
LD A,#40
OUT (#E2),A
LD A,0
OUT (#E2),A
JR SND3
SND2: LD A,#80
OUT (#E2),A
LD A,#C0
OUT (#E2),A
LD A,#80
OUT (#E2),A
SND3: LD A,C
DJNZ SND1
LD A,#C0
OUT (#E2),A
IN A,(#E2)
LD C,A
LD A,#80
OUT (#E2),A
XOR A
OUT (#E2),A
LD A,C
AND 1
POP BC
RET
I2C_READ8: PUSH BC
LD B,8
LD A,#80
OUT (#E2),A
XOR A
RED1: RLA
LD C,A
LD A,#C0
OUT (#E2),A
IN A,(#E2)
PUSH AF
LD A,#80
OUT (#E2),A
POP AF
AND 1
OR C
DJNZ RED1
POP BC
RET
I2C_ACK: XOR A
OUT (#E2),A
LD A,#40
OUT (#E2),A
XOR A
OUT (#E2),A
RET
I2C_NACK: LD A,#80
OUT (#E2),A
LD A,#C0
OUT (#E2),A
XOR A
OUT (#E2),A
RET