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

Back to Subject List

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



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