Forum: Mikrocontroller und Digitale Elektronik Bascom Daten aufbereiten


von Tobi (Gast)


Lesenswert?

Moin, moin.
Ich bin ein ziemlicher Anfänger und habe eine Frage.
Ich schicke meine Daten über UART.
Der Byte, den ich schicke sieht so aus:
3x
3 - ist immer fest.
x - ist die Variable von 0 bis F

Wenn ich jetzt mein Byte abschicken will, wie verbinde ich die 3 und 
meine Variable?

Print 3x klappt nicht. Kommt nur 3 an.

angenommen x=8
soll 3x abgeschickt werden und 38 ankommen.

Wie löse ich das Problem Syntaxmäßig?
Weiss leider nicht ganz wonach ich googln soll, sonst hätte ich das 
gemacht.

Danke und einen schönen Abend noch

von Karl H. (kbuchegg)


Lesenswert?

30 + 8  -> 38

von fuse (Gast)


Lesenswert?

print "3";x
sollte besser sein

von Sam .. (sam1994)


Lesenswert?

Das funktioniert beides nicht, da der TO x als Hexadezimalzahl möchte.

print '3'
if x > 9
    print 'A' + x - 10
else
    print x

Das ist zwar mehr c-bascom, aber bascom kann ich halt nicht.

von fuse (Gast)


Lesenswert?

Samuel K. schrieb:
> Das funktioniert beides nicht, da der TO x als Hexadezimalzahl möchte.
>
> print '3'
> if x > 9
>     print 'A' + x - 10
> else
>     print x
>
> Das ist zwar mehr c-bascom, aber bascom kann ich halt nicht.

wenn der to mal etwas spezifischer wäre müsste man nicht in die 
glaskugel schauen ;-))
eine variable von 0-F ist für mich nicht zwangsläufig hex!

source says more!

siehe hierzu bascom hilfe zu den topics HEX und HEXVAL

von Tobi (Gast)


Lesenswert?

Danke
ich habe mich nicht ganz richtig ausgedrückt.
Die 38 ist in der Tat die Hex Zahl, wird aber von mir nicht wie 38 
batrachtet, sondern wie
3  und   8
0011   1000
Die "feste" 3 kann auch mal A werden, dann muss ich ja A8 haben.

Per UART bekomme ich immer Zahlen wie
A4 oder 31 oder C2
Daraufhin muss ich entsprechend mit A6 (A bleibt, weil so empfangen 
wurde, und zu 4 muss ich 2 addieren) oder 33 oder C4 antworten.

Ich hoffe, das ist jetzt verständlich genug.

Danke im Voraus

von Sam .. (sam1994)


Lesenswert?

Du brauchst diese 4 Zeilen um eine Zahl zu Hex zu konvertieren. Am 
besten du schreibst dir damit eine PrintAsHex-Funktion.

Samuel K. schrieb:
> if x > 9
>     print 'A' + x - 10
> else
>     print x

Oder möchstest du die beiden Zahlen als Byte senden? Dann musst du die 3 
4x nach links schieben und zu x addieren.

von Tobi (Gast)


Lesenswert?

>Oder möchstest du die beiden Zahlen als Byte senden?
Genau!
Im Prinzip funktioniert das so:
E = empfangen
S = senden

E: A1
S: A3

E: 3A
S: 3B

E: 21
S: 23

ich denke die Logik ist klar. Es wird zur 2.Zahl im Byte immer 2 
addiert.


Was schon mal funktioniert ist Folgendes:

Dim ausgelesener_wert as byte
Dim erste_zahl as byte
Dim zweite_zahl as byte

ausgelesener_wert = &HA1

zweite_zahl = ausgelesener_wert and &B00001111 
(bitweise-und-verknüpfung)
*********************************************
jetzt muss ich ja A und zweite_zahl irgendwie wieder zusammenfügen, 
damit ich A3 wieder als Byte habe.

Kann mir Jemand den Bascom Befehl dafür verraten?
Die 3 4x nach links schieden ist logisch, mir fehlt der Befehl, bzw. die 
Struktur.

Danke

von hollamann (Gast)


Lesenswert?

printbin benutzen
bacom hilfe dazu lesen

von Tobi (Gast)


Lesenswert?

Danke, aber Printbin passt hier nicht ganz.

wie kann ich A 4x nach links schieben (Befehl)?

Danke

von Tobi (Gast)


Lesenswert?

Habe ich gefunden

Shift a, left, 4

Schönen Abend noch

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Würd das so programmieren:

ausgelesener_wert = &HA1

erste_zahl=ausgelesener_wert and &B11110000
zweite_zahl = ausgelesener_wert and &B00001111
zweite_zahl=zweite_zahl+2
zweite_zahl=ausgelesener_wert and &B00001111 'alles über 15 wieder weg!
shift erste_zahl, right, 4 'wird zu 0-15

'Ausgabe z.B.so, am besten Funktion bauen
if zweite_zahl>9 then
   zweite_zahl=zweite_zahl+55
   print chr(zweite_zahl)
else
   print zweite_zahl
endif

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.