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!
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ß
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"
>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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.