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
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
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?
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.
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. ...
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
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.
@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.
Genau. 0xA ist die 10, und in dual ist sie das zweimal (1010).
@Rolf: Das ist ja noch besser als die Eselsbrücke von Hannes.
> 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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.