|
для pic16.
То, что взял с PICList, выдает какие-то совершенно случайные результаты :(
Вот оно:
;**********************************************************************************************
;**********************************************************************************************
; 16/16 Bit Unsigned Fixed Point Divide 16/16 -> 16.16
; Input: 16 bit unsigned fixed point dividend in AARGB0, AARGB1
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
; Use: CALL FXD1616U
; Output: 16 bit unsigned fixed point quotient in AARGB0, AARGB1
; 16 bit unsigned fixed point remainder in REMB0, REMB1
; Result: AARG, REM <-- AARG / BARG
; Max Timing: 2+369+2 = 373 clks
; Min Timing: 2+273+2 = 277 clks
; PM: 2+24+1 = 27 DM: 7
FXD1616U CLRF REMB0
CLRF REMB1
MOVLW D'16'
MOVWF LOOPCOUNT
LOOPU1616 RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
BTFSC _C
GOTO UOK66LL
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
BCF _C
UOK66LL RLF AARGB1, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1616
stop goto stop
E-mail: info@telesys.ru