Waitus ist wie Waitms meines Erachtens nach viel zu ungenau.
Lade doch den Timer am Anfang der Interruptroutine einfach mit dem nächsten Wert vor.

Interruptroutine:
Timerx = A
w
e
i
t
e
r
e
r
C
o
d
e
Return

Dadurch das der Timer ab einem vorgegebenen Wert weiterzählt verringert sich die Zeit, die bis zum nächsten TimerCounter overflow vergeht, nach den Vorgaben der Variablen und Du kannst Dir (fast) jede Frequenz erzeugen die Du brauchst. Ich mach das so weil ich für ne bestimmte Anwendung recht genaue 50Hz brauche. Mit nem 8Bit-Timer lieg ich bei 10MHz nur 0.18Hz neben meinem Ziel. Mit nem 16Bit-Timer gehts logischer Weise noch genauer.
Allerdings kommst Du nicht dran vorbei die genauen Werte im Simulator empirisch zu ermitteln wenn Du eine exakte Frequenz brauchst. Das geht aber recht schnell.