IO-Funkt. für serielle Schn. (8051)

Gast #1054357
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.
Gast #1054359
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren