Guten Abend,
bin nun schon seit ungefähr 2 Stunden auf der Suche nach oben gennantem
Problem.
Ich programmiere einen ATMEGA 8 in C und habe das Problem, dass nach dem
Timer1 - overflow in die entsprechende ISR gesprungen wird, dennoch nach
dem beenden der ISR wird an den Anfang von main(); gesprungen. Warum?
Hier noch die wichtigen ausschnitte aus dem Code:
1 | void main (void)
|
2 |
|
3 | {......
|
4 | // Timer start
|
5 | zeitmessung_start();
|
6 | sei();
|
7 |
|
8 | while(1)
|
9 | {.....
|
10 | _delay_ms(2000);
|
11 | lcd_befehl(1);
|
12 | }
|
13 | }
|
14 |
|
15 | // Interrupt routine
|
16 |
|
17 | ISR (TIMER1_OVF_vect)
|
18 | {
|
19 | sek++;
|
20 | if(sek >= 60)
|
21 | {
|
22 | min++;
|
23 | sek = 0;
|
24 | if(min >= 60)
|
25 | {
|
26 | std++;
|
27 | min = 0;
|
28 | }
|
29 | }
|
30 | }
|
zeitmessung_start():
1 | void timer1_start()
|
2 | {
|
3 | TCCR1B |= ((1<<WGM12) | (1<<CS11) | (1<<CS10)); // CTC-Mode 5; CLK/64
|
4 | }
|
5 |
|
6 | void zeitmessung_start()
|
7 | {
|
8 | OCR1A = 31250; // OCR1a vorladen = 31250
|
9 | TIMSK |= (1<<OCIE1A); // Interrupt Overflow start
|
10 | timer1_start(); // Timer1 starten
|
11 | }
|
Vielen Dank im voraus.