MfG
Stefan
Warum wird das bei einem "Interrupt-Register" unterschiedlich gehandhabt? Hast Du eine Referenz im Datenblatt, wo ich das nachlesen könnte?
Meiner Meinung passiert folgendes: Wir nehmen an, dass in dem Register BIT0 = 0 und BIT1 = 1 bereits gesetzt sind, nun kommt die besagte Codezeile. (1<<TOV1) erzeugt eine Bitmaske, in der nur BIT0 1 ist. Nun wird dieses Byte mit dem Register ODER verknüpft und BIT0 des Register (=0) ODER 1 = 1, dass Bit0 wird also gesetzt. BIT1 des Registers (=1) wird mit 0 ODER verknüpft und bleibt gesetzt. Wäre es ursprünglich Null gewesen, wäre es jetzt immer noch null. Das ist zumindest mein Verständnis, wie man einzelne Bits in C setzen kann, ohne andere Bits zu beeinflussen. Zum Löschen eines einzelnen Bits wird man analog invertieren (die Bitmaske) und UND verknüpfen.
Bitte erklär mir den Unterschied bei Interrupt Flag Registern.
Cheers,
Christian
Ok, ich les da grad was auf AVR freaks und in der AVRlibc Hilfe. Das REgister wird bei ner ODER Verknüpfung erst gelesen, dann verglichen, und dann wieder geschrieben. Damit werden dan BIT0 und BIT1 gesetzt. Das ist natürlich Schmarrn...JEtzt muss ich nur noch rausfinden, was TIFR = _BV(TOV0) übersetzt heißt...
Ok, TIFR = _BV(TOV0) heißt wohl einfach soviel wie TIFR = (1<<TOV0). Ich probier das gleich mal aus. Scheint ein häufiger Fehler zu sein, in manchen Tutorials ist es auch falsch drin (also mittels ODER Verknüpfung)...
Tausend Dank für den Hinweis Stefan!
Cheers,
Christian
Lesezeichen