Hallo, Ich bin dran ein Geschwindigkeitsmesser zu bauen, daher sollte ich wissen wie ich die Zahl 150000 (Abstand der Lichtschranken) durch eine Zahl zwischen 1500 und 3000 dividiere. Die Zahl zwischen 1500&3000 befindet sich in verschiedenen Register, durch inkrementieren während des Interrupts (wenn die erste Lichtschranke unterbrochen wird) Danke im Voraus
bei Atmel findet man Assemblerroutinen für 16bit-Arithmetik (avr200.asm???). Die lassen sich leicht erweitern auf 32bit. In deinem Fall reichen auch 24bit, zwar unüblich, aber was solls. Spart auf jeden Fall Rechenzeit und Register.
hi wenn du nicht auf avr umsteigen musst, dann schau mal in www.8052.com auf der linken seite ''code examples'' da findest du rechenroutinen von ...Marshall... ciao ed
Danke, hab mir das mal angekuckt. Etwas kompliziert aber ich denke ich kann mich da mal einarbeiten
Noch ein Lösungsvorschlag: Nimm eine Hochsprache (z.B. C oder Basic). Da gibts üblicherweise 32Bit-Zahlen und Division schon fertig.
Ich habe jetzt schon alles in assembler geschrieben ;) Bin gerade dran die "Math Routines" von Marshall (8052.com) auszuprobieren, doch wenn ich ein Ergebnis ausgeben will, das grösser als 255 ist gibt er wirre Zahlen aus, oder geb ich das bloss falsch aus ? Z.B wollte ich 3276 / 1000 (in Form von HexZahlen)berechnen, doch anstatt das Ergebnis 3.276 auszugeben bringt er für : r3 = 0 r2 = 0 r1 = 0 r0 = 3 (was auch bis hierher stimmt) für Nachkommastellen r7 = 0 r6 = 0 r5 = 1 r4 = 20 ...aus Anordnung ist folgendermaßen ; output: r3, r2, r1, r0 = quotient Q of division Q = X / Y ; r7, r6, r5, r4 = remainder (Rest, nachkomma) Ich hoff da kann mir jemand weiterhelfen
Habs gerade selber rausgefunden :) (kommt davon wenn man am stück 10h vor dem kasten sitzt ;)
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.