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

Gast #1054357
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
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.
Gast #1054360
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);
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.