Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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>


List of 8 messages in thread
TopicAuthorDate
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      

Back to Subject List