Jag kör med 16Mhz kristall och 16-bits timer 1:256 prescaler. TMR0H och TMR0L laddas som de ska. Jag beräknar värdet till TMR0H och TMR0L genom tid/(prescaler*periodtid) dvs 1/(256*(1/(16*10e6)))=62500 => TMR0=65536-62500=3036 dvs TMR0H=11, TMR0L=220.
Initiering av Timer0:
Kod: Markera allt
;------------------------------------------------------------------------------
;Funktion för att konfiguera Timer0
Configure_timer0
bcf T0CON,T08BIT ;16-bits timer
bcf T0CON,T0CS ;Internal instruction cycle clock (timer mode)
bcf T0CON,T0SE ;Räkna upp på låg-till-hög flank
bcf T0CON,PSA ;Enable prescaler
bsf T0CON,T0PS2 ;1:256 prescaler, 111 på T0PS2-T0PS0
bsf T0CON,T0PS1
bsf T0CON,T0PS0
bsf INTCON,TMR0IE ;Enable Timer0 interrupts
bcf INTCON,TMR0IF ;Nollställer Timer0s interrupt flag-bit
movlw D'11' ;Sätter värdet på Timer0s register för fördröjning
movwf TMR0H
movlw D'220'
movwf TMR0L
;Observera att det inte går att stega med ICD2 vid uppdatering av TMR0H, det syns inte.
;Sätt en breakpoint efter och titta på värdet.
bsf T0CON,TMR0ON ;Starta Timer0
return