WIN-AVR; springt nach TIMER1_OVF_vect ISR nach main()

Gast #1938066
Lesenswert?

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.
Gast #1938121
Lesenswert?

Mach es dir nicht unnötig schwer indem du für die kleinsten Sachen ne 
Funktion aufziehst, dass lohnt sich erst wenn man Sachen machen will die 
sich oft wiederholen müssen. Deine Timer starten Funktion is also nicht 
so elegant.
Gast #1938220
Lesenswert?

Ohje, vielen Dank.
Da hab ich mich wohl tierisch verschaut :).
Vollständigkeitshalber - So funktionierts:
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_COMPA_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
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren