C#: Daten über RS232 einlesen: Ascii Problem

OP #2941589
Lesenswert?

Hallo,

Ich habe hier einen µC, PIC18F4550 (MPLAB+ CCS), über die serielle 
Schnittstelle an meinem PC angeschlossen. Dieser sendet alle paar 
Sekunden sechs Int8-Werte.
So etwa:
1
    
2
       fputc(a,PC);
3
       fputc(value1,PC);
4
       fputc(b,PC);
5
       fputc(value2,PC);
6
       fputc(c,PC);
7
       fputc(v_raw,PC);

Im Terminalprogramm wird dies auch passend angezeigt (siehe Screenshot).

Meine Konsolenapplikation in C# gibt mir allerdings nur die Asciizeichen 
aus (siehe Screenshot).

Hier ein Teil meines Codes:
1
p.ReceivedBytesThreshold = 6;
1
            static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
2
            {
3

4
                            a = Convert.ToString((sender as SerialPort).ReadExisting());
5
                            Console.WriteLine(a);
6
            }


Hat jemand eine Idee wie ich den String in einzelne Variablen aufteile 
und wieder in Integer-Werte konvertiere?
Um den String aufzuteilen hab ich bereits Split String probiert. 
Allerdings teilt er mir die sechs Asciizeichen vom String nicht exakt 
Zeichen für Zeichen auf.

danke,
mfg alex
Angehängte Dateien:
Persönliche Seite #2941633
Lesenswert?

Alexander U. schrieb:
> Im Terminalprogramm wird dies auch passend angezeigt (siehe Screenshot).

Das ist kein Terminalprogramm, sondern ein Schnittstellentest- und 
Analyseprogramm, das bei Dir so konfiguriert ist, daß es jedes 
empfangene Byte als Dezimalwert ausgibt.

Dein Konsolenprogramm gibt jedes empfangene Byte als Zeichen aus, und 
das Resultat ist daher auch vollkommen korrekt.

Wenn Du möchtest, daß die Ausgabe so aussieht wie die des 
Schnittstellentest- und Analsyeprogrammes, dann musst Du jedes 
empfangene Byte als Zahl behandeln und als Dezimalzahl ausgeben, und 
Leerzeichen dazwischen.

Da ich Deine Programmiersprache (irgendein .Net-Dialekt) nicht kenne und 
nutze, kann ich dir nicht genau sagen, welche Funktion Du statt 
ConvertToString verwenden musst.
Gast #2941650
Lesenswert?

a = Convert.ToString((sender as SerialPort).ReadExisting());

warum abeites du auch mit strings. Wenn du bytes sendest, dann musst du 
auch bytes empfangen (und dmait gleich das Problem der Zeihchenkodierung 
umgehen!).

ReadByte ist das was du suchst.

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