Hi,
ich bin dabei meine defekte Heizungselektronik durch einen Mega16 zu ersetzen.
Das soll natürlich relativ rasch geschehen, denn die Heizperiode steht vor der Tür bzw. hat schon begonnen ...!

Beim Tiny13 und Mega8 hatte ich bislang keine Probleme mit den Timern bzw. den Vektor-Sprüngen bei Overflow.
Den Mega16 verwende ich das erste Mal.
Ich benötige alle 3 Timer.
Beim debuggen mit dem AVR Studio staunte ich nicht schlecht, als kein einziger TmrOvf auf die richtige Vektoradresse gesprungen ist.
Nun habe ich ein Testprogramm zusammen gestellt.
Bei diesem ist es genauso der Fall!

Beim Testen dieses Testprogrammes (und in meinem eigentlichen ebenso) mit AVR Studio 4.12 und 4.19 springen die Timer Interrupts auf eine komplett andere Vectoradresse als es sein soll!!!

Der Tmr0-Ovf-Int springt auf INT2 External Interrupt Request 2,
der Tmr1-Ovf-Int auf ANA_COMP Analog Comparator und
der Tmr2-Ovf-Int auf TIMER1 OVF Timer/Counter1 Overflow!

Wo hab ich bloß meinen Gedanken- und Programmfehler!??
Kann mir bitte jemand helfen?

Gruß Heinz

Code:
#include "m16def.inc"
; Interrupt Vektoren lt. Datenblatt und m16def.inc
.cseg
.org    0x000        
    rjmp    INIT    ; POR oder Reset
    reti         ;INT0 External Interrupt Request 0
    reti         ;INT1 External Interrupt Request 1
    reti         ;TIMER2 COMP Timer/Counter2 Compare Match
    rjmp    TMR2OVF    ;TIMER2 OVF Timer/Counter2 Overflow
    reti         ;TIMER1 CAPT Timer/Counter1 Capture Event
    reti         ;TIMER1 COMPA Timer/Counter1 Compare Match A
    reti         ;TIMER1 COMPB Timer/Counter1 Compare Match B
    rjmp    TMR1OVF    ;TIMER1 OVF Timer/Counter1 Overflow
    rjmp    TMR0OVF    ;TIMER0 OVF Timer/Counter0 Overflow
    reti         ;SPI, STC Serial Transfer Complete
    reti         ;USART, RXC USART, Rx Complete
    reti         ;USART, UDRE USART Data Register Empty
    reti         ;USART, TXC USART, Tx Complete
    reti         ;ADC ADC Conversion Complete
    reti         ;EE_RDY EEPROM Ready
    reti         ;ANA_COMP Analog Comparator
    reti         ;TWI Two-wire Serial Interface
    reti         ;INT2 External Interrupt Request 2
    reti         ;TIMER0 COMP Timer/Counter0 Compare Match
    reti         ;SPM_RDY Store Program Memory Ready

INIT:
    cli        ;disable Interrupts 

; Stack anlegen
    ldi    R16,LOW(RAMEND)
    out    SPL,R16
    ldi    R16,HIGH(RAMEND)
    out    SPH,R16

; Interrupt enabling
    ldi    R16,69        ;Tmr0+1+2 IntEn
    out    TIMSK,R16
    sei            ;Interrupts freigeben

;*****************************************************************
; Start Timer0
    ldi    R16,250
    out    TCNT0,R16    ;TimerCounter auf 250
    ldi    R16,1        ;no Prescaler
    out    TCCR0,R16    ;StartTimer0
; Start Timer1
    ser    R17
    ldi    R16,245
    out    TCNT1H,R17    ;TimerCounter auf 255
    out    TCNT1L,R16    ;TimerCounter auf 245
    ldi    R16,1        ;no Prescaler
    out    TCCR1B,R16    ;StartTimer1
; Start Timer2
    ldi    R16,240
    out    TCNT2,R16    ;TimerCounter auf 240
    ldi    R16,1        ;no Prescaler
    out    TCCR2,R16    ;StartTimer2

; Loop zum Testen der TmrOvf Interrupts
LOOP:
    nop
    rjmp    loop

;******************** START INTERRUPTROUTINEN ********************
TMR0OVF:
    in    R18,SREG
    cli
    out    SREG,R18
    reti

TMR1OVF:
    in    R19,SREG
    cli
    out    SREG,R19
    reti

TMR2OVF:
    in    R20,SREG
    cli
    out    SREG,R20
    reti

;******************** ENDE INTERRUPTROUTINEN *********************
.EXIT