Variable in Bascom zerlegen

Gast #1604603
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?
#1604613
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.

...
Gast #1604623
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
#1604644
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.

...
#1604652
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren