
$MOD51
	ORG 00H
SCL	EQU P2.0
SDA	EQU P2.1
VERI	EQU 30H
	MOV IE,#00H
	MOV DPL,#10H
	MOV VERI,#0F0H
	ACALL EEPROM_WRITE
	NOP
	NOP
	NOP
	ACALL EEPROM_READ
	MOV P1,VERI
GO:	NOP
	AJMP GO

EEPROM_WRITE:
	LCALL I2C_START
	LCALL EE_ADD_WR
	MOV A,DPL
	LCALL I2C_WRITE
	LCALL ACK
	MOV A,VERI
	LCALL I2C_WRITE
	LCALL ACK
	LCALL I2C_STOP
	RET
EEPROM_READ:
	LCALL I2C_START
	LCALL EE_ADD_WR
	MOV A,DPL
	LCALL I2C_WRITE
	LCALL ACK
	LCALL I2C_START
	LCALL EE_ADD_RD
	LCALL I2C_READ
	LCALL NO_ACK
	LCALL I2C_STOP
	RET

EE_ADD_WR:
	MOV A,#0A0H
	LCALL I2C_WRITE
	LCALL ACK
	RET
EE_ADD_RD:
	MOV A,#0A1H
	LCALL I2C_WRITE
	LCALL ACK
	RET

I2C_WRITE:
	MOV R7,#8D
	CLR C
LOOP:	RLC A
	MOV SDA,C
	LCALL CLOCK
	DJNZ R7,LOOP
	RET
I2C_READ:
	MOV R7,#8D
LOOP2:	SETB SDA
	SETB SCL
	NOP
	NOP
	MOV C,SDA
	RLC A
	CLR SCL
	NOP
	NOP
	DJNZ R7,LOOP2
	MOV VERI,A
	RET

I2C_START:
	SETB SCL
	SETB SDA
	NOP
	CLR SDA
	NOP
	CLR SCL
	RET
I2C_STOP:
	SETB SCL
	CLR SDA
	NOP
	SETB SDA
	NOP
	CLR SCL
	RET

ACK:
	CLR SCL
	SETB SCL
	NOP
	JNB SDA,GO_ON
	CLR SCL
	RET
GO_ON:	CLR SCL
	RET
NO_ACK:
	CLR SCL
	SETB SDA
	SETB SCL
	NOP
	CLR SCL
	CLR SDA
	RET

CLOCK:
	SETB SCL
	NOP
	NOP
	CLR SCL
	RET

END
