Byto to ASCII für Usart

OP #1413634
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
#1413640
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.
#1413648
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.
OP #1413653
Lesenswert?

Also, folgenden Code fürs Usart habe ich:
1
void write_usart(unsigned char usart_data)
2
{  while(!U2STAbits.TRMT);        // TXREG leer ???
3
  U2TXREG  = usart_data ;
4
}
5

6
void usart_puts(const char *s)        // schreibt textstring auf usart
7
{  while(*s)  
8
  {  write_usart(*s++);
9
  }
10
}


Wenn ich usart_puts("\x54") nutze, bekomme ich "T".
Wenn ich usart_puts(0x54) nutze, bekomme ich "".
#1413656
Lesenswert?

Tio T. schrieb:
> Also, folgenden Code fürs Usart habe ich:
>
>
1
void write_usart(unsigned char usart_data)
2
> {  while(!U2STAbits.TRMT);        // TXREG leer ???
3
>   U2TXREG  = usart_data ;
4
> }
5
> 
6
> void usart_puts(const char *s)        // schreibt textstring auf usart
7
> {  while(*s)
8
>   {  write_usart(*s++);
9
>   }
10
> }
11
>
>
>
> 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!
Gast #1413686
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

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