PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8051 - Umrechnung und kommawert ausgeben



Thiemo
12-06-2005, 12:42
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. Vielleicht steh ich gerade auf meinem Schlauch !?! :D

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

Lin728
12-06-2005, 14:57
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.


1.) Also du brauchst pro zahl mehere Bytes, für dien Beispiel oben z.B. 2 bytes.
2.) Warum verschiebst du das Komma nicht einfach um 4 stellen nach rechts dann kannst du ganz normale Integer-Operationen verwenden
z.B. (73 * 525) / 10000

Dazu musst du aber folgende Routinen ausprogrammieren:
- 16 bit multiplikation (sollte relativ einfach mit carry-flag funktionieren)
- 16 oder 32 bit division (etwas schwerer)
ich bin sicher du findest was im Netz dazu.

Wie du das speicherst ist net wirklich klar, es gibt keine Regelung wie beim 8051 Fixkommastellen behandelt werden sollen. Aber warum speicherst du das Ergebnis nicht einfach als 1-byte zahl und legst fest dass die Zahl als Zahl*1/10 zu werten ist? (dann halt 73*525 / 1000).