Forum: Mikrocontroller und Digitale Elektronik Was bedeutet << in AVR-ASM?Ein Schift kann es ja nicht sein.


von Freak5 (Gast)


Lesenswert?

Code:
ldi r16, (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
out TWCR, r16

Was bedeutet das eigentlich? Heist dass, dass TWINT, TWSTA usw. in r16
auf 1 gesetzt werden, wenn ja, was bedeuten die "<<" operatoren
genau? Bedeutet | in diesem Fall "Und"?

von A.K. (Gast)


Lesenswert?

Studio - Help - Tools User Guide - Assembler - Expressions

von Jens-Erwin (Gast)


Lesenswert?

ldi r16, (1<<TWINT)|(1<<TWSTA)

das ist ein Shift und zwar so

ich nehme mal als Beispiel:

ldi r16, (1<<PB2) | (1<<PB3)

PB2 ist eine Zahl, nämlich die 2, PB3 ist eine 3
die 1 vor dem << bleibt die 1 also 0b00000001

jetzt heißt 1<<PB2, dass die 1 um 2 Felder nach links verschoben wird,
also
0b00000001 dann 0b00000010, dann 0b00000100

so nun ist also Bit2 "markiert"

jetzt folgt das Bitweise Oderzeichen |

1<<PB3 ist nun 0b00001000 also die 1 um 3 Stellen verschoben

beide Werte mit "oder" verbinden 0b00001000 | 0b00000100
das Ergebnis ist 0b00001100, also beide Bits sind markiert

dieses TWINT z.B. ist auch nur eine Zahl um die dann die 1 nach links
verschoben wird....

von Freak5 (Gast)


Lesenswert?

Ich dachte diese Shiftoperation funktioniert nur in C und in AVR ASM ist
das LSR oder LSL.
Führt der Atmega das jetzt aus, oder macht der Compiler das vorher und
gibt den richtigen Wert an den AVR - Weiter(Code - Optimierung)?

von Simon Küppers (Gast)


Lesenswert?

Letzteres, Diese Operation führt nur der Compiler aus, und dient
lediglich der Übersicht des Sourcecodes.

Wird also nich vom µC ausgeführt

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.