Overflow Flag ist immer 1??

OP #896405
Lesenswert?

Hallo

ich habe folgendes Problem. Das Overflow Falg TOV0 ist immer eins wenn 
ich es in flag schreibe. Das verstehe ich nicht es müsste doch erstmal 
Null sein und wenn der Timer einmal bis 255 durchgelaufen ist dürfte es 
doch erst gesetzt sein. Und wenn es gestzt ist kann ich es doch mit 
schreiben einer 1 wieder zurücksetzen.

#include <avr/io.h>
//#include <stdlib.h>
//#include <stdio.h>
//#include <stdint.h>


//Start des Programms

int main (void)
{
  TCCR0B = 0x02; //Timer aktivieren
  DDRB = 0x08; //Setzt PB3 als Ausgang
  int timer;
  int flag;
  for(;;)
  {
    timer = TCNT0;
    flag = TOV0;
    PORTB ^= 0x08; //Toggle PB3 high
    if(flag == 1)
    {
      TIFR0 = 0x02;
    }
  }
//Ende des Programms
  for(;;) {
  }
}
OP #896433
Lesenswert?

Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit 
(TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag 
anstellen.

Mit TIFR0 = 1<<TOV0; setzte ich das Bit ja nur wieder zurück das weiss 
ich und das funktioniert auch.

Es handelt sich übrigens um einen ATtiny13
#896441
Lesenswert?

Matthias Lobitz wrote:
> Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit
> (TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag
> anstellen.

flag = TIFR0 & (1<<TOV0);

"if(flag == 1)" funktioniert dann aber nicht. Du musst auf >0 testen, 
also einfach "if (flag)".
Gast #896494
Lesenswert?

>ch kann mir vielleicht einer noch sagen wie ich die genaue CPU
>-Frequenz auslesen kann? Im Datenblatt steht nur 0-10Mhz.

Garnicht. Die legst du selbst fest. Entweder mit externem Quartz oder 
mit internem RC-Oszillator

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