[ Želja @ 08.03.2015. 19:39 ] @
Pozdrav svima,

Imam jedno pitanje.

Treba da uradim 32 bitno deljenje sa PBP 2.60.
Računam periodu signala iz poznate frekvencije, znači t(us) = 1000000 / F(Hz).

Ima li načina da pre div32 komande izbegnem množenje dva worda sa predefinisim vrednostima od 1000 radi "punjenja" internih registara.
Zamislio sam da u interne registre upišem (Hi+Mid+Low) vrednost F4240 (dec 1000000) i tako uštedim vreme potrebno za ovu kalkulaciju.

Problem je što ne znam može li tako, i ako može kojiu su nazivi tih internih registara ?

Želja

[Ovu poruku je menjao Želja dana 08.03.2015. u 20:55 GMT+1]
[ Želja @ 08.03.2015. 19:58 ] @
Evo šta sam našao u : pbppi14e.lib

;****************************************************************
;* MUL : 16 x 16 = 32 multiply *
;* *
;* Input : R3 * R1 *
;* Output : R2, W = low word *
;* : R0, R2 + 1 = mid word *
;* : R0 = high word *
;* *
;* Notes : *
;****************************************************************

ifdef MUL_USED
LIST
MUL movlw 16 ; For 16 shifts
movwf R4

clrf R0 + 1
clrf R0

mulloop rrf R3 + 1, F
rrf R3, F
btfss STATUS, C
goto mull1 ; Skip add
movf R1, W ; 16-bit add with carry out
addwf R0, F
movf R1 + 1, W
addwfc R0 + 1, F
mull1 rrf R0 + 1, F
rrf R0, F
rrf R2 + 1, F
rrf R2, F
decfsz R4, F
goto mulloop
movf R2, W ; Get low byte to W
goto DONE
NOLIST
DONE_USED = 1
endif
[ foxhunter1 @ 09.03.2015. 07:57 ] @
Da si jos malo zaceprkao nasao bi i:

Code:

;****************************************************************
;* DIV32      : 31 x 15 divide                                  *
;*                                                              *
;* Input      : R0, R2 = 32 bits                                *
;*            : R1 + 1, W = divisor                             *
;* Output     : R0, W = quotient                                * 
;*            : R2 = remainder                                  *
;*                                                              *
;* Notes      : Uses result from MUL.                           *
;****************************************************************


gde pise da su ulazi R0 i R2. Probaj da im direktno dodelis vrednost, neposredno pre upotrebe DIV32.

Ako me memorija pamcenja dobro sluzi, mislim da sam negde procitao da treba iskljuciti interapte (ako ih uopste i koristis)
pre poziva DIV32 i ukljuciti posle DIV32, jerbo kompajler interno koristi ove R0 - R2 registre (lokacije).

Pozdrav,

ps. Posto vec insistiras na brzini - nesto mi se to ne slaze sa upotrebom PIC16 serije uC... kod nje su mnozenje i deljenje
softverski i traje li ga traje. Kod PIC18 - mnozenje je hardversko i u dva masinska ciklusa izvrsi mnozenje dva 16 bitna broja.

Think about it

pps. Obrati paznju da mozes da delis sa (maximalno) 15 bitnim brojem tj sa 32768
[ Želja @ 09.03.2015. 10:40 ] @
Da, to je to - radi.
- Hvala drugar

Još sinoć sam shvatio da sam praktično sam sebi odgovorio.

Pozdrav
Želja