Ik probeer een tmro overflow interrupt te genereren met een interval van ongeveer 1 sec. dit probeer ik met de onderstaande instellingen en routine om 2 ledjes te laten toggelen.:
Nu is het probleem dat de overflow veel te vaak voorkomt.. Ik heb ongeveer 250 interrupts per seconde? Xtal 20Mhz, 16bits timer0 met preload van 46004.
Weet iemand wat ik verkeerd doe/over het hoofd zie?
Alvast bedankt.
OVER_INTERRUPT:
;*****TMR0 INIT*********************************
TMR0ON = 0 ;Timer 0 off
TMR0IE = 0
GIE = 0
PSA = 1 ;Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
T0PS0 = 1 ;bits 2-0 PS2:PS0: Prescaler Select bits
T0PS1 = 1
T0PS2 = 1
T0CS = 0 ;TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
T0SE = 0 ;TMR0 Source Edge Select bit: 0=low/high / 1=high/low
PEIE = 1
GIE = 1
T08BIT = 0 ;Timer0 8-Bit/16-Bit Control Bit: 1=8-Bit timer/Counter / 0=16-Bit timer/Counter
TMR0ON = 1 ;Timer0 on
TMR0IE = 1
TMR0H = $B3 ;preset for Timer0 MSB register
TMR0L = $B4 ;preset for Timer0 LSB register
'ISR ROUTINE--------------------------------------------------------------------
ISR:
Context Save
If TMR0IF = 1 Then ; ALS INTERRUPT UIT TMR 0 DAN...
Inc Cnt1
If Cnt1> 250 Then
Toggle PORTC.5
Toggle PORTC.4
Cnt1 = 0
EndIf
TMR0IF = 0 ;RESET INTERRUPT FLAG TMR0
TMR0H = $B3 ;preset for Timer0 MSB register
TMR0L = $B4 ;preset for Timer0 LSB register
EndIf
Context Restore
Op 15 februari 2012 21:52:14 schreef Zonnepaneeltje:
Aan je commentaarregel te zien heb je de prescaler uit staan.
Whaaaaa. Thanks.. soms ligt de oplossing zo dichtbij!