8051 - Umrechnung und Kommawert ausgeben



  • Hallo

    Ich brauch dringent hilfe bei meinem 8051 Assembler-Programm ! Ich bin noch nicht so fit mit der Assemblerprogrammierung und in meinen Büchern hab ich auch nichts hilfreiches gefunden.

    Mein Problem ist, daß ich eine Umrechnung machen muß und es bei mir nicht klappt.

    In meinem Programm wird ein Istwert (0-255) eingelesen und gesichert. Diesen Wert ziehe ich dann von 255 ab und sichere in wieder. (Den Umgerechneten Istwert benenne ich jetzt einfach "Istwert2").

    Nun zu meiner Problem-Rechnung:

    Ich muß den Istwert2 mit einem Faktor(0,0525 bzw. 0,053) multiplizieren und das Ergebnis soll mit einer Kommazahl(z.B. 4,1) ausgegeben werden.

    Istwert2 (z.B. 73) * Faktor (z.B. 0,0525) = ??? (z.B. hier 3.8)

    - Wie kann ich diese Rechnung in meinem Assembler ausführen ?
    (Befehle ?)

    - Und wie geb ich den Wert mit Komma (1 Nachkommastelle) aus ?

    Ich hoffe ich hab alle wichtigen Daten genannt.

    Im voraus DANKE !!!

    Gruß
    Thiemo



  • dividiere doch einfach durch 1/0.055

    Wenn du an nem MFA arbeitest, gibts da nen Assemblermakro fürs Dividieren im ROM.



  • Hi

    Eine möglichkeit ist deine multiplikation wie DocJonioR schon sagt auf eine division umzubauen.

    19 scheint ein guter Wert zu sein, der sehr na an deinen multiplikationswert rankommt. der 8051 hat glaub einen div befehl der mit rest arbeitet.

    ggf hilft dir auch das thema festpunktarytmetik weiter. Dabei werden alle zahlen soweit nach oben multipliziert, bis keine nachkommastellen mehr da sind

    kleines beispiel:

    (12.27 + 2.5) * 2.12 = 31.3124

    liese sich so umschreiben. (alles um faktor 100 grösser)

    ((1227 + 250) * 212) / 100 = 3131.24

    die / 100 nach der multiplikation sind notwendig um den multiplikationsfehler auszugleichen. das gleiche bei dievisionen. hier natrürlich dan * 100 ggf mit ergebniskorektur wegen dem rest.

    in der implementierung selber würd ich das auf basis 2 machen. läst sich viel einfacher rechnen da multiplikationen und divisionen durch Schiebebefehle ersetzt werden können. (achtung 8051 hat auch rotationsbefehle)

    gruss


Anmelden zum Antworten