www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer1-OCF1-Flag


Autor: Stephan Keiß (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stephan Keiß (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Stepi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 "|"?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbi geht natürlich nicht, da das TIFR oberhalb von 0x1f lokalisiert ist.

ldi temp, (1<<OCF1A)
out TIFR, temp

funktioniert aber.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.