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
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.
Stimmt - für dieses Problem am einfachsten! :) Aber wie würde umrechnungsmässig funktionieren? Ciao!
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
Hallo Und wie funktioniert das mit dem Hi-bite ? Wo bzw. was nehme ich als Hi-bite ? Wie verarbeite ich es ? Gruß Thiemo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.