func main() dim retvalue starttimer0(0) pauseus 500 retvalue = readtimer0(1) print "Pause took ",retvalue,"ns" retvalue = readtimer0(1) print "print took ",retvalue,"ns" endfunc func starttimer0(speed) if OPP8 = 0 then speed = 0 endif branch speed,speed0,speed1,speed2,speed3,speed4,speed5,speed6,speed7,speed8 'No prescale Fastest operation '1:1 speed0: T0CON = 0 T0CON.bit(3)= 1 'No prescale goto cont '1:2 speed1: T0CON = 0 T0CON.bit(3)= 0 'Use Prescale goto cont '1:4 speed2: T0CON = 1 T0CON.bit(3)= 0 'Use Prescale goto cont '1:8 speed3: T0CON = 2 T0CON.bit(3)= 0 'Use Prescale goto cont '1:16 speed4: T0CON = 3 T0CON.bit(3)= 0 'Use Prescale goto cont '1:32 speed5: T0CON = 4 T0CON.bit(3)= 0 'Use Prescale goto cont '1:64 speed6: T0CON = 5 T0CON.bit(3)= 0 'Use Prescale goto cont '1:128 speed7: T0CON = 6 T0CON.bit(3)= 0 'Use Prescale goto cont '1:256 speed8: T0CON = 7 T0CON.bit(3)= 0 'Use Prescale goto cont cont: 'When writing to the timer register alwasy write the high byte first TMR0H=0 TMR0L=0 T0CON.bit(7) = 1 'Turn timer on endfunc 'Pass 1 if you want to reset counter to 0 func readtimer0(reset) dim timervalue if OPP8 = 0 then reset = 0 endif 'When reading timer register always read the low byte first timervalue.byte(0) = TMR0L timervalue.byte(1) = TMR0H if reset = 1 then TMR0H=0 TMR0L=0 endif exit timervalue endfunc func stoptimer0() T0CON.bit(7) = 0 'Turn timer off endfunc