??? 08/30/07 10:36 Read: times |
#143751 - help me in debugging asm code |
on running the following asm code, the display "TANKTRACKS" continues in a loop 3 to 4 times. and mode info is displayed based on external pin inputs p1.0 and p1.1. please help me in debugging so that the display comes only once.
;LCD PROGRAM TO DISPLAY "TANKTRACKS..." RS EQU P2.5 EN EQU P1.2 LCD EQU P0 ORG 0 LJMP MAIN ORG 0023H LJMP SRL_ISR ORG 0030H MAIN: SETB P1.0; MAKE THEM AS INPUT PINS SETB P1.1; MOV IE,0H ; DISABLE INTERRUPTS ACALL INIT_LCD; INIT LCD MOV A,#54H ; DISPLAY "TANKTRACKS" ACALL DISP_CHAR MOV A,#41H ACALL DISP_CHAR MOV A,#4EH ACALL DISP_CHAR MOV A,#4BH ACALL DISP_CHAR MOV A,#54H ACALL DISP_CHAR MOV A,#52H ACALL DISP_CHAR MOV A,#41H ACALL DISP_CHAR MOV A,#43H ACALL DISP_CHAR MOV A,#4BH ACALL DISP_CHAR MOV A,#53H ACALL DISP_CHAR MOV R3,#1FH AGAIN:ACALL DELAY_CHAR DJNZ R3,AGAIN MOV A,P1; READING MODE INFO ANL A,#03H; STORING ONLY P1.0 AND P1.1 MOV R1,A; MODE INFO IN R1 ACALL SETSRL ; SET SERIAL PORT MOV DPTR,#0000H ; PTR FOR STORING/ READING GPS DATA IN NVRAM ACALL SHOW_STATUS MOV IE,#90H ; ENABLE SERIAL INTERRRUPT LJMP WAIT INIT_LCD: MOV A, #38H ACALL LCDCMD MOV A,#02H ACALL LCDCMD MOV A,#0FH ACALL LCDCMD MOV A,#81H ACALL LCDCMD MOV A,#01H ACALL LCDCMD RET LCDCMD: MOV LCD,A CLR RS SETB EN ACALL DELAY_INIT CLR EN RET DELAY_INIT: MOV R7,#0FFH LOOP:MOV R0,01H DELAY:DJNZ R0,DELAY DJNZ R7,LOOP RET DELAY_CHAR: MOV R7,#0FFH LOOP1:MOV R0,09H DELAY1:DJNZ R0,DELAY1 DJNZ R7,LOOP1 RET DISP_CHAR: SETB RS MOV LCD,A SETB EN ACALL DELAY_CHAR CLR EN ACALL DELAY_CHAR RET SETSRL: MOV TMOD,#20H ; TIMER 1 , AUTO RELOAD MODE MOV SCON,#50H ; 8N1 MOV TH1,#0FDH; 9600 BAUDS MOV A,PCON ; DOUBLE THE BAUD RATE SETB ACC.7 MOV PCON,A SETB TR1 ; START TIMER T1 RET SHOW_STATUS:MOV A,#01H ACALL LCDCMD MOV A,#82H ACALL LCDCMD MOV A,#4DH ACALL DISP_CHAR MOV A,#4FH ACALL DISP_CHAR MOV A,#44H ACALL DISP_CHAR MOV A,#45H ACALL DISP_CHAR RET SRL_ISR: MOV A,#0C8H ACALL LCDCMD MOV A,#1AH ACALL DISP_CHAR MOV A,R1 JB ACC.1,MODE3OR4 JB ACC.0,MODE1 SJMP MODE2 MODE3OR4: JB ACC.0,MODE3 SJMP MODE4 MODE1: MOV A,#24H ACALL DISP_CHAR JB TI,TRANS1 MOV A,SBUF MOV R2,A; STORE RECD BYTE IN R2 TEMPORARILY MOV A,82H; DPTR DPH TO ACC CLR C; CLEAR CARRY SUBB A,#0FFH JNC NOTFULL CLR C MOV A,83H SUBB A,#1FH JC NOTFULL SJMP FULL NOTFULL:MOV A,R2 ; GET RECD BYTE BACK FROM R2 MOVX @DPTR,A INC DPTR CLR RI RETI FULL:MOV IE,80H ; NVRAM FULL SO DISABLE SERIAL INTERRUPT RETI TRANS1: CLR TI RETI MODE2: NOP MODE3: NOP MODE4: NOP WAIT: MOV A,#01H ACALL DISP_CHAR MOV A,#0C1H ACALL LCDCMD SJMP WAIT END |
Topic | Author | Date |
help me in debugging asm code | 01/01/70 00:00 | |
too tough to read | 01/01/70 00:00 | |
Formatted and some comments | 01/01/70 00:00 | |
LCD and Serial Port Initialization | 01/01/70 00:00 | |
it\\\'s still very badly written![]() | 01/01/70 00:00 |