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
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.
Na, das einfach-mal-ausgeben habe ich natürlich schon ausprobiert.. ;) Klappt leider nicht.
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.
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 "".
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!
kopfklatsch Klar, ich dachte, dass ich das auch schon versucht hätte, aber ich hatte es mit write_usart(54) getestet. Ohje.... Danke! :-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.