uart flushing and signed Zahl anzeigen

Gast #1429515
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:
1
while(1) 
2
{ 
3
  utoa( wert, s, 10 ); 
4
  Puts( s );
5
  unsigned char dummy;
6
  while ( UCSRA & (1<<RXC) ) dummy = UDR; //flushing the receiver
7
}

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
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
> 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.
Gast
>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:
1
while(1) 
2
{ 
3
  utoa( wert, s, 10 ); 
4
  Puts( s );
5
  USART_Puts("\r");
6
}

und ist gelöst

danke an alle
viele grüsse

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.