Forum: Mikrocontroller und Digitale Elektronik Variable in Bascom zerlegen


von Stefan (Gast)


Lesenswert?

Ich habe die Suche bemüht aber nichts passendes gefunden :-(


Ich Schicke über ein RS232 Wandler ein ASCI Code an mein Atmega8 der wie 
folgt aussieht:

123:132:22:1


es sind immer 4 zahlen die durch ein : voneinander getrennt sind, die 
zahlen sind unterschiedlich groß von 0-9999 sind alles dabei

Speichern tu ich sie in einer  String * 15 Variable

wie kann aber ich nun diese Zahlen Kette in 4 variablen Zerlegen das in 
jeder Variable eine von diesen Zahlenblock drinne steht?

von Hannes L. (hannes)


Lesenswert?

Mit der Instring-Funktion nach ":" suchen und anhand der gefundenen 
Positionen mit der Midstring-Funktion die Fragmente heraustrennen. Dann 
mit der Value-Funktion Zahlen (Integer, Word) daraus machen. Das wird 
aber vermutlich allerhand Flash belegen und Rechenzeit kosten.

...

von Stefan (Gast)


Lesenswert?

mm.. rechenzeit ist schlecht, das programm ist algemein schon aufwendig 
und langsam :-(

somal ich nicht nur eine vond iese zahlenketten habe sondern vielelicth 
auch mal 30,40,50

dann ist es vielleicht besser das ich die zahlen einzeln über die 
schnittstelle schicke als in solsch ein block

von Hannes L. (hannes)


Lesenswert?

Manchmal ist es besser, auf vorgefertigte Bascom-Funktionen zu 
verzichten und das Problem auf Art des ASM-Programmierers zu lösen. Also 
mittels UART-RX-Interrupt einzelne Bytes in einen Buffer (Array) 
einlesen, dabei das letzte (neueste) Zeichen auf Trennzeichen prüfen 
(":", CR) und bei Auftreten des Trennzeichens das bisher Empfangene 
kopieren (und entwerten) und von der Mainloop zur Zahl formen zu lassen.

Interessant wäre vielleicht auch noch, den PC die Zahlen mit 
Führungsnullen senden zu lassen, so dass alle Zahlen die gleiche Anzahl 
Stellen haben. Dann könntest Du vllt. mit Overlay auf die einzelnen 
Abschnitte zugreifen.

...

von Helmut L. (helmi1)


Lesenswert?

Ich kann zwar kein BASCOM

aber hier eine Loesung wie ich sie in 'C' machen wuerde


int  Value[4];
int  n;

// Value auf 0 setzen
for(n=0;n < 4;n++) Value[n] = 0;

// Alle Zeichen des String testen auf Ziffer oder ':'
n = 0;
while (*Str)
{
   if(isdigit(*Str)) Value[n] = Value[n] * 10 + (*Str-'0');
   if(*Str == ':') n++;
   Str++;
   if(n >= 4) break;
}

Deine Werte stehen anschliessend in Value[0],Value[1] ....

Gruss Helmi

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.