??? 08/30/07 15:38 Modified: 08/30/07 15:42 Read: times |
#143757 - Formatted and some comments Responding to: ???'s previous message |
Below I formatted your code, for tips on how to do this refer to:
http://www.8052.com/users/jonled/noob.pdf I added some comments in lower case, somethings are not clear to me and have ??. Knowing the oscillator speed might help. Do you have a simulator? If not here's one to try: http://www.vaultbbs.com/pinnacle/p52v1130.exe It appears that the LCD initialization is incomplete. Jon ;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 ;A ACALL DISP_CHAR MOV A,#4EH ;N ACALL DISP_CHAR MOV A,#4BH ;K ACALL DISP_CHAR MOV A,#54H ;T ACALL DISP_CHAR MOV A,#52H ;R ACALL DISP_CHAR MOV A,#41H ;A ACALL DISP_CHAR MOV A,#43H ;C ACALL DISP_CHAR MOV A,#4BH ;K ACALL DISP_CHAR MOV A,#53H ;S ACALL DISP_CHAR ; MOV R3,#1FH ; 31 AGAIN: ACALL DELAY_CHAR ; call a delay loop 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: ; initialize 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: ; send a command to LCD MOV LCD,A CLR RS SETB EN ACALL DELAY_INIT CLR EN RET ; DELAY_INIT: ; a delay loop MOV R7,#0FFH LOOP: MOV R0,01H ; < - should be R0,#01H ?? DELAY: DJNZ R0,DELAY DJNZ R7,LOOP RET ; DELAY_CHAR: ; a delay loop MOV R7,#0FFH LOOP1: MOV R0,09H ; < - should be R0,#09H ?? DELAY1: DJNZ R0,DELAY1 DJNZ R7,LOOP1 RET ; DISP_CHAR: ; send a character to LCD 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 ; clear display ACALL LCDCMD MOV A,#82H ; return home ? ACALL LCDCMD MOV A,#4DH ; M ACALL DISP_CHAR MOV A,#4FH ; O ACALL DISP_CHAR MOV A,#44H ; D ACALL DISP_CHAR MOV A,#45H ; E ACALL DISP_CHAR RET SRL_ISR: MOV A,#0C8H ACALL LCDCMD MOV A,#1AH ; what character is this ? substitution? ACALL DISP_CHAR MOV A,R1 ; R1 has mode info P1.0 & P1.1 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 ; < - LCDCMD ?? 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 |