Forum: Mikrocontroller und Digitale Elektronik Wie am besten 2x8bit in 16bit und danach in Dezimal umwandeln mit Bascom?


von Gregor (Gast)


Lesenswert?

Hallo,

ich bekomme über uart zwei mal 8bit, also zwei bytes zugesendet.

Daraus muss ich ein 16 bit byte herstellen. das geht ja indem man die 
binären zahlen von den zwei bytes zusammenzählt, also einfach 
hintereinander schreibt.

Wie mache ich dann aus den 16 bits eine Dezimalzahl?

Also theoretisch weis ichs ja, aber ich muss das in Bascom 
programmieren.

Kann mir da jemand ein paar tips geben?

Gibt es in Bascom einen Befehl, mit dem das umrechnen funktioniert?

Danke

Gregor

von Peter D. (peda)


Lesenswert?

Gregor wrote:

> Daraus muss ich ein 16 bit byte herstellen. das geht ja indem man die
> binären zahlen von den zwei bytes zusammenzählt, also einfach
> hintereinander schreibt.

Was soll das Hintereinanderschreiben bewirken?
Garnichts.
Du mußt eine Operation durchführen:

wert = highbyte * 256 + lowbyte



> Wie mache ich dann aus den 16 bits eine Dezimalzahl?

Garnicht, Zahlen werden CPU-intern immer binär gespeichert.

Du mußt sie einfach nur ausgeben, dabei erfolgt automatisch die 
Umwandlung.


Peter

von Gregor (Gast)


Lesenswert?

Hallo Peter,

entschuldige ich bin noch Anfänger und verstehe das noch nicht wirklich.

Ich habe mir folgendes gedacht:

ich bekomme zb. 2 bytes (aus einem String) zugeschickt: 38 und 34

Die sind ja in Binär geschrieben: 00100110 und 00100010

Und wenn ich die zwei hintereinanderschreibe dann folgt 
0010011000100010.

Dies wiederum in Dezimal lautet:9762

Und genau dass muss ich irgendwie in Bascom realisieren.

von Thomas (kosmos)


Lesenswert?

8 + 8 bits =  9 bits
8 x 8 bits = 16 bits

2x 8 bits zu übertragen brauchst du nur wenn du das ganze 
auseinanderhalten willst ansonsten addierst du das ganze in dem Fall 
reichen sogar 7 bit aus.

00100110
00100010
---------
01001000

von Peter D. (peda)


Lesenswert?

Wenn es ASCII-Zeichen sind, dann mußt Du erstmal '0' abziehen, um den 
Zahlenwert zu erhalten und dann als Zehnerpotenzen zusammenführen:

wert = (Zehner - '0') * 10 + Einer - '0'


Peter

von HildeK (Gast)


Lesenswert?

>ich bekomme zb. 2 bytes (aus einem String) zugeschickt: 38 und 34
>Die sind ja in Binär geschrieben: 00100110 und 00100010
>Und wenn ich die zwei hintereinanderschreibe dann folgt
>0010011000100010.
>Dies wiederum in Dezimal lautet:9762
>Und genau dass muss ich irgendwie in Bascom realisieren.

Mach genau das, was Peter Danneger geschrieben hat:

38*256 + 34 = 9762
Ich verstand dich so, dass du genau dieses Ergebnis haben willst.

von John S. (linux_80)


Lesenswert?

Wenn man schon Bascom hat, sollte man doch auch Makeint verwenden ;-)
zB.
1
Dim I As Integer
2
I = Makeint(uartbyte1 , uartbyte2)
man muss nur wissen welches Byte das 1. und welches 2. ist.
Dann kann man mit I weitermachen.

von Gregor (Gast)


Lesenswert?

Danke Leute,

ihr seit die besten, stand ziemlich auf der Leitung ;o)

Gregor

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.