// Convert 16 bit binary to 5 BCD characters // from an application note by Maxim Semiconductors // http://pdfserv.maxim-ic.com/arpdf/software/DI_1298.asm extern unsigned char NumH, NumL; extern unsigned char TenK, Thou, Hund, Tens, Ones; void bin2bcd(unsigned int r) { NumH = r >> 8; NumL = r & 0xff; #asm #include ;********************** ; 16bit binary 2 BCD ;********************** bin2bcd ; Takes number in NumH:NumL ; Returns decimal in ; TenK:Thou:Hund:Tens:Ones swapf _NumH,w andlw 0x0f addlw 0xf0 movwf _Thou addwf _Thou,f addlw 0xe2 movwf _Hund addlw 0x32 movwf _Ones movf _NumH,w andlw 0x0f addwf _Hund,f addwf _Hund,f addwf _Ones,f addlw 0xe9 movwf _Tens addwf _Tens,f addwf _Tens,f swapf _NumL,w andlw 0x0f addwf _Tens,f addwf _Ones,f rlf _Tens,f rlf _Ones,f comf _Ones,f rlf _Ones,f movf _NumL,w andlw 0x0f addwf _Ones,f rlf _Thou,f movlw 0x07 movwf _TenK movlw 0x0a Lb1: addwf _Ones,f decf _Tens,f btfss 3,0 goto Lb1 Lb2: addwf _Tens,f decf _Hund,f btfss 3,0 goto Lb2 Lb3: addwf _Hund,f decf _Thou,f btfss 3,0 goto Lb3 Lb4: addwf _Thou,f decf _TenK,f btfss 3,0 goto Lb4 #endasm }