PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2x8bit "hex" zu 16bit dezimal



philiph
25.02.2007, 09:40
Also das ist jezt irgendwie kompliziert ich habe z.B. in einem Register $10 und in einem zweiten $02 stehen jetzt würde ich daraus gerne den 16bit Wert $1002 machen und daraus dann den Dezimalwert 4098 aber wie geht das?

wkrug
25.02.2007, 10:13
Ein Register einer AVR kann nur 8Bit aufnehmen, mit ausnahme der X,Y,Z Register die dann aus 2 normalen Registern zusammengesetzt sind.

Was willst Du mit den HEX Werten machen addieren oder subtrahieren oder was.
Bei solchen Aufgaben werden die 8Bit Register einzeln behandelt z.B.
du willst den Inhalt der register r0 (low_Byte) und register r1 (high_Byte)
zum Inhalt der Register r16 und r17 addieren.

ADD r16,r0
ADC r17,r1

Mit ADC wird ein eventuell vorhandenes Carry zur Addition von r17 hinzugefügt.

Das Ergebnis steht in r16, r17.
Sollte es bei dieser Addition einen Übertrag gegeben haben ist das Carry Flag gesetzt.

Die Umwandlung in einen Dezimalwert wurde hier schon öfter mal behandelt und benötigt ein kleines Programm - bemüh mal die Forumssuche.

philiph
11.03.2007, 07:45
Ja eigentlich geht es mir vor allem um die Wandlung von z.B. $1B2C in die jeweiligen ASCII stellen von 6956(Dezimal) und dazu habe ich hier nichts gefunden

Hanni
11.03.2007, 08:59
Hmm, ich denke man könnte es wie folgt machen.

1. Umwandlung der 16 Bit Zahl in BCD
2. Tabelle um die einzelnen Ziffern in den jeweiligen ASCII Code zu überführen.

Grüße,
Hanni

philiph
11.03.2007, 14:41
Und wie wandle ich in BCD

Hanni
11.03.2007, 17:29
SuFu hilft ....

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21925

wkrug
11.03.2007, 23:06
Für die Wandlung in BCD brauchst Du in Assembler ein kleines Programm.
Entweder ziehst Du von der maximal Möglichen Zahl die 10000, 1000, 100, und 10 Stellen ab, lässt in der jeweiligen Funktion einen Zähler mitlaufen der dann den BCD Wert der entsprechenden Stelle angibt.
Oder Du teilst deinen Wert durch 10 und wertest die Reste aus.
Vermutlich gibts auch noch andere Lösungsansätze.
Kürzlich hab ich hier mal im Forum sogar mal einen Codeschnipsel für so etwas gesehen, aber Frag mich jetzt bitte nicht mehr welcher Beitrag das war.

EDIT! Habs gefunden schau mal hier https://www.roboternetz.de/phpBB2/viewtopic.php?t=22705 rein.

Eine BCD Zahl in eine ASCII umzuwandeln ist relativ einfach. Zum BCD Wert wird einfach 0x30 dazugeodert
LDI r16,bcdzahl
ORI r16,0x30
Im Register r16 steht jetzt eine Stelle deiner ASCII Zahl.
Da die Zahlen im ASCII Code bei 0x30 beginnen kriegt man somit BCD Zahlen auf ASCII umgestrickt.