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
Idealerweise sowasCode:TIFR |= 0b00000100;
Damit hätten wir in einem Takt schön Bit 2 in TIFR geschrieben, fertig.Code:sbi TIFR,0b00000100
Das geht leider nicht...
Bei TIFR(und auch anderen Registern) funktioniert sbi nicht![]()
das bleibt dem Kompiler(und dem Assemblerprogrammierer) nichts anderes über als das ganze über einen Arbeitsregister zu machen:
auf den ersten Blick kein Problem, aber wie gesagt man löscht sich damit alle anderen Flags.Code:in r16,TIFR ori r16,0b00000100 out TIFR,r16
Ich hoffe etwas Licht in die Sache gebracht zu haben, aber freu Dich, wenn Du einen Interrupt benutzt wird der Flag automatisch gelöscht![]()
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![]()
Wir werden aber wirkilich ziemlich OT hier...
Gute Nacht
Gruß Sebastian
PSups, das habe ich gerade erst gelesen(ich hab wohl was an den Augen)Code:ldi arbeitsregister,(1<<TOV1) out TIFR,arbeitsregister
genau, sowas dürfte bei TIFR = 0b00000100;
rauskommen ...







Zitieren

Lesezeichen