Forum: Mikrocontroller und Digitale Elektronik << Zeichen, Bedeutung


von Fert (Gast)


Lesenswert?

Hallo

ich hab die Erklärung schon mal irgendwo gesehen, finds aber net
mehr... was bedeutet z.B. die Zeile
        ldi temp, (1<<URSEL)|(3<<UCSZ0)

?

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

'<<': Linksshift
'>>': Rechtsshift

von Hannes L. (hannes)


Lesenswert?

Schau mal in die Hilfe des AVR-Studios.
(Help, Tools, AVR-Assembler2, Operatoren... oder so ähnlich)

Unterem Strich machst du durch Linksschieben der 1 um den Wert des
genannten Bits (0..7) die entsprechende Zweierpotenz (aus 0 wird 1, aus
7 wird 128), die du brauchst um das entsprechende Bit in einem Register
zu setzen (Bitmaske, Wert 0..255).

Noch mehr vereinfacht betrachtet:
Mit ldi temp,1<<xy setzt du das Bit xy in Temp. Wenn du mehrere Bits
setzen willst, dann musst du die entsprechenden Terme OR-verknüpfen.
Das macht der Operator '|', dessen Erklärung auch in der Hilfe zum
AVR-Assembler zu finden ist. Und damit nur die kompletten Terme verORt
werden, müssen die Terme in Klammern gefasst werden.

Es ist wie Mathematik in der Unterstufe, nur eben binär...

Bit- & Bytebruch...
...HanneS...

von Stefan Sczekalla (Gast)


Lesenswert?

Hallo Fert,

um der Ausführung von HanneS noch etwas hinzuzufügen:

... mit (1<<URSEL) kannst Du zwar das URSEL Bit setzen, Du kannst aber
keine "0" hineinschieben um das URSEL Bit zu löschen.

Grüße,

Stefan

von Hannes L. (hannes)


Lesenswert?

Richtig...

Aber bei LDI sind alle nicht gesetzten Bits sowiso gelöscht. Bei ORI
ist das schon etwas Anderes.

Das URSEL-Bit ist ja eigentlich nur eine Art Umschalter, da die Adresse
doppelt vergeben ist. Bei nicht gesetztem URSEL-Bit wird das obere Byte
des Baudratenregisters angesprochen, bei gesetztem URSEL landen die
Daten (die restlichen Bits des Bytes) im Steuerregister.

Ich hoffe, nun ist die Verwirrung komplett... ;-)

...

von Winni (Gast)


Lesenswert?

also bedeutet

(1<<URSEL) = 1000 0000 , da URSEL=7 also das Bit 7 (laut m8515.def)



(3<<UCSZ0) = ??
UCSZ0 ist eine 1 (laut m8515.def)

aber was sagt die 3 ?

von Hannes L. (hannes)


Lesenswert?

> aber was sagt die 3 ?

Dass du eine '3' (0b00000011) um den Wert von 'UCSZ0' nach links
schiebst, also zwei Bits (UCSZ1 und UCSZ0) setzt. Aber solche
Konstrukte verwende ich auch nicht gerne.

...

von Fert (Gast)


Lesenswert?

ok, danke, ich habs jetzt verstanden
warum nur so kompliziert...

von Hannes L. (hannes)


Lesenswert?

> warum nur so kompliziert...

Damit man beim Lesen des Quelltextes nicht im Datenblatt nachschaun
muss, welche 'Schalter' nun gesetzt werden.
1
LDI temp,1<<adlar
2
out admux,temp
sagt nunmal bedeutend mehr aus, als das setzen kryptischer Zahlen, egal
ob diese nun binär, hexadezimal, oktal oder dezimal angegeben werden.

...

von Fert (Gast)


Lesenswert?

aber ohne im include-file nachzuschauen geht doch auch nix....
oder seh ich das falsch?

von Karl H. (kbuchegg)


Lesenswert?

Der Trick besteht eher darin, dass die Bezeichnungen
im Include-File identisch sind mit den Bezeichnungen
im Datenblatt.
D.h. der normale Weg geht ja eher so: Im Datenblatt
des Prozessors nachlesen wie den das Register mit
der gewuenschten Funktionalitaet heist, bzw. wie
das Bit in ihm heist. Dann hast Du 2 Moeglichkeiten:
entweder du benutzt die 1<<adlar Schreibweise, um das
Bit namens 'adlar' zu setzen oder du setzt dich hin
und rechnest dir den binaeren Wert aus, was besonders
bei mehr als 1 Bit in einem Register setzen
  1. fehleranfaellig
  2. nicht selbstdokumentierend
ist.

Bei
     1 << ADMUX

von Hannes L. (hannes)


Lesenswert?

> aber ohne im include-file nachzuschauen geht doch auch nix....
> oder seh ich das falsch?

Das include-File definiert die Bezeichnungen, die auch das Datenblatt
benutzt.

Und wenn man die oft genug gelesen/gehört hat, dann prägen sich diese
Bezeichnungen auch ein. Meist hilft auch das Ausdrucken der Tabelle mit
den I/O-Registern (Register Summary), da stehen alle Namen der
I/O-Register und deren Bits drin, und meist auch noch die Seitenangabe,
wo diese Register genauer erklärt sind. Diese Liste sollte man als
Anfänger grundsätzlich in Papierform neben dem Rechner haben, das
erspart viel Sucherei im zusätzlich geöffnetem Datenblatt-PDF.

...

...

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.