Forum: Mikrocontroller und Digitale Elektronik Nibble-Problem


von Basilius W. (getman)


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!

von Karl H. (kbuchegg)


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.

von Onkel SAM (Gast)


Lesenswert?

ÄHm ..........ja klar du musst die zahlen vernibblen

von Basilius W. (getman)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von doc (Gast)


Lesenswert?

Versuchs mal mit AND und OR

von Basilius W. (getman)


Lesenswert?

oh mann, richtig... Danke!

von S. T. (cmdrkeen)


Lesenswert?

ergebnisbyte = (zehner << 4) | (einer)

von troll (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.