mikrocontroller.net

Forum: Compiler & IDEs UART wie String empfangen?


Autor: Jabber Wock (jabber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also das UART läuft auf jeden Fall schon mal fehlerfrei. Nur bekomme ich 
nicht ganz die Zeichen die ich haben möchte.
Wenn ich z.B eiene "1" sende am Terminal dann ist UDR = 49 bei "2" ist 
UDR = 50 usw. Ist das der ASCII code? Wenn ja, wie bekomme ich da wieder 
"richtige" Zeichen raus. Ich habe irgendwo gelesen das man bei Ziffern 
nur die NULL abziehen muss. Aber wie soll dann aus 49 eine 1 werden? 
Oder ist das "49\0"

Ich bin verwirrt....
Habt ihr vielleicht einen guten Link dazu oder ne kurze Erklärung?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, die 49 ist nur ein einziges Byte, daher muß sie auch nicht als 
String behandelt werden. Die Zahl 49 und das ASCII-Zeichen "2" sind 
nichts anderes als unterschiedliche Schreibweisen desselben 
8-Bit-Datenwortes.

Autor: Sven K. (skasko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es schnell gehen soll und Du nur einziffrige Zahlen brauchst, ziehe 
einfach 48 ab.
;-))

Gruß
Sven

Autor: Jabber Wock (jabber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok stimmt, daruf bin ich garnicht gekommen. aber wie macht man das 
richtg? Ich habe da nicht zu gefunden. Oder falsch gesucht...

Autor: Sven K. (skasko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, wenn Du nur Ascii senden kannst, kannst Du auch mit der Funktion 
atoi (ascii to int) einen Ascii String umwandeln. Diese Funktion findest 
Du im avr-lib. Such einfach in der Doku nach atoi.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jabber Wock wrote:
> ok stimmt, daruf bin ich garnicht gekommen. aber wie macht man das
> richtg? Ich habe da nicht zu gefunden. Oder falsch gesucht...

Im einfachsten Fall: Einfach 48 (oder besser '0') abziehen

  char c;

  c = UDR;
  c = c - '0';  // ist gleichbedeutend mit c = c - 48;
                // da 48 der ASCII Code von '0' ist.


Wenn in c eines der Zeichen '0', '1', '2' ... '9' empfangen
wurde, dann enthält c nach der Subtraktion die entsprechende
Zahl von 0 bis 9. Wenn in c was anderes empfangen wurde,
zb ein 'a', dann kannst du mit dem Ergebnis der Subtraktion
natürlich nicht so viel anfangen. Studier einfach mal eine
ASCII Tabelle (danach googeln).

Autor: Jabber Wock (jabber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schön, habs schon hinbekommen.

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.