www.mikrocontroller.net

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


Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
void outNibble(unsigned char ch)
{
  if ((ch & 0x0f) < 10)
  {
    outChar((ch & 0x0f) + '0');
  }
  else outChar((ch & 0x0f) + '7');
}

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:
void outHexByte(unsigned char ch)
{
   
   outNibble(ch << 10); //Shift eines Nibbles um 4 Stellen nach links
         
}

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.

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal Murks.

Wenn ich
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
outNibble(ch * 16);
 sein. Wenn ich jetzt compiliere und debugge wird ein '0' gesendet. Ich 
muss das High-Nibble also nur noch irgendwie speichern.

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.