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 8
Author: James Ashley Hillman
This code was originally located @ http://www.piclist.com


Follow this link to go back

;***********************************************************
;Unsigned 24 bit by 8 bit divide routine
;
; Inputs:
; Dividend - x,x+1,x+2 (x+2 - most significant!)
; Divisor - y
; Temporary:
; Counter - counter
; Output:
; Quotient - x,x+1,x+2 (x+2 - most significant!)
; Remainder - x+3
;
; Size: 17
; Timing: 342 cycles (including call and return)
;
; This is basically Nikolai Golovchenko's 24 by 16 bit
; divide routine, with some instructions removed to
; optimise it for an 8 bit divide.
; Thanks to Nikolai for the original post.
;
; James Hillman, 2 December 2005
;***********************************************************

FXD248U:
CLRF x+3 ;remainder
MOVLW d'24'
MOVWF counter

LOOPU248
RLF x,W ;shift dividend left to move next bit to remainder
RLF x+1,F ;
RLF x+2,F ;
RLF x+3,F ;shift carry (next dividend bit) into remainder
RLF x,F ;finish shifting the dividend and save carry in x.0,
;since remainder can be 9 bit long in some cases
;This bit will also serve as the next result bit.

MOVF y,W ;substract divisor from 8-bit remainder
SUBWF x+3,F

;here we also need to take into account the 9th bit of remainder, which
;is in x.0. If we don't have a borrow after subtracting from
;8 bits of remainder, then there is no borrow regardless of 9th bit
;value. But, if we have the borrow, then that will depend on 9th bit
;value. If it is 1, then no final borrow will occur. If it is 0, borrow
;will occur. These values match the borrow flag polarity.

BTFSC STATUS,0 ;if no borrow after 8 bit subtraction
BSF x,0 ;then there is no borrow in result. Overwrite
;x.0 with 1 to indicate no borrow.
;if borrow did occur, x.0 already
;holds the final borrow value (0-borrow,
;1-no borrow)

BTFSS x,0 ;if no borrow after 9-bit subtraction
ADDWF x+3,F ;restore remainder. (w contains the value
;subtracted from it previously)
DECFSZ counter,F
GOTO LOOPU248
RETURN

Follow this link to go back






delicious
digg
reddit this Reddit this
Faves



 HOT in heaven!