Mittelwert aus 4-Byte-Zahlen bilden

Gast #107979
Hallo,

ich programmiere gerade ein Unterprgramm, das nach jeder Messung
aufgerufen werden soll, um acht Meßwerte zu addieren, durch Division
durch acht den Mittelwert zu bilden und nach dem achten Aufruf
auszugeben ans LCD. Mein Problem ist die Verarbeitung der Überläufe bei
den Additionen, da die Carry-Flags zwischen der einen und der nächsten
Messung zwischen-gespeichert werden müssen und zusätzlich noch ein
Überlauf innerhalb der 4-Byte-Zahl ebenfalls berücksichtigt werden
muß.
Außerdem: ist die Division durch acht bezüglich Überläufen so korrekt?

In der angehängten Datei befindet sich der momentane Stand meiner
Bemühungen. Ist direkt lauffähig im Simulator. Kann mir bitte jemand
mit Tipps weiter helfen?

Gruß
Angehängte Dateien:
Gast
Hallo.
Ich habe mir gerade ein Programm zusammengebastelt,welches mir
4 Messwerte die in 4 Registern gespeichert sind zusammenrechnet und
dann durch 4 teilt.Die Anzahl der Register und der Teilfaktor können
leicht geändert werden.Falls Interesse besteht,bescheid sagen,dann
kommentier ich es etwas und schicks dir.
gruss
Andy
Gast
"welches mir 4 Messwerte die in 4 Registern gespeichert sind
zusammenrechnet"

Hallo,

bei Dir sind das dann vier 8-Bit Zahlen oder? Bei meinem Problem
handelt es sich um 32-Bit-lange Meßwerte (vier Bytes lang).

Gruß
Gast
Hallo,

anbei eine korrigierte Version. Die Reihenfolge, in der die Register
addiert werden, war falsch. Woanders war die Reihenfolge beim Auslesen
der RAM-Plätze falsch. Falsch hingeschrieben und dann nicht mehr
gemerkt ;) Neuderdings werden die Register mit anderen Zahlen
initialisiert.

Die Addition scheint zu stimmen. Wenn man die Division durch acht nicht
auskommentiert, kommt manchmal der richtige Wert (immerhin), bei
etlichen Messungen wieder falsche Werte, dann wieder mal der richtige.


Ich würde mich freuen, falls jemand eine Idee hätte, was an der
korrigierten Version noch falsch sein könnte.

Gruß
Angehängte Dateien:
Gast
Statt 32 Bit zu rechnen, wird der Akkumulator der 8 Additionen auf 40Bit
erweitert.

Du definierst also zB. noch Mittel5 = r24. In "addiere" nach der
letzten Addition dann

clr temp1
adc Mittel5, temp1

um das eventuell entstehende Carry=Überlauf zu addieren. Dies kann nur
0 oder 1 sein.

Du addierst so deine 8 mal 32Bit Werte auf diesen 40Bit Wert. Danach
wird dieser 40Bit Wert per 3 Rechtshift mit 8 dividiert.

In deinem Source tuest du dies in den rBin1?? Werten, allerdings aber
falsch.


Statt:

lsr rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L

ror rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L

ror rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L


muß es so sein:

lsr rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L

lsr rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L

lsr rBin1H;drei mal durch zwei dividieren ergibt Division durch acht
ror rBin1MH
ror rBin1ML
ror rBin1L


Gruß Hagen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.