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
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
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.
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
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
>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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.