Ich sehe, dass du Assembler machst und Sprut zitierst. Arbeitest du mit High Voltage Programming? (Sprut propagiert und begründet das ja deutlich).
Hast du das LowVoltage Programming Enable Bit in den CONFIGs disabled? Es gibt kein HV-Prog.-Enable, das geht immer. Nur der Pin RB3 kann dann noch stören. Ist der per Widerstand auf GND gezogen? Das kann viel Ärger ersparen.

Das 16-Bit-Register des Timer1 nützt dir kaum was. Auslesen und Verarbeiten kannst du ihn nur byteweise; die Inkrementierung auf 16-Bit-Ebene in Software??? - das wüsste ich grad nicht, wie das gehen soll.

ISR steht für "Interrupt Service Routine", ansonsten aber richtig.

Hast du eine Diagnose-LED am Controller dran? Dann mach dich vielleicht erstmal dran, bezüglich Chipprogrammierung auf festen Boden zu kommen. Danach vielleicht einen 1ms- oder 10ms-Interrupt einrichten. Eine blinkende LED. Eine Delayfunktion in der ISR für das Hauptprogramm. Die Datenübergabe an das Display ...

Bei Fosz = 4,096MHz bzw. Fcycl = 1MHz und 1ms-Interrupt hast du im Extremfall fast 1000 Befehle für die ISR zur Verfügung. Da passt sooo viel rein: (natürlich würde dann das Hauptprogramm nicht mehr "laufen", nur noch "kriechen", aber das ist ein anderes Thema)
Taster- bzw. Lichtschranken-Signalentprellung, die Uhrenkaskade, Kopieren der Bytes bei erkanntem Zeitnahme-Trigger, die LCD-Bedienung, und und und... die meisten Sachen sind ja mit wenigen Befehlen abgehandelt.

Vielleicht magst du ja schon vorher die Fehlercodes zeigen, damit du schneller < 10 kommst?