Timer1-OCF1-Flag

Gast #33388
Hallo zusammen,

ich bin noch relativ unerfahren mit Timern. Nun bin ich auf ein Problem 
gestossen und finde keine Angaben,weder in den AppNotes noch in der 
uC-Beschreibung:

Ich verwende den Timer1 im Compare Mode, d.h. wenn der Timer einen 
bestimmten Wert erreicht hat, wird das OCF1-Flag im TIFR-Registzer 
gesetzt. Da ich das CTC1 Bit im TCCR1B-Reg. gesetzt habe, startet der 
Timer dann wieder von neu. Allerdings ist mir jetzt nicht bekannt, ob 
der uC das OCF1-Flag wieder cleared? Ich habe mein Programm mal im 
Debug-Modus gestartet und meine festgestellt zu haben, dass das 
OCF1-Flag einmal gesetzt immer gesetzt bleibt. Nun meine Frage: Muss man 
das Flag von Hand auf Null setzen?
(PS: Ich verwende einen AT90S4433)

Danke und Gruß Stepi
Gast
kommt drauf an: ist der entsprechende Interrupt freigegeben, wird das 
Flag beim Anspringen der ISR automatisch gelöscht. Tust du das nicht, 
mußt du es per Software löschen (sinnigerweise durch schreiben einer "1" 
in das betreffende Bit.
Gast
Hallo,

ich frage das OCF1-Flag durch Polling ab, also gänzlich ohne 
Interrupt-Routinen. Demnach muss ich also das Flag durch schreiben einer 
"0" (weiso sollte ich eine "1" schreiben") wieder manuell löschen, bevor 
ich es wieder abfrage?

Gruß Stepi
Gast
arrgghhh...
du musst eine 1 schreiben, deswegen habe ich es ja ausdrücklich gesagt, 
aber wenn du es nicht glaubst, probier es aus, oder einfacher: schau ins 
Datenblatt.
Gast
@stephan
zum löschen von Flags ist definitiv das Zurückschreiben einer "1" 
erforderlich. Macht ja auch Sinn, da prozessorintern eine 
NAND-Verknüpfung stattfindet, und somit gezielt innerhalb eines Taktes 
Flag-Bits gelöscht werden können, ohne die anderen Bits im Register zu 
beeinflussen.
Gast
Ich habe gestern nun ausprobiert, das Flag zu löschen aber weder mit 
sbi, noch mit ldi & out wollte sich das Flag zurücksetzen lassen. Kann 
mir jemand sagen, wie ich das machen soll?
Danke Stepi

PS: Was macht eigentlich die Anweisung
ldi R16,(1<<2)|(1<<3)
Die Bits 2 und 3 in R16 werden auf eins gesetzt und was passiert mit den 
restlichen Bits? Was genau bedeutet "<<" und "|"?
Gast
Hi

die restlichen Bits auf 0.

x<<n kommt von C und bedeutet schiebe x um n Bitstellen nach links 
(entspricht eines Multiplikation mit 2^n)

| kommt von C und steht für eine bitweise logische Oderverknüpfung der beiden 
Argumente.

Matthias

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.