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
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
Multipliziere den Rest mit 10 und teile das dann nochmal durch t. Damit erhältst du die erste Nachkommastelle.
okee, schon mal danke.. kannst du mir noch sagen wie ich 24bit/8bit teilen kann? habe bisher nur mit 8bit zahlen gerechnet. danke
Hallo, Hier vielleicht etwas direkter: http://www.avr-asm-tutorial.net/avr_de/rechnen/division.html Gruß aus Berlin Michael
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
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
Wie wär es, wenn Du es mit C versuchst? Dann nimmt Dir der Compiler so manche Probleme ab... MfG Peter
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
noch ein Frage, wenn ich z.B. 500/5 rechnen will, wie muss ich die 16Bit Zahl auf die 2 Bytes verteilen?
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)
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.
ja, das hab ich gesehen, habe mich da schon gefragt was dieser befehl tut. ich verwende den C509 (MESA-Kit).
Kann mir jemand sagen ob es für meinen Prozessor (C509) einen ähnlichen Befehl gibt wie "ldi"? danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.