El TIMER0 no es más indicado para ese tipo de funciones, además que si el PIC que usas de la familia 18, es un timer de 16 bits y no de 8, aunque lo puedes configurar como uno de 8. Yo te recomiendo que uses una de las señales PWM o el TIMER1 con alguno de los módulos CCP en modo comparación, aunque la opción mejor en este caso sigue siendo utilizar el módulo CCP como PWM.
La fórmula parece estar bien, pero desde que se desencadena el proceso de interrupción, hasta que cambias el valor del timer, pasa un tiempo, que introduce un error en el resultado de las formas de onda así que si quieres precisión en ese KHz de salida, tendrás que buscar un método más preciso que ese.
Saludos
Reinier