I didn't comprehend the depth of this statement, until now. I thought I was just forced to accept using Timer1 in the routines, and adapt my main code to use other timers.
i doubt i will understand how you came to that conclusion. you will need a different strategy if you plan additional interrupt usage as there can only be one interrupt handler, dt's elapsed timer takes it over entirely


by the way the newer chips are easier to use

i called this dlapsed.pbp,
Code:
'****************************************************************
'*  Name    : ELAPSED.PBP                                       *
'*  Author  : Darrel Taylor                                     *
'*  Notice  : Copyright (c) 2003                                *
'*  Date    : 12/16/2003                                        *
'*  Notes   : its based on this                                 *
'****************************************************************
'*  Name    : DLAPSED.PBP                                       *
'*  Author  : Richard                                           *
'*  Date    : 2024-10-05                                        *
'*  Notes   :  for 16F18877 or similar                          *
'             a) @32MHz                                         *
'             b) Used Timer3                                    *
'****************************************************************


Define  INTHAND _ClockCount    ' Tell PBP Where the code starts on an interrupt




Ticks    VAR BYTE   ' 1/100th of a second
Seconds  VAR BYTE
Minutes  VAR BYTE
Hours    VAR BYTE
Days     VAR WORD
R0save   VAR WORD
R1save   VAR WORD


ZERO             VAR BIT
CountDown        VAR BIT
SecondsChanged   VAR BIT
MinutesChanged   VAR BIT
HoursChanged     VAR BIT
DaysChanged      VAR BIT


CountDown = 0
SecondsChanged = 1
MinutesChanged = 1


Goto OverElapsed


' ------------------------------------------------------------------------------
Asm


TimerConst = 45537		     ; 100Hz 
  
  
; -----------------  ADD TimerConst to TMR3H:TMR3L
ADD2_TIMER   macro
    CHK?RP  T3CON
    BCF     T3CON,TMR3ON           ; Turn off timer  
    MOVLW   LOW(TimerConst)        ;  1
    ADDWF   TMR3L,F                ;  1    ; reload timer with correct value
    BTFSC   STATUS,C               ;  1/2
    INCF    TMR3H,F                ;  1
    MOVLW   HIGH(TimerConst)       ;  1
    ADDWF   TMR3H,F                ;  1
    endm


; -----------------  ADD TimerConst to TMR3H:TMR3L and restart Timer3 
RELOAD_TIMER  macro
    ADD2_TIMER
    BSF     T3CON,TMR3ON           ;  1    ; Turn Timer3 back on
    CHK?RP  PIR4
    bcf     PIR4, TMR3IF           ; Clear Timer3 Interrupt Flag
    endm


; -----------------  Load TimerConst into TMR3H:TMR3L 
LOAD_TIMER  macro
EndAsm
    T3CON.0 = 0                    ; Turn OFF Timer3
    TMR3L = 0
    TMR3H = 0
Asm
    ADD2_TIMER
    endm
EndAsm


' ------[ This is the Interrupt Handler ]---------------------------------------
ClockCount:   ' Note: this is being handled as an ASM interrupt
                   
@  RELOAD_TIMER                    ; Reload Timer3
   R0save = R0                     ; Save 2 PBP system vars that are used during
   R1save = R1                     ; the interrupt
   Ticks = Ticks + 1
   if Ticks = 100 then
      Ticks = 0
      IF CountDown THEN
         IF Seconds > 0 THEN
            Seconds = Seconds - 1
            SecondsChanged = 1
            IF Seconds = 0 THEN
               IF Days = 0 THEN
                  IF Hours = 0 THEN
                     IF Minutes = 0 THEN
                        GOSUB StopTimer    ; Zero reached
                        ZERO = 1
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
         ELSE
            IF Minutes > 0 THEN
               Minutes = Minutes - 1
               Seconds = 59
               SecondsChanged = 1
               MinutesChanged = 1
            ELSE
               IF Hours > 0 THEN
                  Hours = Hours - 1
                  Minutes = 59
                  Seconds = 59
                  SecondsChanged = 1
                  MinutesChanged = 1
                  HoursChanged = 1
               ELSE
                  IF Days > 0 THEN
                     Days = Days - 1
                     Hours = 23
                     Minutes = 59
                     Seconds = 59
                     SecondsChanged = 1
                     MinutesChanged = 1
                     HoursChanged = 1
                     DaysChanged = 1
                  ELSE                     ; Zero already reached, shouldn't get here
                     GOSUB StopTimer
                     ZERO = 1
                  ENDIF
               ENDIF
            ENDIF
         ENDIF
      ELSE                                ; Counting Up
         Seconds = Seconds + 1
         SecondsChanged = 1
         IF Seconds = 60 THEN
            Minutes = Minutes + 1
            MinutesChanged = 1
            Seconds = 0
         ENDIF
         IF Minutes = 60 THEN
            Hours = Hours + 1
            HoursChanged = 1
            Minutes = 0
         ENDIF
         IF Hours = 24 THEN
            Days = Days + 1
            DaysChanged = 1
            Hours = 0
         ENDIF
      endif
   ENDIF
   R1 = R1save                     ; Restore the PBP system vars
   R0 = R0save
@  RETFIE                      ; Restore context and return from interrupt


'-----====[ END OF TMR3 Interrupt Handler ]====---------------------------------


StartTimer:
  IF NOT ZERO THEN
    T3CLK   = 1                   ;  clock source
    t3con = $20                   ;  prescaler
    PIR4.2  = 0                   ; (TMR3IF) Clear Timer3 Interrupt Flag
    PIE4.2  = 1                   ; (TMR3IE) Enable TMR3 overflow interrupt
    INTCON.6 = 1                  ; (PEIE) Enable peripheral interrupts
    INTCON.7 = 1                  ; (GIE) Enable global interrupts
    T3CON.0 = 1                   ; (TMR3ON) Start Timer3
  ENDIF
return


; -----------------
StopTimer:
    T3CON.0 = 0                   ; Turn OFF Timer3
return


; -----------------
ResetTime:
    ZERO = 0
    R0save = T3CON.0              ; Save TMR3ON bit
    T3CON.0 = 0                   ; Turn OFF Timer3
    TMR3L = 0
    TMR3H = 0
@   LOAD_TIMER                    ; Load TimerConst
    T3CON.0 = R0save              ; Restore TMR3ON bit
    Ticks = 0
    Seconds = 0
    Minutes = 0
    Hours = 0
    Days = 0
    SecondsChanged = 1
return


OverElapsed:
usage demo


Code:
#CONFIG
    __config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_ON
    __config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
    __config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_ON & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
    __config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_ON
    __config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG


DEFINE OSC 32


ANSELA = 0
TRISA = %11101111


INCLUDE "DLAPSED.PBP "   ' Elapsed Timer Routines
Days = 0                  ' set initial time
Hours = 0
Minutes = 1
Seconds = 0
ZERO = 0
GOSUB StartTimer 


Main:
    IF SecondsChanged THEN  
        Lata.4 = !Lata.4   ' flash led on porta.4
        SecondsChanged = 0
    ENDIF
GOTO Main
end