Forum: Mikrocontroller und Digitale Elektronik senden empfangen string


von Dieter (Gast)


Lesenswert?

Hallo Alle zusammen,

Ich benutze die Bascom AVR Version 1.11.6.3 .

Das Problem das ich habe gestaltet sich wie folgt.

Über die serielle Schnittstelle empfängt der AT90S8535 von
einem anderen AT90S8535 am  (Pin 14 (RXD)PD0 ) folgendes    a1b2c3d4  .

Der sendende Mikrokontroller schickt
print "A";a;"B";b;"C";c;"D";d

wobei a b c d Byte Typen sind in denen sich z.B. die Werte
a = 1 , b = 2 , c = 3 , d = 4 befinden.

Könnte aber auch a = 22, b = 1, c = 100, d = 31 sein

Durch den Input Befehl auf dem zweiten Mikrokontroller wurde  z.B. 
A1B2C3D4   als String empfangen .


Meine Frage ist nun :

Wie kann ich den String wieder aufschlüßeln ?

Mit dem      var = MID(var1 ,st [, l] )    ist das wohl nicht
machbar, da mein empfangener String
A1B2C3D4     nicht von konstanter Länge ist.   Es ist möglich,
das der sendende Mikrokontroller z.B.
A10B201C3D43  sendet , und somit ein insgesamt längerer String empfangen 
wird.

Also mein Problem ist , daß ich nicht weiß wie ich an die
veränderlichen Inhalte a b c d des empfangenen Strings gelange.

Das Senden von 4 Byte Typen also nur  5 1 6 2 kann auf der
Empfängerseite als 5 1 6 2 in einen String
der Länge 3  also (0 1 2 3) abgelegt werden. Auf dem Hyperterminal
erscheint dann folgerichtig 5162

Frage :    Ist es möglich die gesendeten Bytes a b c d
           empfangsseitig in Bytes und nicht als String
           zu empfangen ?  Bisherige versuche mit z.B.
           INPUT a INPUT b ....... waren nicht erfolgreich.

Etwas weitergeholfen wäre mir wohl auch schon , wenn ich
wüßte wie man aus einem String

z.B.         A123A12A87A33  das Zeichen  "A"    zählen kann.

Sollte meine Problemschilderung nicht klar sein, so können Sie
mich unter dasch@gmx.de erreichen.

mfg Dieter

von Uwe (Gast)


Lesenswert?

Hi!
Du hast doch eindeutige Trennungen (A...B...C) drinn, du musst nur 
danach suchen. Eine ander Möglichkeit wären eindeutige 
Ende-/Trennzeichen ($0A0D,0..).

Gruss Uwe

von Sebastian Kucharski (Gast)


Lesenswert?

warum überträgst du die 4 wete nicht in einer festen länge z.b?
a = 022, b = 001, c = 100, d = 031 sein

damit hast du 022001100031 und kannst es mit hilfe von
mid$ auslesen.
die andere möglichkeit ist du wandest die werte in binärzahlen und 
erhälst somit pro wert 8  bit. (vorsicht: damit kannst du aber nur 256 
werte übertragen)

so mache ich es auch!

gruß
sebastian

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.