Ya he solucionado el problema!!!! lo que me pasaba es que le metía un valor al timer0, me desbordaba la primera vez pero luego seguía contando el timer sin volver a inicializarlo, y se tenía que recorrer los 16 bits con el prescaler de 256 enteritos, y no me contaba el medio segundo que kería, vamos, que me faltaba reinicializar el timer cada vez que detectaba el TMR0IF
Lo de que no me aumentaba el TMR0H era porque en watch veía el TMR0, y ahí no se actualiza si no realizas una lectura de TMR0L, pero hay otro registro el TMR0_internal que ese si que se ve como aumenta el TMR0, asi que muchas gracias por vuestra ayuda y problema solucionado