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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.