Hab da lange nach gesucht, bin auch fündig geworden bei Andreas Roth "Das große Mikrocontroller-Applikations-Kochbuch".
Allerdins ist das ne ziemlich lange Routine (in Assembler). Aber scheinbar geht es nicht anders, als "zu Fuß", oder weiß jemand ne schnellere Lösung?
Aber bitte nicht in Hochsprachen, Assembler needs.;)
Hallo Holger,
wie gehts? wenn Du rechnen moechtest,dann schau in die code library von www.8052.com (http://www.8052.com/) rein. Dort findest Du eine praktische Sammlung mit kompakten Routinen. Der Roth ist da etwas 'deutschkompliziert'
32 bit / 16bit oder 16bit / 16bit...unsigned.
Ultrakurz gibt es leider nicht,da der Kaefer nur 8 bits hat :)
Du berechnest bestimmt die Steuern....den REST nicht vergessen.
Ciao
:)
Sukzessive Approximation+ Umkehrfunktion:
Rekursiv multiplizieren und betragsmäßige Abweichungen vergleichen. Abbruch bei Erreichen des Minimums.
Einen supergruss an Winne !
:)
Peter Dannegger
21.10.2006, 00:17
Hab da lange nach gesucht, bin auch fündig geworden bei Andreas Roth "Das große Mikrocontroller-Applikations-Kochbuch".
Allerdins ist das ne ziemlich lange Routine (in Assembler).
Wie lang ist die denn ?
Hier ist eine auf Geschwindigkeit optimiert:
;************************************************* ***********************
;* *
;* Unsigned division 16 bit *
;* *
;* r6,r7 / r4,r5 = r6,r7 *
;* r6,r7 % r4,r5 = r4,r5 *
;* *
;************************************************* ***********************
udiv16:
cjne r4, #0 _udi5
mov a, r5 ; 16 / 8 bit
mov r3, a
mov b, a
mov a, r6
div ab
mov r6, a
mov r5, b
mov r4, #8
_dik5: mov a, r7
add a, r7
mov r7, a
mov a, r5
rlc a
mov r5, a
jbc cy, _dik6
subb a, r3
jnc _dik7
djnz r4, _dik5
ret
_dik6: subb a, r3
_dik7: mov r5, a
inc r7
djnz r4, _dik5
ret
_udi5: clr a ; 16 / 16 bit
xch a, r4
mov r3, a
mov r2, #8
_dik2: mov a, r7
add a, r7
mov r7, a
mov a, r6
rlc a
mov r6, a
mov a, r4
rlc a
mov r4, a
mov a, r6
subb a, r5
mov a, r4
subb a, r3
jc _dik3
mov r4, a
mov a, r6
subb a, r5
mov r6, a
inc r7
_dik3: djnz r2, _dik2
clr a
xch a, r6
mov r5, a
ret
Auf Größe optimiert wärs etwa die Hälfte.
Peter
Hi,
bei Roth habe ich 40 Zeilen Assemblercode. Werde mir aber mal Peter's Code in aller Ruhe reinziehen. In einem Fall muss ich nur durch eine Halfword teilen. Da hab ich ja was am WoEnde zu tun! (Gähn.....:))
noch einfacher :
Schleife mit Zähler
Zu Null den Divisor sooft addieren bis das Ergebnis größer als der Dividend ist Zählerstand auslesen um eins vermindern . Den Rest ermittelst du in dem du den Divisor vom letzten Zwischenergebnis sutrahierst,und dieses seinerseits vom Dividenden.
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.