mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR ASM ; Multiplikation funktioniert nicht


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe hier den Code der die Spannung anzeigen soll. Der Code ist von der 
Seite, sollte bis auf das zwischen den Sternen also korrekt sein!

 URL: http://rafb.net/p/0Osrkr99.html

Nun hab ich bei den Sternen ein Subtraktion eingefügt, die funktioniert 
so weit und danach eine Multiplikation. Da kommt dann ein falsches 
Ergebnis raus.

Weiß jemand, was ich falsch gemacht habe?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich ist nach der Multiplikation dein temp1..4 verändert?

Sieh dir mal der Reihe nach an, was das Programm jetzt macht:
;*********************************************** 
subi temp1, Low(10000000)           X
sbci temp2, byte2(10000000)         X     hier wird was mit temp berechnet
sbci temp3, byte3(10000000)         X
sbci temp4, byte4(10000000)         X
 
push temp5
push temp6
ldi     temp5,low(20000000)
ldi     temp6,high(20000000)

mul_16x16:
    push    zeichen
    clr     temp1                  X 
    clr     temp2                  X       und hier wirds wieder gelöscht.   
    clr     temp3                  X
    clr     temp4                  X
Jetzt alles klar?

Ich möchte ernsthaft bezweifeln, dass du weißt, was du gerade machst.
Was ist denn vor der Subtraktion in temp1..4?
Macht es irgendeinen Sinn, von diesen Werten etwas abzuziehen?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ups. Danke erstmal

>Was ist denn vor der Subtraktion in temp1..4?
>Macht es irgendeinen Sinn, von diesen Werten etwas abzuziehen?

Vor der Subtraktion repräsentiert die Zahl in temp1-4 die Spannung in V.
Davon möchte ich erst was abziehen, und dann multiplizieren.

>Macht es irgendeinen Sinn, von diesen Werten etwas abzuziehen?

Ja, das brauch ich unbedingt. Ich wollte ein Differenz ermitteln und 
diese dann multiplizieren.

Wie auch immer, habe eben gesehen, dass die Routine ja eigentlich nur 
für eine 16Bit Zahl geht, und temp1..4 ja eine 32Bit Zahl ist.

Gibt es da auch eine Routine, mit der man ein 16bit mit einer 32Bit Zahl 
multiplizieren kann?
Würd mich echt freuen, wenn die jemand hätte :-)

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meinte 32Bit mit 32Bit

Autor: spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
HI

Wenn es dir hilft.

'result','arg1','arg2' sind ensprechend breite Puffer im Ram.

MfG Spess

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
THX Spess :-)

Allerdings hab ich nun doch einfach vor der multipl. subtrahiert ;)
Ist deutlich einfacher dann.

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.