Hallo liebes Forum, ist hier jemand, der die App Note des AVR in Bezug auf die Hardware Multiplizierung mal verständlich erklären kann? Ich hab wohl in der Schule nicht aufgepasst! Um eine Ausgabe auf LCD anzupassen versuche ich den ADC Wert mit 19 zu multiplizieren und hinterher mit 16 (weil es so schön durch schieben geht) zu dividieren. Nun hab ichs versucht, wie man es dezimal macht: z.B. 25 X 5 = 125 -> 5 X 5 = 25 + 20 X 5 = 100 ist zusammen 125 ! ->stimmt in Hex umgesetzt funktioniert meine Routine nich! Hier im Forum steht ja z.B. "Schau in die Codesammlung 8X16 bit" Die Suchfunktion zeigt mir aber nichts. (Kann sein, dass ich auch zum Suchen zu blöd bin - dann lasst mich halt einfach doof sterben) ansonsten schon mal Danke für eine Aufklärung. Gruss Holger
Hallo Holger, die Multiplikation ist so schon in Ordnung, aber die Addition der Teilergebnisse am Ende der Routine ist falsch. Du berücksichtigst den Übertrag nicht ($F6 + $1E = $14 + Carry Flag). Gruß, Frank
<Boing!> Aua, was für'n Blödsinn! Man sollte halt genau hinschauen, bevor man etwas schreibt. Entschuldige, bitte. Gruß, Frank
Dein Fehler ist, dass Du nicht stellenrichtig addierst. Die $03 x $0A sind bei der Multiplikation zwar $1E, müssen aber als $1E00 in die Addition eingehen. Gruß, Frank
Das Problem ist: Dein Ergebnis ist 24 Bit breit! Probier mal folgendes: ;****************************************************************** mul Lbyte, fakt ;Low Byte x Faktor mov r24, r0 ;Ergebnis in ZRP sichern mov r25, r1 mov r26,#0 mul Hbyte, fakt ;High Byte x Faktor add r25, r0 ;Ergebnis zu Erg. der ersten adc r26, r1 ;Multiplikation addieren ;Ergebnis in R24 (low bis R26 (hi) Stefan
Danke Euch!!! Die Idee mit dem Stellenrichtigen addieren hätte mir auch kommen können. Manchmal hat mann eben Brett vor Kopf ! Autsch! Jetzt funktionierts. Gruss Holger
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.