;
; increment RTC once per second
;
; unsigned char Clock [] = { 23, 59, 59 }; // hrs, mins, secs
;
; RTC () // bump RTC
; { unsigned char n = 2; // index seconds array element
; while (Clock[n]++ == 59) // while value 59 (post inc value)
; Clock[n--] = 0; // set to 00 and bump array index
; if (Clock[0] == 24) // if rollover to 24:00:00
; Clock[0] = 0; // change to 00:00:00
; }
;
ISR_RTC
movlw Clock+2 ; |B0
movwf FSR ; FSR = @Clock[2] // seconds |B0
ISR_R1
movf INDF,W ; while (Clock[n]++ == 59) |B0
incf INDF,F ; |B0
xorlw d'59' ; |B0
bnz ISR_R2 ; |B0
clrf INDF ; Clock[n] = 0; |B0
decf FSR,F ; n--; |B0
goto ISR_R1 ; |B0
ISR_R2
movf Clock+0,W ; if (Clock[0] == 24) |B0
xorlw d'24' ; |B0
bnz ISR_ALM ; |B0
clrf CLKHRS ; Clock[0] = 0; |B0
;