Forum: Mikrocontroller und Digitale Elektronik autorennbahn zeitmessung FF FF x 16bit multiplikation


von jonny knoxville (Gast)


Angehängte Dateien:

Lesenswert?

hallo!

ich arbeite an einem kleinen heimprojekt und stehe jetzt vor einem
problem. ich möchte mit einem lichtschranken rundenzeit momentane
geschwindigkeit und rundenanzahl messen. im moment hänge ich noch bei
der auswertung wo ich FF FF mit 16bit multiplizieren muss.
ich habe anfangs ein progframm geschrieben wo ich FF FF mit 8 bit
multipliziere doch habe erst im nachhinein gesehen dass die zeit mit
8bit zu kurz für die messung ist.
die berechnung bezieht sich auf die rundenzeit.ich möchte nur die
überläufe zählen weil die programmierung dadurch wesentlich einfacher
ist und der fehler nur 1/1000 beträgt. ich bin für jede
anregung,hilfe,bessere idee zur messung dankbar.
ps:programmierung mit 8052kit im asm

mit freundliche grüßen

von Thomas O. (Gast)


Lesenswert?

Du kannst ja ein Register erhöhen und bei Überlauf wiederum ein anderes
erhöhen und wenn das überläuft wieder ein anderes so kannst du es
beileibig fortsetzen.
a=a+1
if a=255 then b=b+1
if b=255 then c=c+1
if c=255 then d=d+1
if......
goto Anfang

von peter dannegger (Gast)


Lesenswert?

Du hast ne 8*8=16Bit Multiplikation, die kannst Du auf beliebige
Bitbreiten erweitern.

Das Prinzip entspricht dem der schriftlichen Multiplikation.


Peter

von jonny knoxville (Gast)


Lesenswert?

hallo

danke für die beiden einträge.beiden haben mir zum erfolg geholfen.
das programm läuft perfekt.
jetzt muss ich das nur noch auf elegante weise abwickeln.als
endergebnis bekomme ich nämlich 4byte(weil 4 speicherplätze für die
teile der endergebnisse)
ich denke dabei an eine stapelung der bytes in richtiger reihenfolge ab
einer bestimmten adresse.
was meint ihr? was ist zu beachten? welche eleganten lösungen gibt es
noch?

mit freundlichen grüßen

von Wolfram (Gast)


Lesenswert?

>im moment hänge ich noch bei
>der auswertung wo ich FF FF mit 16bit multiplizieren muss.

(16bit) ist deine 16bit zahl
Wie wärs mit (10000hex *(16bit))-(16bit)
das ist das gleiche wie 0xFFFF*(16bit)
elegant wird das ganze natürlich erst wenn man die Multiplikation
durch
shiften ersetzt. Oder richtig elegant:
Man greift aufs 3. Byte zu
bsp: (16bit)=8hex
10000hex *8hex=80000hex (noch 8hex subtrahieren)
entspricht einer verschiebung um 2 Bytes. Also kein shift sondern
einfache mov Befehle.

elegant genug?

von Thomas O. (Gast)


Lesenswert?

nehm doch einfach das Byte das zuletzt Beschrieben wird. Wenn hier die
Genauigkeit nich reicht und das letzte Byte so ausschaut 00011111 dann
nehm einfach die letzen 5bits und schiebe die höheren 3Bits vom
vorherigen Byte dazu

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.