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


von Bernd (Gast)


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!

von Matthias L. (Gast)


Lesenswert?


von Jean P. (fubu1000)


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ß

von Bernd (Gast)


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"

von STK500-Besitzer (Gast)


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.

von Bernd (Gast)


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.

von Bernd (Gast)


Lesenswert?

OK, Problem gelöst.
1
void outDecByte( unsigned char ch ) // Ausgabe als Dezimalwert "000" bis "255"
2
{
3
   outNibble(ch / 100); 
4
  ch = (ch % 100);     
5
  outNibble(ch / 10);    
6
  outNibble(ch % 10);
7
}

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
Noch kein Account? Hier anmelden.