| ??? 02/27/10 12:20 Read: times |
#173620 - Formatted code Responding to: ???'s previous message |
Hello,
Sorry for the inconvenience. I tried to apply correct formatting but unfortunately it didn't work, although it had worked successfully last time. I have tried formatting it again and added comments to it. Kindly go through the code and please let me know why I am not able to write the data in AT89C66A using WRITE LOOP. 'Read' and 'write all' loops are working fine. The problem might be in write loop.
.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 WITH 8 BITS
.EQU SIZE,0F0H ;8 BITS DATA SIZE
.EQU DATA_LO,25H ;LOWER BYTE
.EQU ADDR_LO,27H ;ADDRESS
.ORG 0000H
LJMP MAIN
.ORG 0100H
MAIN: CLR CS ;DISABLE CHIP
CLR SK ;INITIALIZE PORT PINS
SETB DI
SETB DO
CLR SIZE ;8 BITS DATA
MOV DATA_LO,#00H
MOV ADDR_LO,#00H
LCALL EWEN ;ERASE / WRITE ENABLE
MOV ADDR_LO,#7FH ;ADDRESS AT WHICH WE WANT TO WRITE DATA
MOV DATA_LO,#25H ;DATA TO BE WRITTEN IN EEPROM
LCALL WRITE ;CALL WRITE LOOP
MOV A,DATA_LO
LCALL DISPLAY ;DISPLAY DATA TO BE WRITTEN IN EEPROM
MOV ADDR_LO,#7FH ;ADDRESS AT WHICH WE WANT TO READ DATA
MOV DATA_LO,#00H
LCALL READ ;CALL READ LOOP
MOV A,DATA_LO
LCALL DISPLAY ;DISPLAY DATA READ FROM EEPROM
SAME: SJMP SAME
WRITE: SETB CS ;ENABLE CHIP
MOV DPL,#101B ;START BIT 1, OPCODE 01
MOV B,#03 ;NUMBER OF VALID DATA BITS
LCALL OUTDATA ;SHIFT OUT OPCODE
MOV DPL,ADDR_LO ;LOAD ADDRESS INTO DPTR
MOV DPH,ADDR_HI
MOV B,#NADDR ;NUMBER OF VALID BITS
LCALL OUTDATA ;SHIFT OUT ADDRESS MSB FIRST
MOV DPL,DATA_LO ;LOAD DATA INTO DPTR
MOV B,#8 ;NUMBER OF VALID DATA BITS
EE62: LCALL OUTDATA ;SHIFT OUT DATA MSB FIRST
CLR CS ;DISABLE CHIP
LCALL STATUS ;POLL DEVICE STATUS
RET
EWEN: SETB CS ;ENABLE CHIP
MOV DPTR,#(10011B SHL (NADDR-2)) ;SHIFT STARY BIT 1, OPCODE 00 AND 11
MOV B,#(NADDR+3) ;NUMBER OF VALID BITS
LCALL OUTDATA ;SHIFT OUT DATA MSB FIRST
CLR CS ;ENABLE CHIP
RET
STATUS: PUSH B ;POLL DEVICE STATUS USING DO PIN
SETB DO
SETB CS
MOV B,#220
EE40: PUSH B ;DELAY OF 50 MICROSECONDS
MOV B,#22
SAME1: DJNZ B,SAME1
POP B
JB DO,EE41 ;POLL DEVICE STATUS USING DO PIN
DJNZ B,EE40
SETB C
MOV A,#'E' ;FLAG ERROR
LCALL DATAWRT
SJMP EE42
EE41: CLR C
EE42: CLR CS
POP B
RET
OUTDATA:PUSH B ;MOVE DATA INTO EEPROM
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 ;SHIFT OUT BYTE INTO EEPROM
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 ;SHIFT OUT BYTE INTO EEPROM
EE9: SETB DO
POP B
RET
SHOUT: CLR SK ;SHIFT OUT BYTE INTO EEPROM
RLC A
MOV DI,C
NOP
SETB SK
DJNZ B,SHOUT
CLR SK
RET
|
| 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 |



