www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hex-Nibble in short int umwandeln (8051)


Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgende Funktion
void outHexByte(unsigned char ch)
{   
  outNibble(ch / 16);  // shift um 4 Stellen nach rechts
  outNibble(ch); 
}

mit der ich aus einem HEX-Nibbel ein HexByte zusammensetze.

Wenn ich aus den Nibbeln ein HexWord zur Ausgabe eines "short int" 
machen will, könnte ich das doch mit der CAST-Funktion machen:
void outHexWord(unsigned char ch)
{
  short int lo, hi, word;
 
  lo = (short int) outNibble(ch / 16);  // shift um 4 Stellen
  hi = (short int) outNibble(ch);
        word = lo + hi;
}

Das funktioniert nicht. Der Comp. (Keil µvision) macht Probleme wegen 
Typenverträglichkeit. Wie funktioniert das?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
???

Was willst du tun und was wird angemeckert?

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Funktion outNibble()
 void outNibble(unsigned char ch)
{
  if ((ch & 0x0f) < 10)
  {
    outChar((ch & 0x0f) + '0');
  }
  else outChar((ch & 0x0f) + '7');
}

aus der ich wie oben beschrieben ein outHexByte() mache. Jetzt möchte 
ich aus outNibble() ein outHexWord() zur Ausgabe eines "short int" 
machen.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du willst also aus einem short-int (16bit) eine ausgabe in form eine 
asci-strings machen?

Wie wäre es mt itoa() ?

Oder soll die Ausgabe als hex-Zahl erfolgen?

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich möchte aus einem ASCII-Sting in Hex ein short int machen! (Ich 
sollte mich echt mal ein besser ausdrücken).

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich beispielsweise 0x2F übergebe sollte 47d (8-Bit) rauskommen.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nein, ich möchte aus einem ASCII-Sting in Hex ein short int machen! (Ich
>sollte mich echt mal ein besser ausdrücken).

Also sowas hast du:
string  '3E43'
und daraus soll eine 0x3E43 in einer int-Var stehen?


Das ist aber genau andersrum als deine bisherigen Erklärungen

Autor: doublex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich outHexWord(0x2F) aufrufe sollte nach meinem Verständnis 
(welches noch nicht weit reicht) 47 (dezimal rauskommen), da die 
Wortbreite des 8051 8 Bit beträgt.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn ich outHexWord(0x2F) aufrufe sollte nach meinem Verständnis
>(welches noch nicht weit reicht) 47 (dezimal rauskommen), da die
>Wortbreite des 8051 8 Bit beträgt.

DU verstehst es nict. 0x27 und 47 ist dieselbe Zahl! Nur durch 
unterschiedliche Basen^(*) dargestellt! Da braucht erstmal nix 
umgerechnet werden.
Deshalb passsen ja in 8bit auch nur so dezimal krumme Werte von 0..255 
rein. Hexadezimal, also zur Basis 16 dargestellt, ergibt das die 
"gerade" Zahl von 0..0xFF.

Anders sieht es aus, wenn du den Inhalt des 8bit-Registers (oder einer 
8bit Variable) auf einem Display ausgeben willst. Dann musst du das in 
einen String umwandeln.

Davon hast du aber nichts erwähnt, obwohl das das vermuten lässt:
outChar((ch & 0x0f) + '0');
                      ^^^^


(*)
Das ist dasselbe, als ob ich sage, der Monitor kostet entweder 100Euro, 
oder 200DM. Das ist genau dasselbe, nur durch unterschiedliche Basen 
(hier: Währungen) dargestellt.

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.