mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Risc Controller Modulo Operation


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann mir jemand sagen, ob die Atmel Megas eine Modulo Operation
können?
Ich habe da bisher nix gefunden

Grüsse Ralf

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar können die das, kann jeder µProzessor.
Der Modulo ist der Restwert einer Division.
Und falls der Modulo aus einer Division einer 2ér-Potenz ermittelt
werden soll (/2, /4, /8 etc.), reicht, in ASM oder auch C, eine
einfache AND-Verknüpfung.

MfG
Andi

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Einen speziellen Befehl zB wie add oder mul gibts aber nicht für diese
Operation oder? In C isset ja % aber es geht mir ja um einen Assembler
Befehl.
Mein Ziel ist es für eine beliebige einstellige Dezimalzahl den den
Modulo 4 Wert zu bilden
Also zB:
9 %4 = 1

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nix leichter als das!

Zum Beispiel:
 ldi  r16,11  ;Ausgangswert
 andi r16,3   ;Modulo aus 11 / 4 = 3

oder
 ldi  r16,6   ;Ausgangswert
 andi r16,3   ;Modulo aus 6 / 4 = 2

Der Wert 3 für die AND-Verknüpfung kommt daher, das ein Modulo 4 Werte
von 0 bis 3 haben kann und die 4 einer Zahl aus einer 2ér-Potenz
entsprechen.
Mit Modulo 5 geht das natürlich nicht sondern immer nur mit Zahlen wie
2, 4, 8, 16, 32 etc.
Brauchst Du mal einen Modulo aus 8, machst Du eine AND-Verknüpfung mit
7 (0 bis 7 sind dann mögliche Werte).
Bei Modulo 100 z. B. benötigst Du eine Divisions-Routine welche das
Ergebnis und den Restwert zurück gibt.

MfG
Andi

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck dir einfach das Instruction Set an:

http://www.atmel.com/dyn/resources/prod_documents/...

da kannst du gleich sehen, welche Befehle drin sind.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Modulo erfolgt bei der Division.

Der Befehl wäre also "DIV", aber den haben die AVRs nicht.

Der 8051 hat "DIV" (8Bit Division), der Quotient steht dann in A, der
Rest (Modulo) im B-Register.


Peter

Autor: And (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und für was jetzt "DIV" beim Modulo 4 (auch, wenns ein 8051 wäre)?
X Modulo 4 = X AND 3

MfG
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und für was jetzt "DIV" beim Modulo 4 (auch, wenns ein 8051 wäre)?
X Modulo 4 = X AND 3

MfG
Andi

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.