Byto to ASCII für Usart

OP #1413634
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.