Forum: Mikrocontroller und Digitale Elektronik wie bit ändern in nicht-IO register?


von fksystems (Gast)


Lesenswert?

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?

von Jörg Wunsch (Gast)


Lesenswert?

MCUCR ist ein IO-Register...

Anyway, die generische Lösung ist: IO-Register einlesen, Bit setzen,
IO-Register rückschreiben.

von fksystems (Gast)


Lesenswert?

komisch. aber warum sagt bei

sbi MCUCR, 5

dann der assembler/kompiler "error: illegal argument type or count" ?

von mmerten (Gast)


Lesenswert?

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 :-)

von fksystems (Gast)


Lesenswert?

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?

von Frank Linde (Gast)


Lesenswert?

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

von Frank Linde (Gast)


Lesenswert?

...

SBI wirkt auf die ersten 32 I/O-Register, SBR dagegen auf die oberen 16
Allzweckregister.

Gruß, Frank

von Jörg Wunsch (Gast)


Lesenswert?

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.)

von Frank Linde (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.