Forum: Mikrocontroller und Digitale Elektronik 8051 - Umrechnung und Kommawert ausgeben


von Thiemo (Gast)


Lesenswert?

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

von Techniker (Gast)


Lesenswert?

..interessiert mich auch..

von Michael F (Gast)


Lesenswert?

Hallo

Wieso willst Du das berechnen?  Es geht auch einfacher.

Schreib Dir in den Programmspeicher eine Look-Up-Table (LUT) mit 256
Einträgen und in die schreibst Du dann an jede Stelle aufsteigend die
Werte, die ausgegeben werden sollen. (z.B. 41 für 4.1) Da kannst Du Dir
sogar die Subtraktion sparen. Ist schnell, einfach und im
Programmspeicher sollten die 256 Byte locker frei sein.

mov dptr,#LUT   -- Datenpointer auf LUT setzen (nur 1 mal nötig, falls

                   der Datenpointer nicht anderweitig verwendet wird)

movc a,@a+dptr  -- Inhalt des Akku als Offset zum Datenpointer
                   addieren und entsprechenden Wert aus der LUT
                   in den Akku laden


LUT:
db 0feh -- Ausgabe für Messwert 0
db 0fch -- Ausgabe für Messwert 1
db 0fah -- Ausgabe für Messwert 2
usw.

von Techniker (Gast)


Lesenswert?

Stimmt - für dieses Problem am einfachsten! :)
Aber wie würde umrechnungsmässig funktionieren?

Ciao!

von Andi (Gast)


Lesenswert?

Der höchst mögliche Wert bei 255 x 0,0525 = 13,3875 bzw. 13,39.
Wegen einer Stelle nach dem Komma nehmen wir einfach 134
(Aufgerundet).
255 * 134 = 34170 / 256 (hi-Byte).
Im Hi-Byte der Multiplikation ist dann das Ergebnis von 0 bis 133.

Also benötigen wir nur den Mul-Befehl:

 mov a,Istwert2
 mov b,#134
 mul a,b
 mov Istwert2,b

Mache nichts mit 8051, also nicht schimpfen wenn nicht korrekt.
Mir kommt es nur auf den Lösungsweg an.

MfG
Andi

von edi-edi (Gast)


Lesenswert?

bist du simplizius ?

von Thiemo (Gast)


Lesenswert?

Hallo

Und wie funktioniert das mit dem Hi-bite ? Wo bzw. was nehme ich als
Hi-bite ? Wie verarbeite ich es ?

Gruß
Thiemo

von Andi (Gast)


Lesenswert?

Das Hi-Byte ist dann das Register B (wenn ich mich nicht irre).
Nach der Multiplikation kopierst Du das für nachfolgende Verarbeitung
(Ziffernausgabe) sonst wo hin, "mov Istwert2,B".
Ich hoffe, Du hast den Lösungsweg verstanden.
Vielleicht kann unser Experte, Peter Dannegger, noch was dazu
schreiben, ich habe mit 8051 noch nichts gemacht.

MfG
Andi

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
Noch kein Account? Hier anmelden.