RETI
STARTIF:
ANL A,#NOT 40H ;Handle the START event
MOVX @DPTR,A
JMP ISREXIT
RXIF:
ANL A,#NOT 20H ;Handle the RECV event
MOVX @DPTR,A
MOV DPTR,#I2CRXD
MOVX A,@DPTR
JBC ISDA,RXDA
JBC ISMA,RXMA
MOV R0,ADDR ;Handle the RECV event (RECV DATA)
MOVX @R0,A
INC ADDR
JMP ISREXIT
RXDA:
JMP ISREXIT ;Handle the RECV event (RECV DEVICE ADDR)
RXMA:
MOV ADDR,A ;Handle the RECV event (RECV MEMORY ADDR)
MOV R0,A
MOVX A,@R0
MOV DPTR,#I2CTXD
MOVX @DPTR,A
JMP ISREXIT
TXIF:
ANL A,#NOT 10H ;Handle the SEND event
MOVX @DPTR,A
JB ACC.1,RXNAK
INC ADDR
MOV R0,ADDR
MOVX A,@R0
MOV DPTR,#I2CTXD
MOVX @DPTR,A
JMP ISREXIT
RXNAK:
MOVX A,#0FFH
MOV DPTR,#I2CTXD
MOVX @DPTR,A
JMP ISREXIT
STOPIF:
ANL A,#NOT 08H ;Handle the STOP event
MOVX @DPTR,A
SETB ISDA
SETB ISMA
JMP ISREXIT
MAIN:
MOV SP, #5FH
MOV P0M0, #00H
MOV P0M1, #00H
MOV P1M0, #00H
MOV P1M1, #00H
MOV P2M0, #00H
MOV P2M1, #00H
MOV P3M0, #00H
MOV P3M1, #00H
MOV P4M0, #00H