mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ASCII-Wert als Dezimalwert ausgeben


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe hier ein Programm für die serielle Schnittstelle. Ich habe eine 
Funktion

void outNibble(unsigned char ch)
{
  if ((ch & 0x0f) < 10)
  {
    outChar((ch & 0x0f) + '0');
  }
  else outChar((ch & 0x0f) + '7');
}

zur Umwandlung eines Nibbles (0 bis 0x0F) in ein ASCII-Zeichen.

Die Funktion

void outHexByte(unsigned char ch)
{
  outNibble(ch / 16);  // shift um 4 Stellen nach rechts
  outNibble(ch);
}

gibt mir das ASCII-Zeichen in Hex aus. Wenn ich outHexByte(0x2f); 
aufrufe, wird 0x2F gesendet.

Jetzt möchte ich eine Funktion outDecByte () entwerfen, die mir das Byte 
im dreistelligen Dezimalformat ausgibt ("000" bis "255"), nur das klappt 
bis jetzt nicht.

Ich dachte mir die zwei einzelnen Nibbles in zwei Variablen 
zwischenzuspeichern und diese dann zu addieren, also in etwa so


void outDecByte(unsigned char ch)

char temp1, temp2;

temp1 = outNibble(ch / 16);
temp2 = outNibble(ch);

hexbyte = temp1 + temp2;

Dann könnte ich durch eine Division die einzelnen Ziffern der 
Dezimalzahl ermitteln, also in etwa so

0xFE = 254

0xFE / 100 = 2 Rest 54
54/10 = 5 Rest 4

Das Problem ist nur, dass ich den Code nicht hinbekomme. Das System ist 
ein 8051 (Keil µVision). Vielleicht könnt ihr mir weiterhelefen..

Danke!

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

unsigned char Zahl1 , Zahl2 , Zahl3;
Zahl1 = hexByte / 100;
Zahl2 = (hexByte % 100) / 10;
Zahl3 = (hexbyte % 100) - Zahl2 * 10;

und dann noch ASCII  wandeln:

Zahl1 += 0x30;
Zahl2 += 0x30;
Zahl3 += 0x30;

Gruß

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, das will ich ja so machen!!!, aber der Compiler meckert, wenn ich 
die Funktion outNibble() der Variablen temp zuweisen will, also

temp1 = outNibble(ch / 16); //geht schon mal nicht.

Fehlermeldung: "illegal type conversion from/to 'void"

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Fehlermeldung: "illegal type conversion from/to 'void"

Steht doch genau das da, was falsch läuft:
Du hast "outNibble" als void deklariert - müsste aber unsigned char 
sein.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt irgendwas mit der Deklaration ist falsch...

So

void outDecByte( unsigned char ch )
{
  unsigned char temp1, temp2, hexbyte;

  temp1 = outNibble(ch / 16);
  temp1 = outNibble(ch);


}

geht das noch nicht.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Problem gelöst.
void outDecByte( unsigned char ch ) // Ausgabe als Dezimalwert "000" bis "255"
{
   outNibble(ch / 100); 
  ch = (ch % 100);     
  outNibble(ch / 10);    
  outNibble(ch % 10);
}

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.