mikrocontroller.net

Forum: Compiler & IDEs ASCI zeichen werden am Hyperterminal angezeigt


Autor: Zeroeightfifteen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Immer wenn ich zum PC hin Daten sende dann zeigt dieser mir nur die ASCI 
zeichen an.

Ich will aber die Werte der Bytes in Zahlen anzeigen lassen.
unsigned char Tasterstellung = 3;
char buffer[32];
itoa( Tasterstellung , buffer, 10);

uart_putc((unsigned char)buffer ); 

funktioniert das nicht so? wenn ich statt die 32 etwas anderes rein 
schreibe dann empfange ich andere zeichen.

Autor: Krachmanikov (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du gibst den Inhalt eines Zeigers auf ein Zeichenfeld aus.
Da kann nix Gescheites rauskommen!
Probier doch mal:
char* p = &buffer[0];
while (*p++) uart_putc(*p);

  

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

Bewertung
0 lesenswert
nicht lesenswert
Zeroeightfifteen wrote:
> Hallo
> Immer wenn ich zum PC hin Daten sende dann zeigt dieser mir nur die ASCI
> zeichen an.
>
> Ich will aber die Werte der Bytes in Zahlen anzeigen lassen.
>
>
> unsigned char Tasterstellung = 3;
> char buffer[32];
> itoa( Tasterstellung , buffer, 10);
> 
> uart_putc((unsigned char)buffer ); 
>
> funktioniert das nicht so?

Doch.

Aber der cast hätte dich stutzig machen sollen.
Die Funktion uart_putc erwartet ein einzelnes
Zeichen, also einen einzelnen char.
Du hast aber keinen einzelnen char, du hast ein Array
davon und in diesem Array ist ein String gespeichert.
Das weis aber uart_putc nicht. Aber die Funktion uart_puts()
weis das und behandelt den String auch entsprechend.

Falls du keine Funktion uart_puts hast, kannst du ganz
leicht selbst eine bauen:
void uart_puts( char* Buffer )
{
  while( *Buffer )
    uart_putc( *Buffer++ );
}

uart_puts geht den String Zeichen für Zeichen durch und
schickt jedes einzelne Zeichen über uart_putc weg. Beendet
wird diese Schleife, sobald uart_puts auf ein '\0' Zeichen
trifft, dass in C das Stringende markiert.

Obiges ist die Experten Version. Eine entschärfte Newbie-Version
würde so aussehen:
void uart_puts( char* Buffer )
{
  char c;
  int i = 0;

  c = Buffer[i];
  while( c != '\0' ) {
    uart_putc( c );
    i++;
    c = Buffer[i];
  }
}

Autor: Zeroeightfifteen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so eine uart_puts routine habe ich schon.
wenn ich aber
uart_puts((unsigned char)buffer ); 
 schreibe, dann bekomme ich dies "øÞÞÞ" am PC ausgegeben.

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

Bewertung
0 lesenswert
nicht lesenswert
Zeroeightfifteen wrote:
> so eine uart_puts routine habe ich schon.
> wenn ich aber
uart_puts((unsigned char)buffer ); 
 schreibe, dann
> bekomme ich dies "øÞÞÞ" am PC ausgegeben.

Sagte ich nicht, dass dich der cast hätte stutzig machen sollen.

Lass ihn weg!
Du brauchst ihn nicht und in diesem konkreten Fall ist er auch
noch grundfalsch!

Ein cast ist eine Waffe und man sollte genau wissen was man
tut und vor allen Dingen warum man es tut.
  uart_puts(buffer ); 

  

Autor: Zeroeightfifteen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe nun funktionierts.

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.