Home     Contact     Projects     Experiments     Circuits     Theory     BLOG     PIC Tutorials     Time for Science     RSS     Terms of services     Privacy policy  
   
 Home      Projects     Experiments     Circuits     Theory     BLOG     PIC Tutorials     Time for Science   



All about PIC microcontrollers

Within these pages, you can find many useful pieces of code mostly in assembly for the Microchip PIC micro controller family. A lot of people have spend many hours trying to put the bits and bytes together. If the code is NOT written by a member of the PCB Heaven community, then a link will be added above the code with the original website that this code was found.
Because the code is copied to our servers, you should know that:

  • The responsible web master of the website that the code is taken, has been informed and he has agreed to copy the code
  • All emails from the above contact have been kept as records but due to personal privacy cannot be shown in public.
  • The author of the code is always clearly indicated above the code. In some cases the author is unknown. If you happen to be the author of the code or you know the person who wrote it, please inform us by email and it will be added ASAP.

We would personally like to send the credits to all the people that managed to write some very interesting code and publish it, and special thanx to the people that originally hosted those code snippets and gave us the permission to copy them.


View code
24 bits by 16
Author: Nikolai Golovchenko
This code was originally located @ http://www.piclist.com


Follow this link to go back

;Inputs:
; Dividend - AARGB0:AARGB1:AARGB2 (0 - most significant!)
; Divisor - BARGB0:BARGB1
;Temporary:
; Counter - LOOPCOUNT
; Remainder- REMB0:REMB1
;Output:
; Quotient - AARGB0:AARGB1:AARGB2
;
; Size: 28
; Max timing: 4+24*(6+6+4+3+6)-1+3+2=608 cycles (with return)
; Min timing: 4+24*(6+6+5+6)-1+3+2=560 cycles (with return)
;

FXD2416U:
CLRF REMB0
CLRF REMB1
MOVLW 24
MOVWF LOOPCOUNT
LOOPU2416
RLF AARGB2, F ;shift left divider to pass next bit to remainder
RLF AARGB1, F ;and shift in next bit of result
RLF AARGB0, F

RLF REMB1, F ;shift carry into remainder
RLF REMB0, F

RLF LOOPCOUNT, F ;save carry in counter

MOVF BARGB1, W ;substract divisor from remainder
SUBWF REMB1, F
MOVF BARGB0, W
BTFSS _C
INCFSZ BARGB0, W
SUBWF REMB0, W ;keep that byte in W untill we make sure about borrow

SKPNC ;if no borrow
BSF LOOPCOUNT, 0 ;set bit 0 of counter (saved carry)

BTFSC LOOPCOUNT, 0 ;if no borrow
GOTO UOK46LL ;jump

MOVF BARGB1, W ;restore remainder if borrow
ADDWF REMB1, F
MOVF REMB0, W ;read high byte of remainder to W
;to not change it by next instruction
UOK46LL
MOVWF REMB0 ;store high byte of remainder
CLRC ;copy bit 0 to carry
RRF LOOPCOUNT, F ;and restore counter
DECFSZ LOOPCOUNT, f ;decrement counter
GOTO LOOPU2416 ;and repeat loop if not zero

RLF AARGB2, F ;shift in last bit of result
RLF AARGB1, F
RLF AARGB0, F
RETURN

Follow this link to go back






delicious
digg
reddit this Reddit this
Faves



 HOT in heaven!