www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nibble-Problem


Autor: Basilius W. (getman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine zweistellige, dezimale Zahl. Die erste Stelle soll in das 
low-Nibble und die zweite Stelle (Zehnerstelle) in das high-Nibble eines 
Bytes gesetzt werden. Hat jemand eine Idee, wie ich das Problem lösen 
kann?

Danke!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch 10 dividieren?
Den Rest bei der Division berechnen?

Für beides gibt es Operationen in C.
/ ist die Division
% ist der Rest der Division.

Autor: Onkel SAM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ÄHm ..........ja klar du musst die zahlen vernibblen

Autor: Basilius W. (getman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darauf bin ich schon gekommen. Aber wie kann ich eine Zahl NUR in ein 
Nibble reinschreiben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Basilius W. schrieb:
> Darauf bin ich schon gekommen.

Dann sag das doch gleich!

> Aber wie kann ich eine Zahl NUR in ein
> Nibble reinschreiben?

Mittels Bit-Operationen?
Zuerst mit einem & und entsprechender Maske die jeweiligen Bits gezielt 
auf 0 setzen. Dann mit einem Oder die jeweils notwendigen Bits gezielt 
auf 1 setzen.

Beim High-Nibble muss man sich halt den Wert dessen 1-Bits eingeodert 
werden sollen entsprechend zurechtschieben.

Ach, ich vergass. Du willst ja Low-Nibble und High-Nibble gleichzeitig 
setzen. Vergiss die & Operation.

Low-Nibble (Einer) mit einer entsprechend zurechtgeschobenen Version des 
'High-Nibbels' (Zehner) verodern und fertig.

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal mit AND und OR

Autor: Basilius W. (getman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh mann, richtig... Danke!

Autor: S. T. (cmdrkeen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ergebnisbyte = (zehner << 4) | (einer)

Autor: troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a=zahl1_10er, b=zahl2_1er, c=byte_BCD

c=b*16+a;
oder wenn nur a upgedated wird
c=c&0xf0|a;
oder bei nur b
c=(c|~15)&~b<<4

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.