Forum: Mikrocontroller und Digitale Elektronik Berechnun in Assembler


von Uwe (Gast)


Lesenswert?

Guten Tag,
ich bin an einem Programm welches die Geschwindigkeit anhand einer 
bestimmten Strecke und einer gemessenen Zeit ausrechnet und auf einer 
LCD-Anzeige rausgibt.
Mein Problem ist dies, wenn:

geg:s=200mm
    t=101ms

ges: v=s/t=200mm/101ms= 1m/s Rest: 99

oder:

geg:s=200mm
    t=199ms

ges: v=s/t=200mm/199ms= 1m/s Rest: 1

wie kann ich diesen Rest jetzt berücksichtigen?

ich programmiere das ganze in Assembler in der uVision2 umgebung und das 
Resultat soll mit dem LCD-Modul vom MESA-Kit angezeigt werden!

gruss und danke

von Michael U. (amiga)


Lesenswert?

Hallo,

als Ansatz: 200mm * 1000, dann hast Du das Ergebnis in mm/s und mußt bei 
der Ausgabe nur das Komma richtig setzen.

Die 200000 ist ja eine Konstante, Du muß natürlich dann eine Division 
24Bit/8Bit benutzen und hast dann maximal 24Bit als Ergebnis.

Beispiele dazu sind im Netz, da Du den Kram ja anzeigen willst, spielt 
die Rechenzeit der Division keine wirkliche Rolle.

Gruß aus Berlin
Michael

von Chapmy (Gast)


Lesenswert?

Multipliziere den Rest mit 10 und teile das dann nochmal durch t. Damit 
erhältst du die erste Nachkommastelle.

von Uwe (Gast)


Lesenswert?

okee, schon mal danke..
kannst du mir noch sagen wie ich 24bit/8bit teilen kann?
habe bisher nur mit 8bit zahlen gerechnet.

danke

von Daniel (Gast)


Lesenswert?


von Michael U. (amiga)


Lesenswert?

Hallo,

Hier vielleicht etwas direkter:
http://www.avr-asm-tutorial.net/avr_de/rechnen/division.html

Gruß aus Berlin
Michael

von Peter D. (peda)


Lesenswert?


von gerd (Gast)


Lesenswert?

Hallo.

Teilen ist superdoof. Scheue es wie der Teufel das Weihwasser. Was Du 
wirklich brauchst, sind Festkommazahlen. Die gibt es hier:

http://www.avr-asm-tutorial.net/avr_de/rechnen/fpconv.html

mfg
gerd

von Uwe (Gast)


Lesenswert?

Ich habe mal den Link von Michael U. durchgelesen, doch bei einem Punkt 
wusste ich nicht genau wie dieser gemeint ist, vielleicht kann mir das 
jemand anders erklären:

3. die 16-Bit-Zahl in rd1h:rd1l wird bitweise in ein Hilfsregister rd1u 
geschoben (mit 2 multipliziert), rollt dabei eine 1 links heraus, dann 
wird auf jeden Fall zur Subtraktion im vierten Schritt verzweigt,...


danke

von Peter (Gast)


Lesenswert?

Wie wär es, wenn Du es mit C versuchst? Dann nimmt Dir der Compiler so 
manche Probleme ab...

MfG Peter

von Leser (Gast)


Lesenswert?

@  Uwe

Was verstehst Du denn an dem Text nicht?

Gruss
Leser

von Uwe (Gast)


Lesenswert?

Ich glaube jetzt ist mir grad was klar geworden=)

muss ich das L-Byte in das H-Bye und das H-Byte ind das Hilfsregister 
schieben?

gruss

von Uwe (Gast)


Lesenswert?

noch ein Frage, wenn ich z.B. 500/5 rechnen will, wie muss ich die 16Bit 
Zahl auf die 2 Bytes verteilen?

von Karl H. (kbuchegg)


Lesenswert?

Uwe wrote:
> noch ein Frage, wenn ich z.B. 500/5 rechnen will, wie muss ich die 16Bit
> Zahl auf die 2 Bytes verteilen?

zb: r16 und r17,   r16 das High-byte,    r17 das Low-Byte

   ldi r16, HIGH(500)
   ldi r17, LOW(500)

von Uwe (Gast)


Lesenswert?

der Befehl "ldi" ist mir völlig neu, was bedeutet dieser?

von Karl H. (kbuchegg)


Lesenswert?

Uwe wrote:
> der Befehl "ldi" ist mir völlig neu, was bedeutet dieser?

Von welchem Prozessor reden wir eigentlich?

ldi = load immediate

Ich denke, du hast dir das Tutorial hier
http://www.avr-asm-tutorial.net/avr_de/rechnen/division.html
angesehen? Dort wird er ebenfalls benutzt.

von Uwe (Gast)


Lesenswert?

ja, das hab ich gesehen, habe mich da schon gefragt was dieser befehl 
tut.
ich verwende den C509 (MESA-Kit).

von gerd (Gast)


Lesenswert?

So abgrundtief gründlich kann man aneinander vorbei schreiben!

mfg
gerd

von Uwe (Gast)


Lesenswert?

Kann mir jemand sagen ob es für meinen Prozessor (C509) einen ähnlichen 
Befehl gibt wie "ldi"?

danke

von Peter D. (peda)


Lesenswert?

Uwe wrote:
> Kann mir jemand sagen ob es für meinen Prozessor (C509) einen ähnlichen
> Befehl gibt wie "ldi"?

Du weißt aber schon, daß der C509 ein 8051 ist?

Vergiß also die ganzen AVR-Diskussionen der anderen. Das ist ne völlig 
andere Architektur.


Ich hatte Dir ja bereits nen Link für ein 8051 Mathepaket in Assembler 
gegeben.
Da sind alle Grundrechenarten drin für beliebige Genauigkeit von 
16...640Bit.


Peter

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.