wie geht Multiplizieren mit Hardware?

Gast #69064
Lesenswert?

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
Angehängte Dateien:
Gast #69065
Lesenswert?

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
Gast #69068
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren