mikrocontroller.net

Forum: Compiler & IDEs uart flushing and signed Zahl anzeigen


Autor: aaroon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Zusammen,

bin jetzt dabei mich in die Welt der Microcontroller einzuarbeiten. Habe 
bis jetzt auch alles soweit.

Aber jetzt ist es doch so weit.

1.Also ich habe ein kleine Programm geschrieben welches mir nur 
Testweise
ein 16-Bit Wert (-65535...65535)senden soll.

Beim druck taste.1 dekrementiert mein Wert
Beim druck taste.2 Inkrementiert mein Wert

Nur merkt ich das mein wert sich zwischen (0...65535) ändert obwohl dass 
ich Es als signed deklariert habe.

Frage:
Wie kann ich auch die negative Zahlen im ASCII gut darstellen?


2. Meine Anzeige im Hterm funktioniert super, nur das ich immer auf den 
selbe stelle die neue Werte schreiben will. Also den alte angezeigt Wert 
muss gewichen werden und der neue angezeigt
dafur habe ich mir diese code gedacht:
while(1) 
{ 
  utoa( wert, s, 10 ); 
  Puts( s );
  unsigned char dummy;
  while ( UCSRA & (1<<RXC) ) dummy = UDR; //flushing the receiver
}

Frage:
wie kann ich meine Werte immer auf den selbe stelle schreiben?
das heisst:
anstatt:                  sonst
65535                     65531
65534
65533
65532
65531
....

uart flushing

Danke im voraus
Gruß
Aaroon

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

Bewertung
0 lesenswert
nicht lesenswert
aaroon schrieb:

> Nur merkt ich das mein wert sich zwischen (0...65535) ändert obwohl dass
> ich Es als signed deklariert habe.

Die Variable


>   utoa( wert, s, 10 );

Und hier lügst du und behauptest wert wäre ein unsigned.
itoa != utoa

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

Bewertung
0 lesenswert
nicht lesenswert
> Also den alte angezeigt Wert
> muss gewichen werden und der neue angezeigt
> dafur habe ich mir diese code gedacht:
> while(1)
> {
>   utoa( wert, s, 10 );
>   Puts( s );
>   unsigned char dummy;
>   while ( UCSRA & (1<<RXC) ) dummy = UDR; //flushing the receiver
> }

Um Text zu positionieren könntest du:
Kein Line-Feed schicken, sondern nur einen Carriage Return. Je nachdem, 
wenn das Terminal richtig eingestellt ist, macht es dann keinen 
Zeilenvorschub, sondern der Cursor wird nur an den Anfang der Zeile 
gestellt.
Du könntest auch die Ausgabe insofern 'rückgängig' machen, indem du mit 
entsprechend vielen Backspace (ASCII Code 0x08) den Cursor um die 
gewünschte Anzahl an Zeichen nach links schiebst.
Du könntest aber auch die VT100 Escape Sequenzen nehmen um den Cursor 
direkt an bestimmte Positionen am Schirm zu schicken. Natürlich nur, 
wenn im HTerm die VT100-Emulation auch eingeschaltet ist.

Aber was auch immer du tust, bedenke dabei immer, dass du einmal 
ausgegebenen Text nur überschreibst. Wenn du einzelne Zeichen nicht 
überschreibst (weil zb der neue Text kürzer ist), dann bleibt vom 
vorhergehenden Text etwas sichtbar.

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

Bewertung
0 lesenswert
nicht lesenswert
Oh und BTW

> ein 16-Bit Wert (-65535...65535)senden soll.

Der Wertebereich für einen signed 16-Bit Wert geht von -32768 bis +32767

Autor: aaroon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und hier lügst du und behauptest wert wäre ein unsigned.
>itoa != utoa

oh!!!
so dumm bin ich
ich habe es übersehen

Danke

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich weiß geht das Gewünschte nicht mit dem HTerm. Musste 
Hyperterminal oder was brauchbareres VT100 kompatibles nehmen.

Autor: aaroon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>2. Meine Anzeige im Hterm funktioniert super, nur das ich immer auf den
>selbe stelle die neue Werte schreiben will. Also den alte angezeigt Wert
>muss gewichen werden und der neue angezeigt
>dafur habe ich mir diese code gedacht:

einfach:
while(1) 
{ 
  utoa( wert, s, 10 ); 
  Puts( s );
  USART_Puts("\r");
}

und ist gelöst

danke an alle
viele grüsse

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.