Oft (auch hier im Tutorial) findet man zum Initialisieren von Registern bzw. Ports folgende Befehlssequenz: LDI R16, 1<<TOIE0 OUT TIMSK, R16 Mein Verständnis ist, dass in der ersten Zeile das Register R16 mit dem Wert 0b00000001 geladen wird (wenn man mal von einem ATMEGA8 ausgeht). In der zweiten Zeile wird dieser Wert dann ins TIMSK geschrieben und TOIE0 gesetzt. Alle anderen Bits im TIMSK werden aber gelöscht was vielleicht gar nicht gewünscht ist. Richtig ist doch die Sequenz: IN R16, TIMSK ORI R16, 0b00000001 OUT TIMSK, R16 Oder habe ich da was falsch verstanden…?
@Danilo >TOIE0 gesetzt. Alle anderen Bits im TIMSK werden aber gelöscht was >vielleicht gar nicht gewünscht ist. Du siehs das vollkommen richtig. MfG Falk
Im Prinzip sind Deine Annahmen korrekt. Wenn Du unten das "ORI R16, 0b00000001" durch "ORI R16, (1 << TOIE0)" ersetzt, ist es auch noch lesbarer.
Moin, vorausgesetzt TOIE0 liegt auf Bit 0 ist deine Überlegung richtig. Das mit dem Schieben ist aber in sofern praktisch (und auch besser) weil der Code besser lesbar bleibt (man sieht, welches Bit gesetzt wird) und auc heinfacher auf andere Controller zu übertragen ist. Häufig wird die erste Befehlssequenc zum initalisieren nach einem Reset verwendet und dann ist es sogar gewünscht alle Bits auf einen festgelegten zustand zu setzten. Oder man möchte gezielt alles anderen auf Null haben. Wenn man nur ein einzelnes Bit ändern will, dann ist deine Überlegung schon richtig. Allerdings würde ich bei einem Bit direkt den sbi befehl verwenden.
@Mike: Dafür hast Du es aber schön ausführlich geschrieben...;-) > würde ich bei einem Bit direkt den sbi befehl verwenden. Das TIMSK liegt aber afaik bei keinem AVR im bitadressierbaren Bereich. Das geht dann nicht mit sbi. sbi kann nur die I/O-Register bis einschl. Adresse 0x1F.
Ich danke allen. Vor allem der Tip von johnny.m mit dem ORI R16, (1<<TOIE0) hat mir weitergeholfen.
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.