; by Rich Leggitt with tweaks by Scott Dattalo and bugfix by Dmitry Kiryashov and Nikolai Golovchenko
; given 16 bit data in HI and LO, extract decimal digits
; requires one Output register called temp, HI and LO are destroyed.
; 42 instructions and less than 269 (or 252 with known_zero) instructions executed
clrf temp
goto $+2 ;[NG] was: skip
sub10k incf temp,f
movlw 10000 & 255
subwf LO,f
;Scott Dattalo says:
;If you have a ram location that's known to be zero, then
;the following [the IF] can be replaced with [the ELSE]
IFNDEF known_zero
movlw 10000 >> 8
skpc
movlw (10000>>8)+1 ;[NG] was: addlw 1 ; this sucks
subwf HI,f
ELSE
rlf known_zero,W
sublw (10000>>8)+1 ;bugfix by Dmitry Kiryashov and Nikolai Golovchenko
subwf Hi,F
ENDIF
bc sub10k ;9*7=63/8*7=56 inst in loop for 60900 (worst)
output(temp);
movlw 10
movwf temp
add1K decf temp,f
movlw 1000 & 255
addwf LO,f
;Scott Dattalo says:
;If you have a ram location that's known to be zero, then
;the following [the IF] can be replaced with [the ELSE]
IFNDEF known_zero
movlw 1000 >> 8
skpnc
movlw (1000>>8)+1 ;[NG] was: addlw 1
addwf HI,f
ELSE
rlf known_zero,w
addlw 1000 >> 8
addwf HI,f
ENDIF
bnc add1k ;9*10=90/8*10=80 inst in loop for 60900
output(temp);
;Scott takes over here
clrf temp
movlw 100
goto $+2 ;[NG] was: skip
sub100
incf temp,f
subwf LO,f
skpnc ;[NG] was: skpc
goto sub100
decf HI,f
btfss HI,7 ;Check msb instead of carry for underflow.
goto sub100 ;4 inst per loop to 200 then 7 per loop to 900.
;Total 64(?) in loop for worst case
;at this point, HI = 0xff, and 0 <= LO <= 99
output(temp)
movlw 10
movwf temp
add10 decf temp,f
addwf LO,f
bnc add10 ;40 inst in loop for worst case.
output(temp);
output(LO);
return
| file: /techref/microchip/math/radix/b2a-16b5a-rl.htm, 3KB, , updated: 2002/10/31 15:57, local time: 2008/11/22 00:51,
38.103.63.59:LOG IN
|
| ©2008 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? Please DO link to this page! Digg it! <A HREF="http://piclist.org/techref/microchip/math/radix/b2a-16b5a-rl.htm"> PIC Microcontoller Radix Math Method</A> |
| Did you find what you needed? |
|
o List host: MIT, Site host massmind.org, Top posters @20081122 Apptech, Jinx, Xiaofan Chen, olin piclist, Vitaliy, William \Chops\ Westfield, Tamas Rudnai, JonnyMac, Alan B. Pearce, Gerhard Fiedler, * Page Editors: James Newton, David Cary, and YOU! * Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters. * Monthly Subscribers: Shultz Electronics, Timothy Weber, on-going support is MOST appreciated! * Contributors: Richard Seriani, Sr. |
|
.