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
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.
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
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.
@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.
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 "|"?
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
sbi geht natürlich nicht, da das TIFR oberhalb von 0x1f lokalisiert ist. ldi temp, (1<<OCF1A) out TIFR, temp funktioniert aber.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.