This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

interfacing eeprom with 89c52

Hi... Am new to this site... please can any one help me...
I need to interface AT24c64 with 89c52. here is my asm code... i cannot write even 00h to eeprom.
please debug my code and guide me...

org 0000h
sjmp start
start:
       mov p1,#0ffh   ; initializing port 1 as input
       lcall none
       sjmp start
none:ret
      lcall write
      lcall read
      lcall none
;********** Write Routine*******
write:
    mov r3,#00h     ; mem address high ; is the address in eeprom where data will start
    mov r4,#00h     ;mem address low
    mov r1,#00h     ; byte to be send to eeprom is stored in r1
    lcall bytewr
    ret
bytewr:
       lcall eepstart        ; start to write
       mov a,#0a0h   ; eeprom write command
       lcall send
       mov a,r3
       lcall send
       mov a,r4
       lcall send
       mov a,r1
       lcall send
       lcall stop         ;stop
       ret

;********Transmission of data one by one********

 send:
        mov r2,#08h    ; data transmission for 8 bits
bck:
     rlc a
     jc bck1
     clr p1.1               ;    if carry low clear data
     setb p1.0
     clr p1.0
     djnz r2,bck
     sjmp ack
bck1:
     setb p1.1           ;if carry high set data
     setb p1.0
     clr p1.0
     djnz r2,bck

;******** acknowledgement from eeprom*********
ack:                         ;ack from eeprom
    setb p1.0
    clr p1.0
    ret
;*******read data routine********
read:
      mov r3,#00h
      mov r4,#00h
      lcall byterd
      mov r1,a
      ret

byterd:
       lcall eepstart              ; start to read
       mov a,#0a0h
       lcall send
       mov a,r4
       lcall send
       lcall stop
       lcall cread
       ret

cread:
     lcall eepstart
     mov a,#0a1h             ;read command
    lcall send
    lcall recv
    mov r1,a      ; store data
    lcall stop        ; stop
    ret
;**********receving data one by one********
recv:
       mov r2,#08h
      setb p1.1
rec:
        clr p1.0
        setb p1.0
        clr c
        jnb p1.1,rec1
        cpl c
rec1:
         rlc a
         djnz r2,rec
         clr p1.0
          ret
;******** Start routine********
eepstart:
       setb p1.1    ; high to low transistion of data with high clock
       clr p1.0
       setb p1.0
      clr p1.1
      clr p1.0
       ret
; ***********Stop routine********
stop:
         clr p1.1     ; low to high transistion of data with high clock
          setb p1.0
          setb p1.1
          ret

end

Thanks in advance...

Parents Reply Children