#includecblock 0x0C bcd0, bcd1, bcd2 lo, hi counter endc mov macro __x, __y movlw __x movwf __y endm mov 0x06, bcd2 mov 0x55, bcd1 mov 0x35, bcd0 call bcd2bin16 nop ;******************************************************************************* ; Input: packed BCD in bcd2:bcd1:bcd0 (modified!) ; bcd0 = tens:ones ; bcd1 = thou:hund ; bcd2 = 0:tenk ; Output: 16 bit binary in hi:lo ;Temporary: counter ; Size: 23 instructions ; Timing: 2+2+16*(6+12+3)-1+2=341 instruction cycles ; ; Notes: The routine uses BCD division by 2. Each iteration ; the LSB of BCD value (which coincides with correspondent ; binary bit) is shifted to output and BCD value is ; divided by 2. To do the division, BCD is shifted right ; once and corrected. Correction: if MSB of a nibble is set, ; subtract 3 from it. ; ;January 22, 2001 by Nikolai Golovchenko ;******************************************************************************* bcd2bin16 movlw 16 movwf counter bcd2bin16loop clrc rrf bcd2, f rrf bcd1, f rrf bcd0, f rrf hi, f rrf lo, f clrw btfsc bcd0, 3 iorlw 0x03 btfsc bcd0, 7 iorlw 0x30 subwf bcd0, f clrw btfsc bcd1, 3 iorlw 0x03 btfsc bcd1, 7 iorlw 0x30 subwf bcd1, f decfsz counter, f goto bcd2bin16loop return ;******************************************************************************* END
file: /Techref/microchip/math/radix/bcd2bin16.htm, 1KB, , updated: 2006/5/18 17:58, local time: 2024/11/24 16:34,
owner: NG--944,
18.117.78.215:LOG IN
|
©2024 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? <A HREF="http://ecomorder.com/techref/microchip/math/radix/bcd2bin16.htm"> Packed BCD to 16 bit binary conversion</A> |
Did you find what you needed? |
Welcome to ecomorder.com! |
Welcome to ecomorder.com! |
.