mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Division mit Div und Mod in BASCOM


Autor: Werner Edd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich frage mich, ob es wohl einen einfachen Weg gibt in Bascom eine
Ganzzahldivision durchzuführen?!
Beispiel: 22 / 4 --> a = 5, b = 2
Erklärung: die Zahl 22 soll durch 4 geteilt werden. Ergebnis wäre 5,5.
Daraus folgt der ganzzahlige Anteil a = 5. Die b ist dann der Rest.
Wie kann man sowas leicht implementieren? Schreibt mir jetzt bitte
nicht schau in der Bascom hilfe nach, da hab ich nämlich schon den MOD
Befehl gefunden aber erklärt ist dazu nichts weiter und einen DIV
Befehl kann ich dazu auch nicht finden.
gruß Werner...

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
manchmal sollte man auch google benutzen
http://www.bipom.com/bashelp/fundamentals.htm

Autor: Werner Edd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey danke Tobi, das is halt genau der Ausschnitt aus der Bascom hilfe
den ich auch schon gefunden hab. Leider sagt der auch nur aus wie ich
den rest bekomme also der MOD Befehl aber wie komme ich zum
Ganzzahligen teil (DIV in C) dazu hab ich halt nix gefunden und ich
denke mal wenns MOD gibt wieso dann nicht auch DIV??
gruß Werner...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit C = a / b?
MOD gibt den Modulo, also Restwert zurück.
Ich hoffe mal, das BASCOM so schlau ist und mit "/" keine
Float-Division macht wenn die Zahl als Integer, Word oder Long
angegeben ist.
Langt ja schon, das BASCOM bei nen Timer-IRQ 28 Register in den RAM
pusht und popt obwohl in dem Timer nur 2 Integer um 1 erhöht und
verringert werden :-(

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, da gibs noch was:
C = int(a/b)
Int bedeutet, dass das Ergebnis nach der Division gerundet wird.

Gruß
Andi

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Das geht so in Bascom nicht, nur eine Operation pro Zeile!
C = A/B
C = int(C)
Wenn C keine Single ist, ist das aber überflüssig.

Gruß,
Norbert

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arithmetic operators are +, - , * and \.

· Integer

Integer division is denoted by the backslash (\).
Example: Z = X \ Y

· Modulo Arithmetic

Modulo arithmetic is denoted by the modulus operator MOD.
Modulo arithmetic provides the remainder, rather than the quotient, of
an
integer division.
Example: X = 10 \ 4 : remainder = 10 MOD 4

kurz: \ stat /

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ne Fangfrage:
Gibs in dem BASCOM auch eine Möglichkeit, Ergebnis der Division und den
Modulo mit einer Division festzustellen?
Ich meine damit, das man für den Modulo ja auch eine Division benötigt
aber vielleicht gibs in BASCOM ja eine interne Variable wo man den
Restwert nach einer Division abfragen kann.
Und da der AVR leider keine Word-Division per Maschinenbefehl kann sind
das dann auch ein paar 100 Takte je Division.

Gruß
Andi

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auch auf das risiko hin, das ich jetzt einen drauf krieg:
jetzt wäre es praktisch die sourcen zu haben um dort nachzuschaun...

Autor: Werner Edd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also echt tobi!!
1.es is ja echt nett daß du hier auch was schreibst aber das ganze
könnte schon ein bischen konstruktiver sein.
2.ich kenn den ausschnitt aus der bascom hilfe da steht aber weiter nix
dabei ob das ganze schon gerundet wird usw.
gruß werner...

Autor: Werner Edd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ps. auch die frage von andi ist ziemlich interessant, weil wieso sollte
man 2mal teilen - das dauert ja bei einem atmel eh schon ziemlich viele
schritte - wenn auch der rest möglicherweise schon in irgendeiner
variblen/register abgelegt wird. vielleicht kennt sich einer damit aus
oder hatte schon mal so ein problem.

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@Andi:
Schau Dir das kompilierte Programm doch einfach in AVR-Studio an, da
kannst Du genau sehen was Bascom aus dem Code macht bzw. wie es zu dem
Mod Ergebnis kommt.

Gruß,
Norbert

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso, fakt ist, das BASCOM für den Restwert mittels dem Befehl MOD eine
extra Division durchführt.
Aber ich probier das gleich mal aus und stell das Dissasemblat (welch
doofes Wort) hier dann rein.

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang das "Dissasemblat" für folgenden Basic-Code:
   $regfile = "8515def.dat"
   $crystal = 4000000

   Dim A As Word
   Dim B As Word
   Dim C As Word
   Dim Rest As Word

   C = A / B
   Rest = A Mod B

   End

Man sieht im Dissasemblat deutlich 2 mal den Aufruf der
Divisions-Routine.
Ich will damit die ganze Zeit nur klar stellen, das eine Programmierung
eines µC in Basic Zeit und Flash verschenkt.
In reinem ASM, und womöglich auch in C, ist es z. B. möglich, Ergebnis
und Restwert mit einer Division festzustellen.
Nicht um sonst heißt Basic Anfänger und wollt Ihr denn immer Anfänger
bleiben?
Es ist nicht so, das ich Basic nicht kann oder hasse, aber im
µC-Bereich geht es verschwenderisch, im Verhältnis der µC-Kapazitäten,
mit Flash und Performance um.
Bei PC´s setze ich es gerne immer wieder ein aber nicht bei µC die mehr
als nur ne LED blinken lassen sollen.

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hatte beim ersten der beiden Beiträge den Anhang vergessen.
@MOD: Bitte dieses hier und das 2 von hier nach oben löschen. DANKE!

Gruß
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.