In the ISR you have this:
Code:
    if seconds<1000 then
        seconds=seconds+1
    else
        seconds=0
        Timer0=0    'Stop timer0
        TMR0H=$C1   'Load Timer 0 with start value $C187
        TMR0L=$87   'to count up 16000 steps until rollover
        Timer0=1    'Start timer0
To me, this looks a bit strange - you're only reloading the TMR0 registers once every 1000 interrupts meaning that only the "first" period will be 1ms, then there will be 999 periods where the timer will freerun all the way from 0 to rollover.