I had written a ASM code for Driving a EEPROM using P89V51RD2........... It works fine for sequential write n read.... But the problem is, tat it doesnt read for random..... Plz hep me in tat... I have placed my code.....
pre SDA equ P1.0 SCL equ P1.1
WRITE equ 10100000B READ equ 10100001B
ORG 0H
MOV SCON,#50H ; Configuration for Reception of Serial Port MOV TMOD,#20H MOV TH1,#-3 ; Set the Baud Rate 9600 SETB TR1
;Store a byte "data" in location "addr" in EEPROM
MOV 10H,#50H ; ADDR= "10H" DATA= "50H" MOV A,#WRITE CALL SENDS MOV A,10H CALL SEND MOV A,10H MOV R7,A CALL SEND CALL STOP MOV A,R7 CALL DISPLAY
;Read the data frm EEPROM
MOV A,#WRITE CALL SENDS MOV A,#10H CALL SEND ;MOV A,10H CALL READ1 ;CALL STOP MOV A,R7 CALL DISPLAY ;CALL DELAY
SENDS: MOV R5,#08H SETB SDA SETB SCL NOP NOP CLR SDA NOP NOP CLR SCL RETURN: RLC A JNC NEXT SETB SDA JMP ROW NEXT: CLR SDA ROW: SETB SCL NOP NOP CLR SCL DJNZ R5,RETURN NOP NOP CLR SCL MOV A,P1 SETB SCL NOP NOP JNB SDA,down MOV A,#4EH ;CALL DISPLAY RET down: MOV A,#41H ;CALL DISPLAY RET
SEND: MOV R4,#08H RETURN1: RLC A JNC NEXT1 SETB SDA JMP ROW1 NEXT1: CLR SDA ROW1: SETB SCL NOP NOP CLR SCL DJNZ R4,RETURN1 ;CALL DISPLAY NOP NOP CLR SCL MOV A,P1 JNB SDA, down1 MOV A,#4EH ;CALL DISPLAY RET down1: MOV A,#42H ;CALL DISPLAY RET
READ1: MOV A,#READ CALL SENDS CALL IN ;MOV R7,A CALL STOP RET
IN: MOV R6,#08H SETB SDA IN2: CLR SCL NOP NOP CLR P1.7 /*CALL DELAY SETB P1.7 CALL DELAY*/ SETB SCL CLR C ;JNB SDA,IN1 ;CPL C MOV C,SDA IN1: RLC A DJNZ R6,IN2 MOV R7,A ;CALL DISPLAY NOP NOP CLR SCL NOP NOP MOV A,P1 SETB SCL JNB SDA,down2 MOV A,#4EH CALL STOP ;CALL DISPLAY RET down2: MOV A,#43H ;CALL DISPLAY CALL STOP RET
STOP: CLR SDA NOP NOP SETB SCL NOP NOP SETB SDA RET
DELAY: MOV R0,#02H HERE2: MOV R1,#0A0H HERE1: MOV R2,#0A0H HERE: DJNZ R2,HERE DJNZ R1,HERE1 DJNZ R0,HERE2 RET
DISPLAY: MOV SBUF,A CONT: JNB TI,CONT CLR TI RET END /pre