Ich dachte nur, weil grad' der interessante Teil gefehlt hat 
Also, an der Variablen "Zeittick" liegt es jedenfalls nicht
Sie ist auf der addresse 0x0064, und genau da greifen sowohl die ISR's als auch dein Main-Vergleich hin.
Code:
// Eine nichtunterbrechbare Interrupt-Service-Routine
SIGNAL (TIM1_COMPA_vect)
{
Zeittick = Zeittick + 1;
62: 80 91 64 00 lds r24, 0x0064
66: 8f 5f subi r24, 0xFF ; 255
68: 80 93 64 00 sts 0x0064, r24
}
SIGNAL (TIM1_OVF_vect)
{
Zeittick = Zeittick + 1;
86: 80 91 64 00 lds r24, 0x0064
8a: 8f 5f subi r24, 0xFF ; 255
8c: 80 93 64 00 sts 0x0064, r24
}
int main (void)
{
while(1)
{
if (Zeittick >= 3)
f8: 80 91 64 00 lds r24, 0x0064
fc: 83 30 cpi r24, 0x03 ; 3
fe: e0 f3 brcs .-8 ; 0xf8
{
PORTB |= (1 << PB3); // setzt Bit 3 an PortB auf 1
100: c3 9a sbi 0x18, 3 ; 24
102: fa cf rjmp .-12 ; 0xf8 <__stack+0x19>
}
}
}
Das kann man also vergessen. Beide ISR's zählen am Zeitticker ?
Jetzt muß man das Timer u. Interrupt Setup auf Richtigkeit checken, denn wenn die laufen, MUSS die main-routine irgendwann >=3 erkennen.
Lesezeichen