UART wie String empfangen?

OP #703125
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?
Gast #703129
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.
#703161
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).

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