SystemSeconds, SystemSecondsLowWORD, and SystemSecondsLowBYTE

Purpose: Read either the complete System Seconds variable maintained by the Operating System, or only the low order WORD, or low order BYTE portion of it.
Assumes:  System interrupts are enabled, so the Operating System is able to update SystemSeconds.
Passed: Nothing
Returns:    R25:R24:R23:R22  ULONG  ulSeconds  4-byte value contained in ulT0_Seconds (for SystemSeconds)
R25:R24  WORD  wSeconds  2-byte value contained in the low 2 bytes of ulT0_Seconds (for SystemSecondsLowWORD)
R24  BYTE  bSeconds  1-byte value contained in the low byte of ulT0_Seconds (for SystemSecondsLowBYTE)
Alters: Only the Registers returned (not even the FLAGS)
Example:  
AnyKeypressExits:
   CALL    ACOM1_GetRxCount       ; Received characters accrue while processing
   MOV     R18, R24               ;  a command; get the current buffered count

Loop:                             ; Compare R30, R27:R26, and R25:R24:R23:R22
   CALL    ASystemSecondsLowBYTE  ; Obtain the Low Order BYTE
   MOV     R30, R24
   CALL    ASystemSecondsLowWORD  ; Obtain the Low Order WORD
   MOVW    R26, R24
   CALL    ASystemSeconds         ; Obtain the complete ULONG value
   CALL    ADumpRegs_Begin        ; View all the Registers' contents
   CALL    ACOM1_GetRxCount       ; Get the new buffered (received) byte count
   CP      R24, R18               ; Compare to see if the received count changed
   BREQ    ALoop                  ; If not, loop back, otherwise exit (so it's
   RET                            ;  when ANY character has been received)
Notes: The Operating System updates the UNSIGNED LONG variable ulT0_Seconds, for which the range of values is 0 to 4,294,967,295 Seconds. It will automatically roll over upon reaching its maximum value, but that would take a little over 136 years, if left unmodified! The ulT0_Seconds value may be read directly and changed, if there is any reason for it.
The Operating System uses the MCU Timer0 Interrupt Service Routine to update this ULONG value, along with the ulT0_Millis value. Both the millisecond and fractional increment values used to update the millis value are recalculated once each second, in case the system MPU speed has been changed during that second.
Also see:  The millis variables, the SecTimerBYTE and SecTimerWORD timers, and the speed decrease and increase commands.