??? 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 |