mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Berechnun in Assembler


Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chapmy (Gast)
Datum:

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

Autor: Uwe (Gast)
Datum:

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

danke

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß aus Berlin
Michael

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

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

MfG Peter

Autor: Leser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Uwe

Was verstehst Du denn an dem Text nicht?

Gruss
Leser

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Befehl "ldi" ist mir völlig neu, was bedeutet dieser?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe (Gast)
Datum:

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

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So abgrundtief gründlich kann man aneinander vorbei schreiben!

mfg
gerd

Autor: Uwe (Gast)
Datum:

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

danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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.