Forum: Mikrocontroller und Digitale Elektronik Timer0 ATmega 16 in C


von Lars E. (larse)


Lesenswert?

Hallo allerseits,

ich habe folgendes Problem. Ich versuche grade einen simplen Timer zu 
programmieren, der nach einer bestimmmten Zeit eine LED aus und eine 
andere anschalten soll. Folgenden Code habe ich dazu geschrieben, wird 
auch ordentlich compiliert, allerdings sagt er zu meiner for-schleife, 
dass diese keine Funtion hat. Da sthe ich jetz auf dem Schlauch. Ich 
glaube, dass ich noc was im Code vergessen habe..nur was?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
5
6
int main(void)                  //Hauptprogramm
7
{
8
  int i;  
9
  sei();                    //globale Interrupts aktivieren
10
  DDRD |=0b01100000;              //PD5 & PD6 Ausgang, Rest Eingang
11
  PORTD |=0b00100000;              //PD5 high, PD6 low
12
    TCCR0 |= (1<<CS00)|(1<<CS02);        //TIMER0 auf 1/1024 Quarz-Takt
13
  TIFR |=0b00000010;              //Overflow Flag löschen
14
  TIMSK |= _BV(TOIE0);
15
  
16
  for(i;i<=150;i++)
17
  {
18
  
19
    while((TIFR&0b00000010)==0)        //Overflow Flag abwarten
20
    {
21
      PORTD |=(1<<PD5);          //PD5 immer noch high
22
    }
23
    TIFR |=0b00000010;              //Overflow Flag löschen
24
    PORTD &=~(1<<PD5);              //PD5 low
25
    PORTD |= (1<<PD6);              //PD6 high
26
  }
27
  return 0;
28
  
29
}

wer mag mir weiterhelfen oder sieht den/die Fehler?

Gruß Lars

von Stefan E. (sternst)


Lesenswert?

> int i;
> ...
> for(i;i<=150;i++)

Du initialisierst i nirgendwo.
Wie wäre es mit:
for(i=0;i<=150;i++)

von Stefan E. (sternst)


Lesenswert?

Funktionieren wird dein Programm aber trotzdem nicht, denn du aktivierst 
den Overflow-Interrupt, hast aber gar keine Interruptroutine.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.