www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable in Bascom zerlegen


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.