www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Rechenoperationen


Autor: BA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bräuchte mal ein paar infos über rechenoperationen bei der avr family. 
gibts da irgendwo ein tutorial ??

muss folgende formel berechnen:  X = (ZAHL1 * ZAHL2) / 2

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm...
Multiplizieren kann man, indem man Zahl1 auf sich selbst addiert und das 
Zahl2 mal. Die Division durch 2 erreicht man durch as Verschieben nach 
rechts.

Sollte ich mich täuschen, dann berichtigt mich.


Bye
Steffen

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auf http://users.i.com.ua/~birua/math32.html , da ist außerdem eine 
Riesenmenge Makros für allgemeine Anwendungen dabei.

MfG
Andreas

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

ein Beispielprogramm für eine einfache 8bit x 8bit = 8bit Addition, so 
wie du es dir überlegt hast, findest du hier:
http://www.mikrocontroller.net/forum/read.php?f=1&...

MfG
Andreas

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dort in den Anhang mul.asm!

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.include "d:\tools\wavrasm\appnotes\4433def.inc

.def zahl1 = r20
.def zahl2 = r21



    ldi  ZH, 0
    mov  ZL, ZH
mul:    add  ZL, zahl1
    brcs  ueber
    rjmp  n_ueber
ueber:    inc  ZH    ;Übertrag nach ZH addiert
n_ueber:  dec  zahl2
    breq  div    ;wenn Zahl2 = 0 dann ist Multiplikation fertig
    rjmp  mul
div:    lsr  ZH
    brcc  div_1    ;kein Übertrag? ..dann spring
    inc  zahl2    ;der Übertrag muss zu ZL dazu, aber erst nach der 
Division
div_1:    lsr  ZL
    brcc  fertig    ;kein Übertrag? ..dann spring
          ;sonst, Rest vorhanden...
fertig:    add  ZL, zahl2  ;fertig, Das Ergebnis steht in ZH:ZL
main:    rjmp main

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ne 8Bit*8Bit Multiplikation mit anschließender Division durch 2
Das Ergebnis ist 16Bit (ZH:ZL)
Zahl2 wird während der Berechnung überschrieben!

Achtung: Es kann zu einem gerundetem Ergebnis kommen (Rest entsteht 
->Carry-Flag wird gesetzt; 1Bit läßt sich eben schlecht teilen ;))

Autor: BA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok..thx ich werds mal testen

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@BA

Noch ein Nachtrag:
Da wo steht ";sonst, Rest vorhanden..."
müsstest du die Nachkommastelle erzeugen. Ist nicht weiter schwer. Das 
Carry-Flag representiert den "Verlust" eines Bits bei dem Schieben. Das 
Bit bedeutet also, daß deine Nachkommastelle 5 ist (1/2).

Der Algorithmus ist im ungünstigsten Fall (worst case) ziehmlich 
langsam. Das tritt dann auf, wenn Zahl2 größer ist als Zahl 1. Nach 
möglichkeit sollte man also die beiden untereinander austauschen.

Bsp: 3*100 (Zahl1 * Zahl2)

So durchläuft man 100 mal eine Schleife...und addiert immer 3 auf Zahl1

Vertauscht man Zahl1 und Zahl2 so durchläuft man die Schleife nur 3 mal 
und addiert 100 zu Zahl1.


Bye
Steffen

PS: man kann einen Sprung in dem Algorithmus sparen

brcc      k_ueber    ;Carry nicht gesetzt -> kein Übertrag ->springe
inc       ZH         ;Übertrag nach ZH addiert
k_ueber:  dec  zahl2

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.