mikrocontroller.net

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


Autor: Jürgen C (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jürgen C (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Jörn-h. G. (joern_g)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Rahul (Gast)
Datum:

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

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen C (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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.

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.