Timer OCF0 Flag zurücksetzen

OP #4646501
Lesenswert?
• ▲
▼
Hallo,

ich versuche jetzt mit einer Aufgaben-Lösung klar zu kommen, die mir 
nicht ganz logisch erscheint. Es geht um Signal Erzeugung mit Timer0 in 
CTC Mode mit Atmega AVR.

Die Lösung ist als jpg Bild angehängt. Was mir dabei nicht klar ist, 
warum wird OCF0-Flag durch 1 setzen gelöscht?

wenn als erstes die Warteschleife durchgeht:

while(!(TIFR&(1<<OCF0))); wird sie ja schon abgebrochen wenn OCF0=1.

danach kommt aber die Zeile: TIFR = (1 << OCF0);

wozu, wenn der Flag schon sowieso 1 ist?

sollte es nicht ehe heißen: TIFR &= ~(1 << OCF0);// Flag 0 setzen?

wo liegt das Denkfehler bei mir?

würde mich sehr über ein Tipp freuen.
Angehängte Dateien:
#4646519
Lesenswert?
• ▲
▼
Alex S. schrieb:
> warum wird OCF0-Flag durch 1 setzen gelöscht?

"OCF0A is cleared by hardware when executing the corresponding interrupt
handling vector. Alternatively, OCF0B is cleared by writing a logic one 
to the flag."
1
while((TIFR&(1<<OCF0))==0);

Das Programm bleibt solange an dieser Stelle bis das OCF0-Flag gesetzt 
wurde. Ist dies der Fall, wird ein Pin an PORTC getoggelt, das Flag 
zurückgesetzt und das ganze wiederholt.
Vermutlich wird in einem bestimmten Intervall eine LED 
ein-/ausgeschaltet.

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