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


Aan je commentaarregel te zien heb je de prescaler uit staan.

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!