the mu ix at8051 and using serial eeprom 24c02
and here is my code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WTCMD EQU 10100110B ;WRITE DATA COMMAND Note 3
RDCMD EQU 10100111B ;READ DATA COMMAND Note 3
SDA1 EQU P2.1 ;SDA=PIN5
SCL1 EQU P2.0 ;SCL=PI
STORE:
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A,R4 ;GET LOW BYTE ADDRESS
CALL OUT ;SEND IT
BTLP: MOV A,R1 ;GET DATA
CALL OUT ;SEND IT
;INCREMENT DATA POINTER
;LOOP TILL DONE
CALL STOP ;SEND STOP CONDITION
RET
OUT: MOV R2,#8 ;LOOP COUNT -- EQUAL TO BIT COUNT
OTLP: RLC A ;SHIFT BIT
JNC BITL
SETB SDA1 ;DATA = 1
JMP OTL1 ;CONTINUE
BITL: CLR SDA1 ;DATA = 0
OTL1: SETB SCL1 ;CLOCK HI
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SCL1 ;CLOCK LOW
DJNZ R2,OTLP ;DECREMENT COUNTER
SETB SDA1 ;TURN PIN INTO INPUT
NOP ;NOTE 1
NOP
NOP
SETB SCL1 ;CLOCK ACK
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SCL1
RET
STOP: CLR SDA1 ;STOP CONDITION SET DATA LOW
NOP ;NOTE 1
NOP
NOP
NOP
NOP
SETB SCL1 ;SET CLOCK HI
NOP ;NOTE 1
NOP
NOP
NOP
NOP
SETB SDA1 ;SET DATA HIGH
RET
OUTS: MOV R2,#8 ;LOOP COUNT -- EQUAL TO BIT COUNT
SETB SDA1 ;INSURE DATA IS HI
SETB SCL1 ;INSURE CLOCK IS HI
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SDA1 ;START CONDITION -- DATA = 0
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SCL1 ;CLOCK = 0
OTSLP: RLC A ;SHIFT BIT
JNC BITLS
SETB SDA1 ;DATA = 1
JMP OTSL1 ;CONTINUE
BITLS: CLR SDA1 ;DATA = 0
OTSL1: SETB SCL1 ;CLOCK HI
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SCL1 ;CLOCK LOW
DJNZ R2,OTSLP ;DECREMENT COUNTER
SETB SDA1 ;TURN PIN INTO INPUT
NOP ;NOTE 1
NOP
NOP
SETB SCL1 ;CLOCK ACK
NOP ;NOTE 1
NOP
NOP
NOP
NOP
CLR SCL1
RET
READ:
MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
CALL OUTS ;SEND IT
MOV A,R4 ;GET LOW BYTE ADDRESS
CALL OUT ;SEND IT
CALL CREAD ;GET DATA BYTE
MOV P1,R3
RET
CREAD: MOV A,#RDCMD ;LOAD READ COMMAND
CALL OUTS ;SEND IT
CALL IN ;READ DATA
MOV R1,A ;STORE DATA
CALL STOP ;SEND STOP CONDITION
MOV B,R1
MOV R3,B
RET
IN: MOV R2,#8 ;LOOP COUNT
SETB SDA1 ;SET DATA BIT HIGH FOR INPUT
INLP: CLR SCL1 ;CLOCK LOW
NOP ;NOTE 1
NOP
NOP
NOP
NOP ;NOTE 2
NOP
SETB SCL1 ;CLOCK HIGH
CLR C ;CLEAR CARRY
JNB SDA1,INL1 ;JUMP IF DATA = 0
CPL C ;SET CARRY IF DATA = 1
INL1:RLC A ;ROTATE DATA INTO ACCUMULATOR
DJNZ R2,INLP ;DECREMENT COUNTER
CLR SCL1 ;CLOCK LOW
RET