code works in simulation not on chip

hi, my first project on uvision but im having trouble making it work. so I'm making a simple POV toy (leds flash and moving it side to side you see a message) using a Atmel AT89S52 microcontroller, with 8 leds connected to its port 2.

i know my programmer and board is working because i made a simple program to toggle leds in port 2 and it work fine.

programmer i using is based on this:
http://ikalogic.com/isp.php

im using the latest version of the software and I added leds on it to see if programs work.

Parents
  • here is my code:

    
    ORG 0
    
    REPEAT:                 CLR A
                                    MOV R0, A                                       ;WE USE R0 AS A COUNTER FOR WHICH ASCII CODE WE UPTO IN MESSEGE
    ;********GETING AN ASCII CHAR FROM THE DATABASE***************
    GETCHAR:                MOV DPTR, #MESSEGE                      ;SET POINTER TO MESSEGE DATABASE
                                    MOV A, R0                                       ;SET A TO ASCII CODE COUNTER
                                    MOVC A, @A+DPTR                         ;GET ASCII CODE
                    JZ REPEAT                       ;IF LAST CHAR THEN JUMP BACK TO START AND RESTART
    
    
    
    ;***********WHICH LETTER IS IT?*****************
    
                    CJNE A, #"A", BCH             ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ACHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    BCH:             CJNE A, #"B", CCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #BCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    CCH:             CJNE A, #"C", DCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #CCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    DCH:             CJNE A, #"D", ECH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #DCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    ECH:             CJNE A, #"E", FCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ECHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    FCH:             CJNE A, #"F", GCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #FCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    GCH:             CJNE A, #"G", HCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #GCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    HCH:             CJNE A, #"H", ICH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #HCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    ICH:             CJNE A, #"I", JCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ICHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    JCH:             CJNE A, #"J", KCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #JCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    KCH:             CJNE A, #"K", LCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #KCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    LCH:             CJNE A, #"L", MCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #LCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    MCH:             CJNE A, #"M", NCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #MCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    

Reply
  • here is my code:

    
    ORG 0
    
    REPEAT:                 CLR A
                                    MOV R0, A                                       ;WE USE R0 AS A COUNTER FOR WHICH ASCII CODE WE UPTO IN MESSEGE
    ;********GETING AN ASCII CHAR FROM THE DATABASE***************
    GETCHAR:                MOV DPTR, #MESSEGE                      ;SET POINTER TO MESSEGE DATABASE
                                    MOV A, R0                                       ;SET A TO ASCII CODE COUNTER
                                    MOVC A, @A+DPTR                         ;GET ASCII CODE
                    JZ REPEAT                       ;IF LAST CHAR THEN JUMP BACK TO START AND RESTART
    
    
    
    ;***********WHICH LETTER IS IT?*****************
    
                    CJNE A, #"A", BCH             ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ACHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    BCH:             CJNE A, #"B", CCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #BCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    CCH:             CJNE A, #"C", DCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #CCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    DCH:             CJNE A, #"D", ECH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #DCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    ECH:             CJNE A, #"E", FCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ECHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    FCH:             CJNE A, #"F", GCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #FCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    GCH:             CJNE A, #"G", HCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #GCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    HCH:             CJNE A, #"H", ICH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #HCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    ICH:             CJNE A, #"I", JCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #ICHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    JCH:             CJNE A, #"J", KCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #JCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    KCH:             CJNE A, #"K", LCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #KCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    LCH:             CJNE A, #"L", MCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #LCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    MCH:             CJNE A, #"M", NCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #MCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    

Children
More questions in this forum