| ??? 01/06/03 04:39 Read: times |
#35738 - Code problem |
I am having problems with a code I wrote to read in a GGA NEMA sentence and parse out the UTC time the Lat and Long and display it on a 4x20 VFD. Everything works except when I parse the Lat the first two digits are missing on the display. Everything else works good. I know this is probably not the best way to do this but I am still in the learn phase. I would appreciate any help anyone could give me on this.
Craig Clark VFD EQU P0 RS EQU P1.0 E EQU P1.1 ORG 0000H ;====================== Setup the VFD ============================= MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#0CH ;Display On/Off Control ACALL COMNWRT MOV A,#06H ;Entry Mode ACALL COMNWRT MOV A,#01H ;Clear Display ACALL COMNWRT ACALL LINE1 ;Go to line 1 MOV A,#'L' ACALL DATAWRT MOV A,#'A' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE2 ;Go to line 2 MOV A,#'L' ACALL DATAWRT MOV A,#'O' ACALL DATAWRT MOV A,#'N' ACALL DATAWRT MOV A,#'G' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE3 ;Go to line 3 MOV A,#'A' ACALL DATAWRT MOV A,#'L' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE4 ;Go to line 4 MOV A,#'U' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#'C' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ;====================== Setup Serial Port ========================= MOV SCON,#50H ;Set for 8 bit variable baud MOV TMOD,#20H ;Set for timer 1 MOV TH1,#0FAH ;Set for 4800 baud MOV TCON,#40H ;Start timer 1 ;================================================================== RX: JNB RI,RX CLR RI MOV A,SBUF CJNE A,#24H,RX ;Do we have a $ BEGIN: MOV R0,#20H START: JNB RI,START CLR RI MOV @R0,SBUF CJNE @R0,#0AH,CONT SJMP DECODE CONT: INC R0 SJMP START DECODE: MOV R0,#20H CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#50H,RX ;Is it a P INC R0 CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#41H,RX ;Is it a A INC R0 CJNE @R0,#2CH,RX ;Is it a , INC R0 UTC: MOV A,#0D8H ;Go to UTC field ACALL COMNWRT UTC1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,UTC1 INC R0 LAT: MOV A,#85H ;Go to Lat field ACALL COMNWRT LAT1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,LAT1 INC R0 HEMI: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,HEMI INC R0 LONG: MOV A,#0C5H ;Go to Long field ACALL COMNWRT LONG1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,LONG1 INC R0 HEMI1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,HEMI1 INC R0 LJMP RX LINE1: CLR A MOV A,#80H ACALL COMNWRT RET LINE2: CLR A MOV A,#0C0H ACALL COMNWRT RET LINE3: CLR A MOV A,#94H ACALL COMNWRT RET LINE4: CLR A MOV A,#0D4H ACALL COMNWRT RET COMNWRT: MOV VFD,A CLR RS SETB E ACALL TD CLR E RET DATAWRT: MOV VFD,A SETB RS SETB E ACALL TD CLR E TD: MOV 30H,#5 MOV 31H,#0 WAIT: DJNZ 31H,WAIT DJNZ 30H,WAIT RET END Craig Clark VFD EQU P0 RS EQU P1.0 E EQU P1.1 ORG 0000H ;====================== Setup the VFD ============================= MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#38H ;Function Set ACALL COMNWRT MOV A,#0CH ;Display On/Off Control ACALL COMNWRT MOV A,#06H ;Entry Mode ACALL COMNWRT MOV A,#01H ;Clear Display ACALL COMNWRT ACALL LINE1 ;Go to line 1 MOV A,#'L' ACALL DATAWRT MOV A,#'A' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE2 ;Go to line 2 MOV A,#'L' ACALL DATAWRT MOV A,#'O' ACALL DATAWRT MOV A,#'N' ACALL DATAWRT MOV A,#'G' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE3 ;Go to line 3 MOV A,#'A' ACALL DATAWRT MOV A,#'L' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ACALL LINE4 ;Go to line 4 MOV A,#'U' ACALL DATAWRT MOV A,#'T' ACALL DATAWRT MOV A,#'C' ACALL DATAWRT MOV A,#':' ACALL DATAWRT ;====================== Setup Serial Port ========================= MOV SCON,#50H ;Set for 8 bit variable baud MOV TMOD,#20H ;Set for timer 1 MOV TH1,#0FAH ;Set for 4800 baud MOV TCON,#40H ;Start timer 1 ;================================================================== RX: JNB RI,RX CLR RI MOV A,SBUF CJNE A,#24H,RX ;Do we have a $ BEGIN: MOV R0,#20H START: JNB RI,START CLR RI MOV @R0,SBUF CJNE @R0,#0AH,CONT SJMP DECODE CONT: INC R0 SJMP START DECODE: MOV R0,#20H CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#50H,RX ;Is it a P INC R0 CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#47H,RX ;Is it a G INC R0 CJNE @R0,#41H,RX ;Is it a A INC R0 CJNE @R0,#2CH,RX ;Is it a , INC R0 UTC: MOV A,#0D8H ;Go to UTC field ACALL COMNWRT UTC1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,UTC1 INC R0 LAT: MOV A,#85H ;Go to Lat field ACALL COMNWRT LAT1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,LAT1 INC R0 HEMI: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,HEMI INC R0 LONG: MOV A,#0C5H ;Go to Long field ACALL COMNWRT LONG1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,LONG1 INC R0 HEMI1: MOV A,@R0 ACALL DATAWRT INC R0 CJNE @R0,#2CH,HEMI1 INC R0 LJMP RX LINE1: CLR A MOV A,#80H ACALL COMNWRT RET LINE2: CLR A MOV A,#0C0H ACALL COMNWRT RET LINE3: CLR A MOV A,#94H ACALL COMNWRT RET LINE4: CLR A MOV A,#0D4H ACALL COMNWRT RET COMNWRT: MOV VFD,A CLR RS SETB E ACALL TD CLR E RET DATAWRT: MOV VFD,A SETB RS SETB E ACALL TD CLR E TD: MOV 30H,#5 MOV 31H,#0 WAIT: DJNZ 31H,WAIT DJNZ 30H,WAIT RET END |
| Topic | Author | Date |
| Code problem | 01/01/70 00:00 | |
| RE: Code problem | 01/01/70 00:00 | |
| RE: Code problem | 01/01/70 00:00 | |
RE: Code problem | 01/01/70 00:00 |



