Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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


List of 4 messages in thread
TopicAuthorDate
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      

Back to Subject List