mikrocontroller.net

Forum: Compiler & IDEs Byto to ASCII für Usart


Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich steh hier grad aufm Schlauch.
Ich möchte per usart z.B. '\x54' ausgeben, was 'T' ergibt. Nun habe ich 
aber die Zahl 54 im Byte stehen. Wie kann ich aus diesem Byte das 
ASCII-Zeichen ausgeben? Ich habe versucht, das Byte mit sprintf() 
umzuwandeln, hat aber keinen erfolg gebracht.

grüße

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

Bewertung
0 lesenswert
nicht lesenswert
Tio T. schrieb:
> Hi,
>
> ich steh hier grad aufm Schlauch.
> Ich möchte per usart z.B. '\x54' ausgeben, was 'T' ergibt. Nun habe ich
> aber die Zahl 54 im Byte stehen.

Du hast vielleicht 0x54 im Byte stehen?

> Wie kann ich aus diesem Byte das
> ASCII-Zeichen ausgeben?

Einfach ausgeben.

> Ich habe versucht, das Byte mit sprintf()
> umzuwandeln,

Du brauchst nichts umzuwandeln. Speise das Byte ganz einfach in deine 
UART-Character Ausgaberoutine ein und alles wird gut.

Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, das einfach-mal-ausgeben habe ich natürlich schon ausprobiert.. ;) 
Klappt leider nicht.

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

Bewertung
0 lesenswert
nicht lesenswert
Tio T. schrieb:
> Na, das einfach-mal-ausgeben habe ich natürlich schon ausprobiert.. ;)
> Klappt leider nicht.

Dann zeige Code.

Wenn du in einem Byte einen Zahlenwert hast, der einem ASCII Zeichen 
entspricht, und du schickst diesen Code an ein Terminal, dann zeigt das 
Terminal das zu diesem Code gehörende Zeichen an.

Da braucht nichts umformatiert oder sonst irgendwie bearbeitet zu 
werden.

Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, folgenden Code fürs Usart habe ich:
void write_usart(unsigned char usart_data)
{  while(!U2STAbits.TRMT);        // TXREG leer ???
  U2TXREG  = usart_data ;
}

void usart_puts(const char *s)        // schreibt textstring auf usart
{  while(*s)  
  {  write_usart(*s++);
  }
}


Wenn ich usart_puts("\x54") nutze, bekomme ich "T".
Wenn ich usart_puts(0x54) nutze, bekomme ich "".

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

Bewertung
0 lesenswert
nicht lesenswert
Tio T. schrieb:
> Also, folgenden Code fürs Usart habe ich:
>
>
void write_usart(unsigned char usart_data)
> {  while(!U2STAbits.TRMT);        // TXREG leer ???
>   U2TXREG  = usart_data ;
> }
> 
> void usart_puts(const char *s)        // schreibt textstring auf usart
> {  while(*s)
>   {  write_usart(*s++);
>   }
> }
> 
>
>
> Wenn ich usart_puts("\x54") nutze, bekomme ich "T".

Das wage ich zu bezweifeln :-)

> Wenn ich usart_puts(0x54) nutze, bekomme ich "".

Aber nur zufällig. Das hätte auch was ganz anderes ergeben können :-)

Und richtig wäre gewesen

  write_usart( 0x54 );


Ich sagte doch: Speise das Byte in deine Character-Ausgaberoutine ein. 
Character, nicht String!

Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kopfklatsch

Klar, ich dachte, dass ich das auch schon versucht hätte, aber ich hatte 
es mit write_usart(54) getestet. Ohje....

Danke!
:-)

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm irgrendwie ist deine Frage nicht ganz eindeutig...

Hast Du den String "\x54" (also 4 Zeichen) oder den Wert "54" (dezimal) 
oder den Hex-Wert "0x54"?

Der hex-Wert und die Datstellung "T" sind synonym, d.h. überall wo "T" 
in einer Datei steht siehst Du in einem HEx-Editor "0x54" und vis-à-vis. 
Daher sollte ein Terminal Programm ein "T" ausgeben, wenn es hex "0x54" 
empfängt. Wenn nicht ist was faul (little/big endian probelm zwischen 
sender/empfänger, baudrate?). Also einfach den Wert per Uart ausgeben. 
Nebenbei, Rs232 überträgt IMHO Big-Endian...

http://de.wikipedia.org/wiki/Ascii#ASCII-Tabelle

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.