Microcontroller › 8051 › Interfacing AT24c64 with 89c52 › Hi… please can any one
July 29, 2013 at 6:59 am
#10235
Participant
Hi…
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…