START:
SETB BUSY
MOV A,#10000001B ;Send START command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
SENDDATA:
MOV DPTR,#I2CTXD ;Write data to the data buffer
MOVX @DPTR,A
SETB BUSY
MOV A,#10000010B ;Send a SEND command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
RECVACK:
SETB BUSY
MOV A,#10000011B ;Send read ACK command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
RECVDATA:
SETB BUSY
MOV A,#10000100B ;Send RECV command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
CALL WAIT
MOV DPTR,#I2CRXD ;Read data from the data buffer
MOVX A,@DPTR
RET
SENDACK:
MOV A,#00000000B ;Setup the ACK signal
MOV DPTR,#I2CMSST
MOVX @DPTR,A
SETB BUSY
MOV A,#10000101B ;Send ACK command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
SENDNAK:
MOV A,#00000001B ;Setup the NAK signal
MOV DPTR,#I2CMSST
MOVX @DPTR,A
SETB BUSY
MOV A,#10000101B ;Send ACK command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
STOP:
SETB BUSY
MOV A,#10000110B ;Send STOP command
MOV DPTR,#I2CMSCR
MOVX @DPTR,A
JMP WAIT
WAIT:
JB BUSY,$ ;Wait for the command to be sent
RET
DELAY: