Registerwerte berechnen, Bin in Hex

Gast #333843
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
Gast #333844
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
Gast #333845
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?
Gast #333846
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.
#333847
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.

...
#333848
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
#333849
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.
Gast #333850
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.
Gast #333853
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.
Gast #333854
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren