Forum: Mikrocontroller und Digitale Elektronik IO-Funkt. für serielle Schn. (8051)


von doublex (Gast)


Lesenswert?

Moinsen,

ich codiere gerade IO-Funktionen für ein Monitorprogramm. Mit Schritt 2 
bin ich gerade fertig. Es sollte ein Nibble (0 bis 0x0F) in ein 
ASCII-Zeichen gewandelt und auf die serielle ausgegeben werden.

Diese Funktion siht bei mir so aus:
1
void outNibble(unsigned char ch)
2
{
3
  if ((ch & 0x0f) < 10)
4
  {
5
    outChar((ch & 0x0f) + '0');
6
  }
7
  else outChar((ch & 0x0f) + '7');
8
}

Als nächstes soll eine Funktion outHexByte() entworfen werden. Diese 
gibt den Inhalt eines Bytes als zwei ASCII-Zeichen aus, wobei 
outHexByte() die Funktion outNibble() benutzt.

Ich verstehe dabei die Fragestellung nicht. Vielleicht sollen die 
Nibbles aus outNibble so geshiftet werden, dass dabei ein Byte entsteht, 
also in etwa so:
1
void outHexByte(unsigned char ch)
2
{
3
   
4
   outNibble(ch << 10); //Shift eines Nibbles um 4 Stellen nach links
5
         
6
}

Als nächster Schritt müsste das Low-Nibble an das High-Nibble angehängt 
werden. Ich weiß da auf jeden Fall nicht weiter. Wäre gut, wenn mir da 
einer helfen könnte.

von doublex (Gast)


Lesenswert?

Schon mal Murks.

Wenn ich
1
outHexByte(0x1f);
 aufrufe, müsste das untere Nibble 0x0F folgendemaßen nach links 
verschoben werden:

0000 1111 0x0f * 2
   1 1110 0x1E * 2
  11 1100 0x1C * 2
 111 1000 0x78 * 2
1111 0000 0xF0

Es müsste
1
outNibble(ch * 16);
 sein. Wenn ich jetzt compiliere und debugge wird ein '0' gesendet. Ich 
muss das High-Nibble also nur noch irgendwie speichern.

von Skua (Gast)


Lesenswert?

Quark!
Du must das obere nibble nach unten schieben

void outHexByte(unsigned char ch)
{
   outNibble(ch >> 4); //Shift eines Nibbles um 4 Stellen nach rechts
   outNibble(ch);
}

von doublex (Gast)


Lesenswert?

Alles klar!

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.