Ich wollte in dem MCUCR-register ein bit von 0 auf 1 schalten. aber der rest des registers soll so bleiben. eigentlich wäre da ja sbi schön. aber das geht ja nur bei io-registern. wie mache ich das jetzt bei einem nicht io-register?
MCUCR ist ein IO-Register... Anyway, die generische Lösung ist: IO-Register einlesen, Bit setzen, IO-Register rückschreiben.
komisch. aber warum sagt bei sbi MCUCR, 5 dann der assembler/kompiler "error: illegal argument type or count" ?
die sbi/cbi sind auf den I/O Bereich 0x00-0x1F beschränkt. I/O Register in belibieges register R16-R31 laden bit entsprechend manipulieren, zurückschreiben und fertig :-)
hm.. und noch was: was ist eigentlich der unterschied zwischen sbi und sbr. verändern nicht bei ein einzelnes bit. was genau ist da der unterschied?
SBR ist genau die Antwort auf Deine Frage; mit diesem Befehl kannst Du einzelne (oder mehrere) Bits in einem der Register R16-R31 setzen. sbr r16,0b00001000 setzt z.B. Bit 3 in Register 16. Gruß, Frank
... SBI wirkt auf die ersten 32 I/O-Register, SBR dagegen auf die oberen 16 Allzweckregister. Gruß, Frank
Wußte noch gar nicht, daß es auch ein SBR gibt... Aber ganz zufällig hat SBR den selben Opcode wie ORI. ;-) (Dort hätte ich es auch gesucht.)
Tja, die wundersame Befehlsvermehrung bei ATMEL ist immer wieder für Überraschungen gut. ;-) Gruß, Frank
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.