Moing Ich bin neu in Assembler und habe ein kleines Problem: Ich kriege den 10Bit ADC Wert, Multipliziere diesen und habe dann ein 32 Bit Resultat welches in den Registern R16-R19 abgelegt wird. So weit so toll. Ich will für die weiteren Berechnungen aber nur 16Bit benutzen und die unteren 16 Bit vergessen ohne den dezimal wert zu verändern (also nur genauigkeit verlieren da nur die 3 bz. 2 vordersten dezimalzeichen vor dem Koma sind ) Meine bisherigen überlegung: Ich könnte die unteren 16 Bit weglasen und dann die oberen 16 entsprechend multiplizieren..toll dann habe ich wieder eine lange zahl. da stehe ich gerade vor einer wand..kann mir jemand ein Tipp geben wie ich das angehen kann? Muss nicht ein ganzes tut sein....darf aber ;)
Schreibe ein Zahlenbeispiel hier rein. A/D Wert, deine Rechnung und das was rauskommen soll.
Okey...Ich probier mal ein beispiel zu machen ;) Alle Angaben sind dezimal 1. Faktor (ADC Wert) = 911 2. Faktor = 1207464 Das Produkt im 32Bit Akku = 1099999704 Und nun möchte ich das in 1099 umwandeln, konkret die hinteren 6 dez. stellen vergessen und in ein 16 Bit register speichern.. Ich das irgendwie möchglich?
Die Variable 16 mal nach rechts schieben. Der Compiler erkennt das und nimmt verwirft die unteren 2 Bytes.
Samuel K. schrieb: > Die Variable 16 mal nach rechts schieben. Das will er nicht, er will durch 1.000.000 teilen. Hier könnte ein Name stehen schrieb: > Und nun möchte ich das in 1099 umwandeln, konkret die hinteren 6 dez. > stellen vergessen und in ein 16 Bit register speichern. Einfach das Ergebnis durch 1.000.000 teilen und dann nur das low Byte übernehmen. Was wird gemessen, wie soll es skaliert werden und welche Genauikgeit wird gewünscht. Ich finde die Rechnung irgendwie komisch. Da gibt es vielleicht andere Möglichkeiten.
Hi >Die Variable 16 mal nach rechts schieben. Der Compiler erkennt das und >nimmt verwirft die unteren 2 Bytes. Das wäre eine Division durch 65536. Der TO will aber eine Division durch 1000000. Außerdem verwirft der Assembler nichts. @Hier könnte ein Name stehen (Gast) Wenn du sowieso etwas verwerfen willst, warum dann der Faktor von 1207464? Aber,wenn du mit 79132 (1,207464*65536) multiplizierst, dann bekommst du durch weglassen der unteren 16 Bits deinen gewünschten Wert. MfG Spess
spess53 das ist GENIAL! Thx das ist genau dass was ich brauche =D Geniale Idee! Natürliche kenne ich das Binäre Zahlensystem, Aufbau, umrechnen u.s.w. einigermassen..aber ich frage mich immer: "Wie kommt man auf diese Ideen?" Gruss und danke für alles [Immer noch KEIN Name]
Hi >Geniale Idee! Natürliche kenne ich das Binäre Zahlensystem, Aufbau, >umrechnen u.s.w. einigermassen. Dein Controller 'denkt' nun mal binär. Also musst du auch so denken. Nicht nur umrechnen. >.aber ich frage mich immer: "Wie kommt man auf diese Ideen?" Wenn du in 30 Jahren noch Assembler programmierst geht das automatisch. MfG Spess
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.