Timer Simulation in Atmel Studio

OP #3381397
Lesenswert?

Moin moin liebe Community,

ich bin zwar nicht ganz unbedarft, allerdings ist es nun doch schon 
wieder ein paar Monate her, dass ich im Thema uC voll drin war. (Und 
ausserdem mit Keil gearbeitet habe)

Ich bin gerade dabei ein kleines Programm zu schreiben und brauche dafür 
nun den Timer, sodass während den funktionsaufrufen eine Pause entsteht.

Grundgedanke war dieser:
- Timer Starten
- in der ISR eine sekundenflag setzen wenn Millisekunde = 1000
- im Hauptprogramm if-abfrage auf die Sekundenflag
- ausführen der funktion

Ich habe mich nun an dem Beispiel hier im AVR-Tut orientiert, aber mir 
schmiert gerade ständig die IDE ab wenn ich das Programm durchlaufen 
lassen möchte.
Irgend eine Idee woran das liegen kann?

Anbei mein Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
void Ringlauf();
5
//Globale Variablen festlegen
6
int millisekunde;
7
bool sekunde;
8

9
int main(void)
10
{
11
  // Timer 0 konfigurieren
12
  TCCR0A |= 0x02; // CTC Modus
13
  TCCR0B |= 0x02;  // Prescaler 8
14
  // ((1000000/8)/1000) = 125
15
  OCR0A = 125-1;
16
  
17
  // Compare Interrupt erlauben
18
  TIMSK0 |= 0x01;    //TOIE
19
  
20
  // Global Interrupts aktivieren
21
  sei();
22

23
    while(1)
24
    {
25
    if (sekunde == true) {
26
    Ringlauf();}
27
    }
28
}
29

30
void Ringlauf()
31
{
32
//COde zur Übersichtlichkeit entfernt
33
};
34

35
ISR (TIMER0_COMPA_vect)
36
{
37
  millisekunde++;
38
  
39
  if (millisekunde == 1000) {
40
    sekunde = true;
41
  }
42
}

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