Guten Tag. Gehe grad das Assembler Tutorial durch und im Bereich LCD kommen plötzlich neue "Teile" Hier bei handelt es sich einmal um $42 ($Nummer), wo ich davon ausgehe dass das "$" mit "0x" gleich zu setzen ist. Wo ich aber nichts zu gefunden habe, oder mit zusammen reimen konnte ist "1<<4". Was bedeutet dieses "<<"?
Muss dazu das Register bereits mit 0x01 geladen sein, oder hat man auch bei 0x00 ein 0b00010000? Wenn man ein 0x03 hat, hat man dann nach 1<<4 ein 0b00110000?
wenn man schreibt R0 = 1<<4 dann ist egal, was in R0 drin war. 1<<4 ist ja eine Konstante.
Also ist die 1 sozusagen eine Hex und die 4 macht "sozusagen" 4mal rol. Sprich um 0b00110000 zu erhalten würde man 3<<4 eingeben?
Wenn du dir das mal näher angucken willst kannst du auch gut hier gucken: http://www.mikrocontroller.net/articles/Bitmanipulation
Hi >Also ist die 1 sozusagen eine Hex und die 4 macht "sozusagen" 4mal rol. Nein vier 'shl'. >Sprich um 0b00110000 zu erhalten würde man 3<<4 eingeben? Ja. MfG Spess
Michael Dierken schrieb: > Muss dazu das Register bereits mit 0x01 geladen sein, oder hat man auch > bei 0x00 ein 0b00010000? > > Wenn man ein 0x03 hat, hat man dann nach 1<<4 ein 0b00110000? Nein, Du legst damit eine Konstasnte fest, in der Bit 4 gesetzt ist und alle anderen Bits gelöscht sind. Diese Konstante kannst Du - zuweisen (ldi) - verodern (ori, sbr) - verunden (andi, cbr mit Komplement) Die Schreibweise 1<<4 macht erst richtig Sinn, wenn man die Bitnamen benutzt, wie sie z.B. bei den I/O-Registern (Steuerungsregister der internen Peripheriemodule) verwendet werden, z.B.: ldi wl,(1<<refs1)|(1<<refs0)|(1<<adlar) sts admux,wl ;ADC linksbündig mit interner Referenz auf ADC0 Weitere Infos erhältst Du in der Hilfe zum AVR-Studio unter AVR-Assembler, Direktiven. ...
In dem Link sind wieder Befehle welche ich nciht verstehe/kenne: TIMSK TOIE1 UCSR0B RXCIE0 Was bedeuten diese Werte/Befehle? Die Werde da nirgends definiert/erklärt ... Wat .. ADC will ich glaube ich erst noch ein wenig warten bis ich weiter im Tutorial bin ^^...
Doch, im Datenblatt... Das sind die Namen der I/O-Register. ...
Hi >Was bedeuten diese Werte/Befehle? Die Werde da nirgends >definiert/erklärt ... Datenblatt. MfG Spess
das sind keine Befehle, sondern Registernamen...->Datenblatt
1<<4 bedeutet ja, dass du die ->1<- binär um 4 nach links shiftest. Würdest du 0<<4 schreiben, dann bekämst du immer noch 0 raus. Du kannst dir folgendes (bezüglich positiver Ganzzahlen) merken. binär dezimal 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 Schau mal, was passiert, wenn du eine Zahl nimmst und shiftest. Nehmen wir mal 1 und shiften sie um 1 nach links, dann kommen wir auf die 2. Warum? Die 1 wird ja durch 0001 dargestellt, jetzt nehmen wir das und shiften um 1 nach links und kommen auf 0010 (es wird von rechts ja mit Nullen aufgefüllt). 0010 entspricht aber der 2. Wenn man dieses Spielchen weiterführt, so bekommt man heraus, dass man ganz unkompliziert damit das "Multiplizieren mit 2" lösen kann. 1<<3 == 0001<<3 == 0010<<2 == 2<<2 2<<2 == 0010<<2 == 0100<<1 == 4<<1 4<<1 == 0100<<1 == 1000<<0 == 8<<0 Also mit anderen Worten 1<<n == 2^n (also 2 hoch n) Und allgemeiner x<<n == x * 2^n Sei allerdings vorsichtig mit Dingen, die geschehen können. Solches betrifft zum Beispiel zu großes Shiften. Wenn du von 4 Bit ausgehst, also xxxx zur Verfügung hast, dann darfst du nicht 1<<4 schreiben, denn das wäre 0001->0010->0100->1000->0000. Also nicht das gewünschte Ergebnis. Auch musst du vorsichtig sein, wenn du eine Zahl im Zweierkomplement darstellst, hier kommt dem LSB nämlich eine besondere Bedeutung zu. Das Rechts-Shiften kann man im weiteren nutzen um das Teilen durch zwei Effizient umzusetzen, allerdings ist hier noch mehr Vorsicht geboten, denn 3>>1 gibt 1 und nicht 1,5 zurück... Außerdem kommt hier bei der Darstellung im Zweikomplement hinzu, dass du zwischen logischem und arithmetischem Shiften unterscheiden musst. Das hast du beim Linksshift allerdings nicht. LG
Jojo .. War eig. auch nur dazu da dass ich verstehe was da geschrieben ist in dem Code im Toturial.
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.