This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

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
  • NCH:             CJNE A, #"N", OCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #NCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    OCH:             CJNE A, #"O", PCH
                    MOV DPTR, #OCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    PCH:             CJNE A, #"P", QCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #PCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    QCH:             CJNE A, #"Q", RCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #QCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    RCH:             CJNE A, #"R", SCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #RCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    SCH:             CJNE A, #"S", TCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #SCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    TCH:             CJNE A, #"T", UCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #TCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    UCH:             CJNE A, #"U", VCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #UCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    VCH:             CJNE A, #"V", WCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #VCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    WCH:             CJNE A, #"W", XCE            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #WCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    XCE:             CJNE A, #"X", YCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #XCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    YCH:             CJNE A, #"Y", ZCH            ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP TO CHECK NEXT ONE
                    MOV DPTR, #YCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    
    ZCH:             CJNE A, #"Z", JUMPTOCHAR     ;CHECK IF IT IS CORRECT LETTER, IF NOT JUMP BACK TO GET ANOTHER CHAR BECUASE THIS ONE IS NOT A LETTER
                    MOV DPTR, #ZCHAR            ;IF IT IS THEN SET POINTER TO THE CORRECT CODES TO OUTPUT
                    LJMP RW                         ;THEN JUMP TO ROWS TO CONTINUE
    
    JUMPTOCHAR:             LJMP GETCHAR
    
    ;******************OUTPUT ALL 4 ROWS OF DATA FOR EACH 8X5 CHAR***************
    RW:                         CLR A                                       ;SET A TO COUNTER
                                    MOVC A, @A+DPTR                         ;GET ROW DATA
                    CJNE A, #01010101B, CON         ;IF LAST CHAR GET OUT OF LOOP
                                    ACALL SPACE
                                    INC R0                                          ;INCREMENT
    
    ASCII COUNTER
                                    LJMP GETCHAR
    
    CON:                    MOV P2, A                                       ;OUTPUT THAT ROW
                                    ACALL DELAY                                     ;CALL A DELAY BEFORE NEXT ONE
                                    INC DPTR
                    SJMP RW                         ;LOOP
    
    
    

  • ;**************SPACE SUBROUTINE****************************
    SPACE:                  MOV P2, #0FFH                           ;OUTPUT A SPACE
                                    ACALL DELAY                                     ;CALL A DELAY BEFORE NEXT ONE
    
    RET
    
    ;*******************DELAY SUBROUTINE*******************
    DELAY:                  MOV R4, #0FFh
    NEXT:                   MOV R5, #0FFh
    AGAIN:                  DJNZ R5, AGAIN
                            DJNZ R4, NEXT
    RET
    
    ;*********************MESSEGE TO BE SENT OUT*********************
    ;ONLY CHANGE WHAT IS INSIDE OF THE "", THE 0 IS TO SIGNIFY THE END.
    
    MESSEGE:        DB "HELLO", 0
    
    ACHAR:          DB 11100000B , 10010111B , 01110111B , 10010111B , 11100000B , 01010101B
    BCHAR:          DB 00000000B , 01101110B , 01101110B , 01101110B , 10010001B , 01010101B
    CCHAR:          DB 11000011B , 10111101B , 01111110B , 01111110B , 10111101B , 01010101B
    DCHAR:          DB 00000000B , 01111110B , 01111110B , 10111101B , 11000011B , 01010101B
    ECHAR:          DB 00000000B , 01101110B , 01101110B , 01101110B , 01101110B , 01010101B
    FCHAR:          DB 00000000B , 01101111B , 01101111B , 01101111B , 01101111B , 01010101B
    GCHAR:          DB 10000001B , 01111110B , 01110110B , 01110001B , 10110111B , 01010101B
    HCHAR:          DB 00000000B , 11101111B , 11101111B , 11101111B , 00000000B , 01010101B
    ICHAR:          DB 01111110B , 01111110B , 00000000B , 01111110B , 01111110B , 01010101B
    JCHAR:          DB 01111101B , 01111110B , 00000001B , 01111111B , 01111111B , 01010101B
    KCHAR:          DB 00000000B , 11100111B , 11011011B , 10111101B , 01111110B , 01010101B
    LCHAR:          DB 00000000B , 11111110B , 11111110B , 11111110B , 11111110B , 01010101B
    MCHAR:          DB 00000000B , 10111111B , 11011111B , 10111111B , 00000000B , 01010101B
    NCHAR:          DB 00000000B , 10011111B , 11101111B , 11110011B , 00000000B , 01010101B
    OCHAR:          DB 00000000B , 01111110B , 01111110B , 01111110B , 00000000B , 01010101B
    PCHAR:          DB 00000000B , 01101111B , 01101111B , 01101111B , 00001111B , 01010101B
    QCHAR:          DB 11000011B , 10111100B , 01111010B , 10111101B , 10000010B , 01010101B
    RCHAR:          DB 00000000B , 01100111B , 01101011B , 10101011B , 11011100B , 01010101B
    SCHAR:          DB 10010011B , 01101110B , 01101110B , 01101101B , 10110011B , 01010101B
    TCHAR:          DB 01111111B , 01111111B , 00000000B , 01111111B , 01111111B , 01010101B
    UCHAR:          DB 00000001B , 11111110B , 11111110B , 11111110B , 00000001B , 01010101B
    VCHAR:          DB 00001111B , 00001100B , 11111100B , 11110011B , 00001111B , 01010101B
    WCHAR:          DB 00000001B , 11111100B , 11111011B , 11111100B , 00000001B , 01010101B
    XCHAR:          DB 00011000B , 11100111B , 11111111B , 11100111B , 11100111B , 01010101B
    YCHAR:          DB 01111111B , 10111111B , 11000000B , 10111111B , 01111111B , 01010101B
    ZCHAR:          DB 01111110B , 01111000B , 01100110B , 00011110B , 01111110B , 01010101B
    
    END
    
    

  • so im using c51 to output a hex file and the programmer software to flash the chip, but after i flashed it no leds light up it just does nothing.

    i made a project and i tried it with and without a start-up code. is there something i have to do with the start up code? it just copied it in the folder and i left it there.

    anyway, can any one help me? im soo confused i got no errors or warnings on my code and it works in the simulation but when i flash it, nothing happens.