mikrocontroller.net

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


Autor: Thiemo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Techniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..interessiert mich auch..

Autor: Michael F (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Techniker (Gast)
Datum:

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

Ciao!

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: edi-edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bist du simplizius ?

Autor: Thiemo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Gruß
Thiemo

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.