Hola Berto!
Respuesta corta:Pon a 0 el flag TMR0IF antes de habilitar la interrupcion. Si trabajas con CCS puedes usar clear_interrupt(int_timer0)
Respuesta larga:Las interrupciones tienen unos registros asociados, en el caso del timer 0, normalmente tienes:
-INTCON: Registro de control de interrupciones
*TMR0IE: Bit que habilita o no la interrupcion por TIMER 0
*TMR0IF: Bit de interrupcion que indica si ha ocurrido un desbordamiento del registro TMR0
*GIE: Bit que habilita o no las interrupciones globales
-TMR0: Registro con el valor del TIMER 0. Ocurre un desbordamiento cuando pasa del valor 255 (0xFF) al valor 0 (0x00).
-Hay algun otro registro asociado al timer 0, pero no es pertinente en este caso.
El Timer 0 esta corriendo constantemente, sin importar si la interrupcion esta habilitada. Y cuando desborda activa el bit de interrupcion TMR0IF. Si la interrupcion no esta activada, no interrupira, pero el bit seguira activo. En el momento que tu activas la interrupcion el programa comprueba que tiene TMR0IF activado y ejecuta la interrupcion.Eso nos lleva a la solucion de la respuesta corta
Por cierto, como el timer siempre esta corriendo, en el momento que activas la interrupcion quizas tambien te interese ponerlo a 0.
Creo que algunos compiladores se encargan de borrar el el flag de interrupcion cuando la habilitas, pero a veces mejor no fiarse y hacerlo por tu cuenta para estar seguro.
Un saludo!