Ja, Fehler, die man selber gemacht hat, vergißt man nie
Das verodern bei TIFR ist auch recht einfach zu erklären, wenn man sowas in Assembler geproggt hat, also was erwartet man vm Kompiler bei dieser Zeile
Code:
TIFR |= 0b00000100;
Idealerweise sowas
Code:
sbi TIFR,0b00000100
Damit hätten wir in einem Takt schön Bit 2 in TIFR geschrieben, fertig.
Das geht leider nicht...
Bei TIFR(und auch anderen Registern) funktioniert sbi nicht ![Traurig](http://www.roboternetz.de/phpBB2/images/smiles/icon_sad.gif)
das bleibt dem Kompiler(und dem Assemblerprogrammierer) nichts anderes über als das ganze über einen Arbeitsregister zu machen:
Code:
in r16,TIFR
ori r16,0b00000100
out TIFR,r16
auf den ersten Blick kein Problem, aber wie gesagt man löscht sich damit alle anderen Flags.
Ich hoffe etwas Licht in die Sache gebracht zu haben, aber freu Dich, wenn Du einen Interrupt benutzt wird der Flag automatisch gelöscht ![Boo hoo!](https://www.roboternetz.de/phpBB2/images/smiles/eusa_boohoo.gif)
Wenn man auf dem Low Level programmiern will, muß man schon ziemlich im Dattenblatt lesen, das machen leider die wenigsten
Kennst Du schon diesen Artikel ?
Ist sehr lesenswert, auch wenn der mal ganz einfache Fehler behandelt, die Du mit Sicherheit nicht mehr machst ![Zwinkern](http://www.roboternetz.de/phpBB2/images/smiles/icon_wink.gif)
Wir werden aber wirkilich ziemlich OT hier...
Gute Nacht
Gruß Sebastian
PS
Code:
ldi arbeitsregister,(1<<TOV1)
out TIFR,arbeitsregister
ups, das habe ich gerade erst gelesen(ich hab wohl was an den Augen)
genau, sowas dürfte bei TIFR = 0b00000100;
rauskommen ...
Lesezeichen