Forum: Mikrocontroller und Digitale Elektronik Registerwerte berechnen, Bin in Hex


von Jürgen C (Gast)


Lesenswert?

Hallo,
wie berechnet Ihr die Werte für ein Register.
Ich experimentiere gerade mit einem ADuC7020 Mini Kit und bei den
32 Bit Registern (z.B. GPxCON)ist das Abzählen der Bits bei einer
Binärdarstellung schon etwas mühsig.
Gibt es vieleicht ein Tool, das die Eingabe / Berechnung erleichtert?
Ich stelle mir das etwa so vor:
Eine Zeile mit 32 Nummerierten Markierungsfeldern, wo je nach
markierten Bits der entsprechende Wert als Decimal- und Hex-Wert
angezeigt wird.

Viele Grüße

Jürgen

von Profi (Gast)


Lesenswert?

Mit etwas Übung kannst Du hex direkt ablesen: immer 4er-Gruppen bilden.
Wenns unbedingt dez sein muss, gibt es Taschen / PC-Rechner, die das
von hex nach dez umrechnen.
z.B. der calc in Windoof:
Starten mit Win+r calc Enter
Umschalten nach wissenschaftlich: Alt+a w
Umschalten nach binär: F8
Zahl eintippen
Umschalten nach dez: F6
Umschalten nach hex: F5

von Unbekannter (Gast)


Lesenswert?

bin in hex und umgekehrt kann man direkt ablesen, ohne rechnen zu
müssen:

 0 -> 0000
 1 -> 0001
 2 -> 0010
 3 -> 0011
 ...
 A -> 1010
 B -> 1011
 C -> 1100
 D -> 1101
 E -> 1110
 F -> 1111

So, und wenn Du nun eine Hex-Zahl 0xdef123a0 hast, gibt das:

  1101 1110 1111 0001 0010 0011 1010 0000

Das Prinzip sollte klar sein, oder?

von Jürgen C (Gast)


Lesenswert?

Hallo,
danke für die Tipps, das Prinzip ist klar.
Mich würde nur noch interessieren, ob Ihr das so im Kopf umwandelt,
oder ob ihr da immer eine Tabelle bereit liegen habt.
Ich muss mir das immer aufschreiben.
Das mit den 4er-Gruppen erleichtert die Umwandlung schon sehr.

von Hannes L. (hannes)


Lesenswert?

Dein Kit kenne ich zwar nicht, aber in AVR-Assembler nutze ich das
Zahlenformat, das am besten zur Aufgabe passt. Den Startwert eines
Schleifenzählers gebe ich dezimal ein, benannte Bits aus dem
I/O-Bereich nenne ich beim Bitnamen (ggf. mit 1<<.. reinschieben),
Bitgruppen gebe ich meist Hex an ($ef), manchmal (seltener) binär.

Das Auflösen der Vierbit-Gruppen klappt ohne Tabelle, ist eine Frage
der Übung. Da gibt es aber für den Anfänger auch einige Eselsbrücken,
z.B. "C wie Cwölf (12)" oder "D wie Dreizehn". Wenn man die
Wertigkeit der Bits im Hinterkopf behält (8,4,2,1), dann ist das
eigentlich kein Problem.

...

von Jörn-H. G. (joern_g)


Lesenswert?

Am besten gar nicht umrechenen, sondern direkt hinschreiben, weil besser
LESBAR:
z.B.:
in C:
PORTD = (1<<PD4) | (1<<PD0);

oder in Assembler:

ldi temp, (1<<PD4) | (1<<PD0)
out PORTD, temp

Damit sind alle Bits "0" und die Bits PD4 und PD0 sind "1".
Ihr müsst nicht einmal unbedingt verstehen, wieso man das so schreibt
(Tip: shiften), einfach so machen (immer mit (1<<XYZ)) und gut ist.

cu joern

von Karl H. (kbuchegg)


Lesenswert?

Ich benutz noch eine andere Eselsbrücke:

A entspricht (dezimal) 10.
In binaer sind das dann 2 mal '10' hintereinander.

Die Ziffern von 0 bis 9 hat man sowieso schnell im Kopf,
da mann ja die 2-er Potenzen auswendig kann.

  1     0001
  2     0010
  4     0100
  8     1000

Ebenso sind die Ziffern jeweils vor den 2-er Potenzen
leicht zu merken: alle kleineren Bits sind 1

  3     0011
  7     0111

0 ist eh klar.

damit hast du schon 70% aller Ziffern 0 .. 9

Wie gesagt: A ist 2 mal 10

  A     1010

F ist wieder leicht: alles 1

und B bis E zaehl ich dann ganz einfach binaer durch.

Mit ein bischen Übung klappt das hervorragend.

von Rahul (Gast)


Lesenswert?

@Hannes und seine Eselsbrücken:
Seit ich mit Hexadezimalen Zahlen arbeite, sind bei mir die Finger
wieder zu Rechenhilfen geworden...
Ich merke mir eigentlich nur, dass 0x0A die 10 ist (muß man sich sowas
explizit merken?).
Aufmalen hilft auch oft.

von Rolf Magnus (Gast)


Lesenswert?

Genau. 0xA ist die 10, und in dual ist sie das zweimal (1010).

von Rahul (Gast)


Lesenswert?

@Rolf: Das ist ja noch besser als die Eselsbrücke von Hannes.

von Unbekannter (Gast)


Lesenswert?

> Ich muss mir das immer aufschreiben.

Das ist reine Übungssache. Es ist wie mit dem kleinen Ein-Mal-Eins.
Einmal konsequent die Tabelle auswendig gelernt, und Du vergisst es nie
wieder.

Ist wie Zweier-Potenzen. Einmal alle Potenzen bis 2^16 oder so
auswendig gelernt, und Du kannst fast im Schlaf Dezimal nach Hex und
umgekehrt rechnen.

von Jürgen C (Gast)


Lesenswert?

Hallo,
danke für die vielen Vorschläge.
Mit der Lösung von Joern_g komme ich sehr gut zurecht.
Für die Umrechnung von hex in bin werde ich den Windowsrechner
benutzen.
Die mitgelieferten Beispielprogramme des Kits währen besser
nachvollziebar gewesen, wenn der Autor auch eine solche Schreib-
weise verwendet hätte.
z.B.:
GP4DAT = (1<<26)|(1<<18);
ist in Verbindung mit der Registerbeschreibung im Handbuch viel
verständlicher als
GP4DAT = 0x04040000;
Es müssen halt fünf Zeichen mehr eingegeben werden.
evtl. wird das Programm bei der oberen Schreibweise etwas
größer/langsamer; Aber so weit bin ich noch nicht.

Viele Grüße

Jürgen

von Karl H. (kbuchegg)


Lesenswert?

> evtl. wird das Programm bei der oberen Schreibweise

Nein. Das erledigt der Compiler/Assembler während des
Übersetzungsvorgangs. Der Code der hinten rauskommt
ist in beiden Fällen der Gleiche.

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.