Forum: Mikrocontroller und Digitale Elektronik High und Low Byte


von andi (Gast)


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

von Michael G. (linuxgeek) Benutzerseite


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

von Hannes L. (hannes)


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

...

von Dominic R. (dominic)


Lesenswert?

> uint16t two_bytes |= (1 << 16);

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

Gruß,

Dominic

von andi (Gast)


Lesenswert?

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

von andi (Gast)


Lesenswert?

Währe dann das highbyte 48 und das lowbyte 0 ?

von Gast (Gast)


Lesenswert?

ja, stimmt

von andi (Gast)


Lesenswert?

Und wie beckomme ich das msb mit aif 1 ?

von andi (Gast)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


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

von eProfi (Gast)


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.

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.