Die Idee bit den 7 bit ist nicht schlecht, kann man mit dem Prescaler kombinieren.
Ich mache das jetzt so, dass ich den Timer0 nicht mit einem Startwert lade, sondern mit 0 (null) und dann auf den gewünschten Endwert abfrage, indem ich den Timerwert vom Endwert subtrahiere und den Carry abfrage. Braucht halt leider einen Befehl mehr. Eine reine Zeitschleife würde also folgendermassen aussehen:
clrf TMR0 ; Timer 0 rücksetzen
loop
movfw TMR0
subwf endwert, w ; Endwert erreicht/überschritten ?
bc loop