[color=Green]'GPS Signal receiver decoder [/color]
[color=Blue]Symbol Version [/color][color=DarkCyan]= [/color][color=Navy]3 [/color][color=Green]'28-Jan-2018 225 bytes Cut down as background timer example
'[/color]
[color=Blue]Symbol Major [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Green]' Major revision ID
'[/color]
[color=Navy]#PICAXE [/color][color=Black]28X2[/color]
[color=Navy]#COM 1
#Terminal 19200[/color]
[color=Green]'[/color]
[color=Navy]#No_Table[/color]
[color=Green]'
' **** Hardware Pins Definitions - i prefix for inputs; o for outputs; b for bothway pins
'[/color]
[color=Blue]Symbol oRedLED [/color][color=DarkCyan]= [/color][color=Blue]C.3
Symbol [/color][color=Purple]oPinValRedLED [/color][color=DarkCyan]= [/color][color=Purple]outpinC.3[/color]
[color=Green]'
' **** Variables - t prefix: bit variable; b: byte; w: word; r: other RAM; s: scratchpad; e: EEPROM
'[/color]
[color=Blue]Symbol [/color][color=Purple]tFlashRed [/color][color=DarkCyan]= [/color][color=Purple]bit4 [/color][color=Green]'b0,w0 Flag to flash Red LED[/color]
[color=Blue]Symbol [/color][color=Purple]tRFlashState [/color][color=DarkCyan]= [/color][color=Purple]bit5 [/color][color=Green]'b0,w0 Current Red LED State (if flashing)
'[/color]
[color=Blue]Symbol [/color][color=Purple]bLoopCtr [/color][color=DarkCyan]= [/color][color=Purple]b4 [/color][color=Green]'w2
'[/color]
[color=Blue]Symbol [/color][color=Purple]bEighthSecs [/color][color=DarkCyan]= [/color][color=Purple]b51 [/color][color=Green]'w19 v0.16 1/8 Seconds (125mS Tick)[/color]
[color=Blue]Symbol [/color][color=Purple]bSeconds [/color][color=DarkCyan]= [/color][color=Purple]b52 [/color][color=Green]'w25
'
' **** Constants - Prefix = c
'[/color]
[color=Blue]Symbol False [/color][color=DarkCyan]= [/color][color=Navy]0[/color]
[color=Blue]Symbol True [/color][color=DarkCyan]= [/color][color=Navy]1[/color]
[color=Blue]Symbol Out [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Green]'Link is out: Pin is pulled high by internal pullup[/color]
[color=Blue]Symbol In [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Green]'Link is in: Pin is pulled low by the link[/color]
[color=Blue]Symbol cDataReady [/color][color=DarkCyan]= [/color][color=Navy]0[/color]
[color=Blue]Symbol cNoData [/color][color=DarkCyan]= [/color][color=Navy]1[/color]
[color=Blue]Symbol cNoBreak [/color][color=DarkCyan]= [/color][color=Navy]0[/color]
[color=Blue]Symbol cBreak [/color][color=DarkCyan]= [/color][color=Navy]1[/color]
[color=Blue]Symbol cDQuote [/color][color=DarkCyan]= [/color][color=Navy]34[/color]
[color=Green]'
'Interrupt masks[/color]
[color=Blue]Symbol mskSerialOnly [/color][color=DarkCyan]= [/color][color=Navy]%00100000[/color]
[color=Blue]Symbol flgSerialOnly [/color][color=DarkCyan]= [/color][color=Navy]%00100000[/color]
[color=Blue]Symbol mskTmrAndSer [/color][color=DarkCyan]= [/color][color=Navy]%10100000[/color]
[color=Blue]Symbol flgTmrAndSer [/color][color=DarkCyan]= [/color][color=Navy]%10100000[/color]
[color=Blue]Symbol mskBGTimer [/color][color=DarkCyan]= [/color][color=Navy]%10000000[/color]
[color=Blue]Symbol flgBGTimer [/color][color=DarkCyan]= [/color][color=Navy]%10000000[/color]
[color=Green]'Timer constants[/color]
[color=Blue]Symbol tmrIntOn1stTick [/color][color=DarkCyan]= [/color][color=Navy]65535 [/color][color=Green]'Interrupt to be caused by roll over on first major tick[/color]
[color=Blue]Symbol t125mS_16 [/color][color=DarkCyan]= [/color][color=Navy]57724 [/color][color=Green]'SetTimer value for 1/8 second ticks @ 16MHz[/color]
[color=Blue]Symbol cOneMinute [/color][color=DarkCyan]= [/color][color=Navy]60[/color]
[color=Blue]Symbol cOneHour [/color][color=DarkCyan]= [/color][color=Navy]60 [/color][color=Green]'Minutes, not seconds
'
'Pause periods at 16MHz[/color]
[color=Blue]Symbol c100mS [/color][color=DarkCyan]= [/color][color=Navy]200 [/color][color=Green]' 100mS[/color]
[color=Blue]Symbol c1S [/color][color=DarkCyan]= [/color][color=Navy]2000 [/color][color=Green]'1000mS
'
' **** Scratchpad - Prefix = s (28X2 - Bytes 0 to 1023d)
'[/color]
[color=Blue]Symbol sSerInBuffStart [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Green]'[/color]
[color=Blue]Symbol sSerInBuffSecond [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Green]'Second byte of serial input buffer
'[/color]
[color=Black]Init: [/color][color=Blue]Output oRedLED
Low oRedLED
SetFreq m16
Pause c1S
[/color][color=Green]'
[/color][color=Blue]For [/color][color=Purple]bLoopCtr [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to [/color][color=Navy]16 [/color][color=Green]'8 flashes
[/color][color=Blue]Pause c100mS [/color][color=Green]'Put Pause first to allow SetFreq to settle
[/color][color=Blue]Toggle oRedLED
Next [/color][color=Purple]bLoopCtr
[/color][color=Blue]SerTxd (CR[/color][color=Black], [/color][color=Blue]LF[/color][color=Black], [/color][color=Blue]CR[/color][color=Black], [/color][color=Blue]LF[/color][color=Black], [/color][color=Red]"Booted: GPS Data Receiver v"[/color][color=Black], #[/color][color=Blue]Major[/color][color=Black], [/color][color=Red]"."[/color][color=Black], #[/color][color=Blue]Version[/color][color=Black], [/color][color=Blue]CR[/color][color=Black], [/color][color=Blue]LF)
[/color][color=Green]'
'Initialise serial downlink for GPS comms
[/color][color=Purple]Ptr [/color][color=DarkCyan]= [/color][color=Blue]sSerInBuffStart
[/color][color=Purple]hSerPtr [/color][color=DarkCyan]= [/color][color=Blue]sSerInBuffStart
hSerSetup B9600_16[/color][color=Black], [/color][color=Navy]%00001 [/color][color=Green]'9600 baud @ 16MHz, Background, no inversion
' %abcde where, for X2 chips:
' Bit e (bit 0): Foregrd/Backgrd mode e=0 foreground; e=1*background
' Bit d (bit 1): Transmit mode - d=0*No invert; d=1 Invert transmit
' Bit c (bit 2): Receive mode - c=0*No invert; c=1 Invert receive
' Bit b (bit 3): disable hserout b=0 enable; b=1 disable
' Bit a (bit 4): disable hserin a=0 enable; a=1 disable
'
'Start the background timer (runs continuously)
[/color][color=Purple]Timer [/color][color=DarkCyan]= [/color][color=Blue]tmrIntOn1stTick
SetTimer t125mS_16 [/color][color=Green]'Expires after 1/8 second @ 16 MHz
[/color][color=Purple]Flags [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Green]'Reset serial reception flag
[/color][color=Blue]SetIntFlags [/color][color=DarkCyan]Or [/color][color=Blue]flgTmrAndSer[/color][color=Black], [/color][color=Blue]mskTmrAndSer [/color][color=Green]'Set timer 0 or hSerial to interrupt
'
[/color][color=Purple]tFlashRed [/color][color=DarkCyan]= [/color][color=Blue]True
SerTxd ([/color][color=Red]"Initialisation Complete: Enter Main Loop"[/color][color=Black], [/color][color=Blue]CR[/color][color=Black], [/color][color=Blue]LF)
[/color][color=Green]'
' ------ MAIN LOOP
'
[/color][color=Blue]Do
[/color][color=Green]'Main loop code goes here
[/color][color=Blue]Loop[/color]
[color=Green]'[/color]
[color=Blue]Interrupt:If [/color][color=Purple]hSerInFlag [/color][color=DarkCyan]= [/color][color=Blue]True then
[/color][color=Purple]hSerInFlag [/color][color=DarkCyan]= [/color][color=Blue]False
EndIf
If [/color][color=Purple]TOFlag [/color][color=DarkCyan]= [/color][color=Blue]True then
[/color][color=Purple]TOFlag [/color][color=DarkCyan]= [/color][color=Blue]False [/color][color=Green]'Reset (clear) the flag first
[/color][color=Blue]Inc [/color][color=Purple]bEighthSecs
bEighthSecs [/color][color=DarkCyan]= [/color][color=Purple]bEighthSecs [/color][color=DarkCyan]And [/color][color=Navy]%00000111 [/color][color=Green]'Limit to 0 - 7
[/color][color=Blue]If [/color][color=Purple]bEighthSecs [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Blue]Then [/color][color=Green]'Ie Once every second
[/color][color=Blue]If [/color][color=Purple]tFlashRed [/color][color=DarkCyan]= [/color][color=Blue]True Then [/color][color=Green]'Flash the red LED
[/color][color=Blue]Inc [/color][color=Purple]tRFlashState
oPinValRedLED [/color][color=DarkCyan]= [/color][color=Purple]tRFlashState
[/color][color=Blue]EndIf
Inc [/color][color=Purple]bSeconds
[/color][color=Blue]EndIf
[/color][color=Purple]Timer [/color][color=DarkCyan]= [/color][color=Blue]tmrIntOn1stTick [/color][color=Green]'Then reset the timer
[/color][color=Blue]EndIf [/color][color=Green]'Timer has ticked
[/color][color=Blue]SetIntFlags [/color][color=DarkCyan]Or [/color][color=Blue]flgTmrAndSer[/color][color=Black], [/color][color=Blue]mskTmrAndSer [/color][color=Green]'Set timer 0 or hSerial to interrupt
[/color][color=Blue]Return[/color]