Fórum témák

» Több friss téma
Fórum » pic 16bit
 
Témaindító: norcseszto, idő: Okt 18, 2005
Témakörök:
Lapozás: OK   1 / 1
(#) norcseszto hozzászólása Okt 18, 2005 /
 
Sziasztok!
Szükségem lenne,egy 16/16=16 bites kipróbált osztó rutinra.A proci 16F84.
Sajnos a Microchip oldalárol letöltöttek közül,csak 16/8 bites mükszik:
Előre is köszi!norcseszto
(#) mspike válasza norcseszto hozzászólására (») Okt 18, 2005 /
 
szerintem egyszerű a helyzet, következő kép képzelem


  1. clrf temp1
  2.  clrf temp2
  3. ide
  4.  ;call var csak ha akarod...
  5.  incf temp1
  6.  btfss temp1,7
  7.  goto  ide
  8.  incf temp2
  9.  btfss temp2,7
  10.  goto ide


ez a verzió a várakozó rutint 2 a 16-on * futattja...
másik verzió pl. megszakításba

Inicializálás mint előbb két temp reg és törlöd őket
  1. incf temp1
  2.  btfsc temp1,7
  3.  goto vege
  4.  incf temp2
  5.  btfsc temp2,7
  6.  call rutinod... mikor eleri a 16. bitet
  7. vege


szerintem erre gondoltál... ha tudok még segíteni itt vagyok.
(#) mspike válasza mspike hozzászólására (») Okt 18, 2005 /
 
bocsi az a sor a másodikban, hogy
btfsc temp1,7 az igazából btfss temp1,7 bocsika
(#) norcseszto válasza mspike hozzászólására (») Okt 18, 2005 /
 
Van-e teljesen leírt osztó rutinod számomra?
(#) norcseszto válasza mspike hozzászólására (») Okt 19, 2005 / 4
 
Hali!
Megvan a megoldás!

Itt találtam meg!
http://www.markworld.com/evaluate16.html
UDIV16.ASM
MŰKÖDIK
MPLAB-ban szimuláltam.
Ha valakinek kellene:

LIST P=16F84
#INCLUDE "P16F84.INC"
__CONFIG _XT_OSC&_CP_OFF&_WDT_OFF

cblock 0x0C
MpyDiv10
MpyDiv11
MpyDiv20
MpyDiv21
MpyDiv30
MpyDiv31
MpyDiv40
MpyDiv41
Count
endc

ORG 0

GOTO START

ORG 4

START
BSF STATUS,RP0
MOVLW B"00011111"
MOVWF TRISA
MOVLW B"00000000"
MOVWF TRISB
BCF STATUS,RP0
CALL IND
GOTO vege

; Unsigned 16 bit Divide MpyDiv1 by MpyDiv2
; Return quotient in MpyDiv3
; Return remainder in MpyDiv4
; Requires 391 cycles including retlw
; Execution time is independent of data values.
;
IND
MOVLW .136 ; TESZT
MOVWF MpyDiv10 ; 9-16.BIT
MOVLW .184 ;
MOVWF MpyDiv11 ; 0-8.BIT
MOVLW .0 ;
MOVWF MpyDiv20 ;
MOVLW .70 ;
MOVWF MpyDiv21 ;

uDiv16 movlw d"16"
movwf Count
clrf MpyDiv30 ;quotient
clrf MpyDiv31
clrf MpyDiv40 ;remainder
clrf MpyDiv41
udiv1 bcf STATUS,C
rlf MpyDiv11,F
rlf MpyDiv10,F
rlf MpyDiv41,F
rlf MpyDiv40,F
movf MpyDiv20,W
subwf MpyDiv40,W
btfss STATUS,Z
goto udiv2
movf MpyDiv21,W
subwf MpyDiv41,W
btfss STATUS,C
goto udiv6
movwf MpyDiv41
movf MpyDiv20,W
subwf MpyDiv40,F
goto udiv3
udiv2 btfss STATUS,C
goto udiv5
movf MpyDiv21,W
subwf MpyDiv41,F
btfss STATUS,C
decf MpyDiv40,F
movf MpyDiv20,W
subwf MpyDiv40,F
udiv3 bsf STATUS,C
udiv4 rlf MpyDiv31,F
rlf MpyDiv30,F
decfsz Count,F
goto udiv1
retlw 0

udiv5 goto udiv7
udiv6 nop
udiv7 goto udiv8
udiv8 goto udiv4
vege goto vege

END
(#) norcseszto válasza norcseszto hozzászólására (») Okt 19, 2005 /
 
Örömömben majdnem elfelejtettem:
köszi a segítséget mspike
(#) mspike válasza norcseszto hozzászólására (») Okt 20, 2005 /
 
Igazán nincs mit.
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem