www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik High und Low Byte


Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ?
Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ? Und was ist ein 
MSB, und wie setze ich das auf 1 ?

Bitte um Hilfe

Danke

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andi,

Das High-Byte ist jenes Byte aus Deinem 16-Bit-Wert, das die 8 
hoechstwertigen Bits beinhaltet, das Low-Byte die 8 niederwertigsten. 
Das MSB ist das "most significant bit" also das hoechstwertige Bit in 
dem Wert.

Du bekommst die Werte heraus, indem Du sie maskierst:

uint16t two_bytes = 0x1234;
uint8t  high_byte = two_bytes & 0xff00;
uint8t  low_byte  = two_bytes & 0x00ff;

Um das MSB auf 1 zu setzen:

uint16t two_bytes |= (1 << 16);

Ob das niederwertigste Bit von links oder von rechts beginnt kann auf 
unterschiedlichen Architekturen unterschiedlich sein. Beginnt es links, 
also an der kleinsten Speicheradresse (wie z.B. auf jeder 
Intel-Architektur) spricht man von little endian, andernfalls von 
big-endian-Systemen.


Lieber Gruss,
Michael

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andi wrote:
> Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ?
> Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ?

So, wie Du Deine Zahl in 5 Ziffern (Wertebereich 0 bis 9) zerlegt hast, 
so kannst Du die Zahl auch in zwei Bytes (Wertebereich 0 bis 255) 
zerlegen.

> Und was ist ein
> MSB,

MSB = Most Significant Bit, also höchstwertigstes Bit.

> und wie setze ich das auf 1 ?

Durch VerOdeRn (OR).

>
> Bitte um Hilfe

Naja, das riecht wiedermal nach Hausaufgaben. Der Dumme macht sich 
selbst sachkundig, der Clevere lässt Andere für sich arbeiten indem er 
fragt...

>
> Danke

...

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint16t two_bytes |= (1 << 16);

Das MSB eines 16 bit Wortes wäre 1 << 15 ;)

Gruß,

Dominic

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mache das ganze in Bascom, und brauche 2 werte die ich übertragen 
kann.

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Währe dann das highbyte 48 und das lowbyte 0 ?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, stimmt

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie beckomme ich das msb mit aif 1 ?

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, 48 ist binär 110000. wenn das msb der oberste wert ist, müßte es 
doch 1011000 sein, also 176.......oder ?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominic R. wrote:
>> uint16t two_bytes |= (1 << 16);
>
> Das MSB eines 16 bit Wortes wäre 1 << 15 ;)
>
> Gruß,
>
> Dominic

Ja... Dominic hat recht, verzeihe er mir den Fehler ;) Die 
Stellenwertigkeit des n-ten Bits ist natuerlich 2^(n-1)

Und Andi: So nen bisschen Grundlagen solltest Dir vielleicht anlesen. 
Die Beispiele in C lassen sich natuerlich auf jede andere Sprache 
uebertragen...

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MSB hat zwei Bedeutungen:
 - Most Significant Bit   z.B. bei serieller Datenübertragung
 - Most Significant Byte  z.B. bei der Zahlendarstellung in Rechner

Vermutlich ist gemeint, Du sollst das höchste Bit der Zahl setzen:
                  MSB
                   |
                   v
12288 = 0x3000 = 0b0011000000000000
45056 = 0xb000 = 0b1011000000000000

@Michael
"uint8t  high_byte = two_bytes & 0xff00;"

uint8t  high_byte = (two_bytes & 0xff00) >> 8;
oder gleich
uint8t  high_byte = two_bytes >> 8;

Einfacher ist es, eine Union zu definieren und auf das entsprechende 
Byte direkt zuzugreifen. Das ist allerdings nicht portabel und abhängig 
von der Rechnerarchitektur.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.