Forum: Compiler & IDEs UART wie String empfangen?


von Jabber W. (jabber)


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?

von Sebastian (Gast)


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.

von Sven K. (skasko)


Lesenswert?

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

Gruß
Sven

von Jabber W. (jabber)


Lesenswert?

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

von Sven K. (skasko)


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.

von Karl H. (kbuchegg)


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).

von Jabber W. (jabber)


Lesenswert?

danke schön, habs schon hinbekommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.