??? 02/26/10 12:44 Read: times |
#173597 - Interfacing external EEPROM |
Hello,
For my project, I want to interface external EEPROM IC AT93C66A with microcontroller AT89C55WD. So I have written a dummy code to access EEPROM of IC AT89C66A. But I am facing the following problem: I am not able to write the desired data into EEPROM while read loop is working fine. I am storing 25H in EEPROM and reading the same from it, but FFH i.e. 255D is displayed on LCD. If I write 25H using ‘write all’ instruction, then I get 25H at all locations which has been retrieved using read loop as well as programmer. Please, could someone help me out by pointing out where I could be going wrong and as to why I am not able to write the data in AT89C66A using WRITE BYTE instruction. The read data using programmer is same as the data read using ‘read loop’. My LCD routines are working fine as I have used them for other codes of project The code has been implemented as follows: (I have taken this code from the Atmel datasheet) <pre> .EQU CS,P1.4 ;CHIP SELECT .EQU DI,P1.5 ;DATA IN .EQU DO,P1.6 ;DATA OUT .EQU SK,P1.7 ;SERIAL CLOCK .EQU NADDR,09H ;89C66A .EQU SIZE,0F0H .EQU DATA_LO,25H .EQU DATA_HI,26H .EQU ADDR_LO,27H .EQU ADDR_HI,28H .ORG 0000H LJMP MAIN .ORG 0100H MAIN: CLR CS CLR SK SETB DI SETB DO CLR SIZE ;8 BITS DATA MOV DATA_LO,#00H MOV ADDR_LO,#00H LCALL EWEN ;WRITE ENABLE MOV ADDR_LO,#7FH MOV DATA_LO,#25H LCALL WRITE MOV A,DATA_LO LCALL DISPLAY MOV ADDR_LO,#7FH MOV DATA_LO,#00H LCALL READ MOV A,DATA_LO LCALL DISPLAY SAME: SJMP SAME ;.......................................... READ: SETB CS MOV DPL,#110B MOV B,#3 LCALL OUTDATA MOV DPL,ADDR_LO MOV DPH,ADDR_HI MOV B,#NADDR LCALL OUTDATA LCALL INDATA CLR CS RET WRITE: SETB CS MOV DPL,#101B MOV B,#03 LCALL OUTDATA MOV DPL,ADDR_LO MOV DPH,ADDR_HI MOV B,#NADDR LCALL OUTDATA MOV DPL,DATA_LO JB SIZE,EE61 MOV B,#8 SJMP EE62 EE61: MOV DPH,DATA_HI MOV B,#16 EE62: LCALL OUTDATA CLR CS LCALL STATUS RET EWEN: SETB CS MOV DPTR,#(10011B SHL (NADDR-2)) MOV B,#(NADDR+3) LCALL OUTDATA CLR CS RET WRAL: SETB CS MOV DPTR,#(10001B SHL (NADDR-2)) MOV B,#(NADDR+3) LCALL OUTDATA MOV DPL,DATA_LO MOV B,#8 LCALL OUTDATA CLR CS LCALL STATUS RET STATUS: PUSH B SETB DO SETB CS MOV B,#220 ;DELAY OF 50 MICROSECONDS EE40: PUSH B MOV B,#22 SAME1: DJNZ B,SAME1 POP B JB DO,EE41 DJNZ B,EE40 SETB C MOV A,#'E' ;FLAG ERROR LCALL DATAWRT SJMP EE42 EE41: CLR C EE42: CLR CS POP B RET INDATA: SETB DO LCALL SHIN JNB SIZE,EE21 MOV DATA_HI,A LCALL SHIN EE21: MOV DATA_LO,A RET SHIN: PUSH B CLR SK MOV B,#8 EE30: SETB SK NOP MOV C,DO RLC A CLR SK DJNZ B,EE30 POP B RET OUTDATA:PUSH B MOV A,B CLR C SUBB A,#8 JC EE6 JZ EE5 MOV B,A CLR C SUBB A,#8 JC EE2 JNZ EE9 MOV A,DPH SJMP EE4 EE2: PUSH B MOV A,DPH EE3: RR A DJNZ B,EE3 POP B EE4: LCALL SHOUT MOV B,#8 EE5: MOV A,DPL SJMP EE8 EE6: PUSH B MOV A,DPL EE7: RR A DJNZ B,EE7 POP B EE8: LCALL SHOUT EE9: SETB DO POP B RET SHOUT: CLR SK RLC A MOV DI,C NOP SETB SK DJNZ B,SHOUT CLR SK RET .<pre> |
Topic | Author | Date |
Interfacing external EEPROM | 01/01/70 00:00 | |
You should try... | 01/01/70 00:00 | |
RE: Use a pattern that is not the same in each byte | 01/01/70 00:00 | |
that is an insult | 01/01/70 00:00 | |
Well, he did at least try | 01/01/70 00:00 | |
Formatted code | 01/01/70 00:00 | |
Comments | 01/01/70 00:00 | |
Your code is incomplete.![]() | 01/01/70 00:00 |