;Binary to decimal conversion (0..999) ; ;Input: NumH:NumL ;Output Hund:Tens:Ones ; ;If Input > 999 Output will roll over, e.g. ;for input=5678 output=678. ; ; ;Size: 34 instructions ;Execution time (max) including return: ;22+5*9-1+5*6-1+4*3-1+2 = 108 cycles ; ;5-July-2000 by Nikolai Golovchenko bin2dec999 movf NumH, w addlw 241 addwf NumH, w movwf Hund ;b_2 = 2a_2 - 15 addwf Hund, w addwf Hund, w addlw 253 movwf Tens swapf NumL, w andlw 0x0F addwf Tens, f addwf Tens, f ;b_1 = 6a_2 + 2a_1 - 48 addwf NumH, w sublw 251 movwf Ones addwf Ones, f addwf Ones, f addwf Ones, f movf NumL, w andlw 0x0F addwf Ones, f ;b_0 = a_0 - 4(a_2 + a_1) - 20 movlw 10 bin2dec999a ;9 cycles max addwf Ones, f decf Tens, f skpc goto bin2dec999a bin2dec999b ;6 cycles max addwf Tens, f decf Hund, f skpc goto bin2dec999b bin2dec999c ;3 cycles max addwf Hund, f skpc goto bin2dec999c return
Comments:
movlw B'00110000' ; the extra MSB part makes the table work iorwf Hund, F iorwf Tens, F iorwf Ones, F
movlw 0x30 addwf Hund,f addwf Tens,f addwf Ones,f return