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...
find a datasheet for some 24c64 that has the I²C 'spelled out'.
then go through your 'send' routine with paper and pen and you'll see what you are missing
Thank you very much sir.. I will try to find it out...