Forum: Mikrocontroller und Digitale Elektronik Hilfe beim Zusammenfügen zweier Bytes


von oynix (Gast)


Lesenswert?

Hi,

wie kann ich die beiden Integer d0=12 und d1=34 zu dg=1234 
zusammenfügen?

Das eine ist das Low- das andere das High-Byte.

Danke für die Hilfe!

von Gast (Gast)


Lesenswert?

dg = d1 + (d0*10)

Wie wäre es damit?

von Uwe .. (uwegw)


Lesenswert?

dg=d0*255+d1;
oder
dg=(d0<<8)+d1;

von 1.8T-Passat (Gast)


Lesenswert?

Variable = Low;
Variable += High<<8;

von oynix (Gast)


Lesenswert?

h... also wenn ich dg = d1 + (d0*10) oder dg=d0*255+d1 mit dem 
Taschenrechner berechne, kommt nicht 1234 raus.

von Gast (Gast)


Lesenswert?

h... dann versuchs doch mal mit *100
Ist ja nicht soo schwer.

Was passiert wenn d1=101 ?

von oynix (Gast)


Lesenswert?

ich habe es jetzt mal mit die Variante von  1.8T-Passat  benutzt. Die 
funktioniert auch ganz gut.

Ein Problem habe ich aber noch:

wenn d0 den Maximalwert eines Bytes, also 255 annimmt, kann der Wert von 
dg maximal 255255 betragen.

Ich möchte bei einer Funktion 20 Sekunden warten, übermittle aber 20.000 
Millisekunden. Das ganze Rechne ich in Hexadezimalzahlen um (0x4E20) und 
Übertrage als d0 = 0x4E und als d1 = 0x20. Damit funktioniert noch 
alles.

Möchte ich aber 70 Sekunden warten, ist der Hex-Wert = 0x11170. Das 
verstehe ich nicht ganz, denn eigentlich müsste es ja bis 255255 (dez) 
noch einen 4-stelligen Hex-Code geben.

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Nein!

Großes Missverständnis von Hex zu Dec Umrechnungen...

0xFFFF ist nicht 255255, sondern
0xFFFF (hex) = 65535 (dec)

Das Umwandeln kann sogar Google ("0xFFFF to decimal").


Gruß,
Lasse

von oynix (Gast)


Lesenswert?

stimmt, war ein Fehler. der größte zu übertragende Wert in Millisekunden 
ist also 65535 (dec).

Aber wenn ein Byte bis zu 255 groß sein kann, und ich schiebe zwei von 
denen zusammen, warum ist das dann weniger als 255255?

von holger (Gast)


Lesenswert?

>warum ist das dann weniger als 255255?

Weil du in Mathe nicht aufgepasst hast.

von spess53 (Gast)


Lesenswert?

HI

>Aber wenn ein Byte bis zu 255 groß sein kann, und ich schiebe zwei von
>denen zusammen, warum ist das dann weniger als 255255?

Dann mach das mal in Hex: $FF und $FF gibt $FFFF -> 65535

MfG Spess

von Martin K. (spyro07)


Lesenswert?

die verschiedenen bitkombinationen belaufen sich in einem Register auf 
256. da du 2 davon hast heist das dann 256*256 = 65535

von Walter (Gast)


Lesenswert?

256*256 = 65535 ????

von spess53 (Gast)


Lesenswert?

Hi

>die verschiedenen bitkombinationen belaufen sich in einem Register auf
>256. da du 2 davon hast heist das dann 256*256 = 65535

Nö. 0..255. Aber 255*256+255=65535.

MfG Spess

von Uwe .. (uwegw)


Lesenswert?

Walter schrieb:
> 256*256 = 65535 ????
Nein, 256*256 = 65536.

Es gibt bei 16bit insgesamt 65536 mögliche Bitkombinationen, 
entsprechend den Zahlen von 0 bis 65535.

von DRJ (Gast)


Lesenswert?

0x0000 = 0 (+1)
0x0001 = 1

0x000F = 15 (+1)
0x0010 = 16

0x00FF = 255 (+1)
0x0100 = 256

0x0FFF = 4095 (+1)
0x1000 = 4096

0xFFFF = 65535

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.