SET_TIMER needs work too. With the timer set to 16-bit read/write operation you need to write to TMR0H first, then TMR0L. Reading is just to opposite. Read TMR0L, then read TMR0H.

And, do you really want TMR0H to be loaded with the low & then high bytes of tmr0runon?

TMR0H=tmr0runon.Highbyte ' Save new values to TMR0
TMR0H=tmr0runon.Lowbyte

This wouldn't work anyhow, since you never write to TMR0L, which loads TMR0H..;o)