Guys I need to covert 32 bit number to 8 digits bcd format.I did a little program.I need to cast this long vs short variables.Please help me.
I just looked at the converted assembly routine it looks like pretty inefficient
I use mikroC.
I just looked at the converted assembly routine it looks like pretty inefficient
I use mikroC.
Code:
bin2bcd32(unsigned long int x){
//unsigned short bcd[8];
unsigned short digits = 8;
bin2bcd32_Loop:
bcd[digits] = x % 10;
if(x<=9)
bcd[digits] = x;
else{
x = x / 10;
digits = digits - 1;
goto bin2bcd32_Loop;
}
}
Code:
_bin2bcd32:
;Freq Counter.c,149 :: bin2bcd32(unsigned long int x){
;Freq Counter.c,151 :: unsigned short digits = 6;
MOVLW 6
MOVWF bin2bcd32_digits_L0+0
;Freq Counter.c,153 :: bin2bcd32_Loop:
___bin2bcd32_bin2bcd32_Loop:
;Freq Counter.c,154 :: bcd[digits] = x % 10;
MOVF bin2bcd32_digits_L0+0, 0
ADDLW _bcd+0
MOVWF FLOC__bin2bcd32+0
MOVLW 10
MOVWF R4+0
CLRF R4+1
CLRF R4+2
CLRF R4+3
MOVF FARG_bin2bcd32_x+0, 0
MOVWF R0+0
MOVF FARG_bin2bcd32_x+1, 0
MOVWF R0+1
MOVF FARG_bin2bcd32_x+2, 0
MOVWF R0+2
MOVF FARG_bin2bcd32_x+3, 0
MOVWF R0+3
CALL _Div_32x32_U+0
MOVF R8+0, 0
MOVWF R0+0
MOVF R8+1, 0
MOVWF R0+1
MOVF R8+2, 0
MOVWF R0+2
MOVF R8+3, 0
MOVWF R0+3
MOVF FLOC__bin2bcd32+0, 0
MOVWF FSR
MOVF R0+0, 0
MOVWF INDF+0
;Freq Counter.c,155 :: if(x<=9)
MOVF FARG_bin2bcd32_x+3, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L__bin2bcd3241
MOVF FARG_bin2bcd32_x+2, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L__bin2bcd3241
MOVF FARG_bin2bcd32_x+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L__bin2bcd3241
MOVF FARG_bin2bcd32_x+0, 0
SUBLW 9
L__bin2bcd3241:
BTFSS STATUS+0, 0
GOTO L_bin2bcd3220
;Freq Counter.c,156 :: bcd[digits] = x;
MOVF bin2bcd32_digits_L0+0, 0
ADDLW _bcd+0
MOVWF FSR
MOVF FARG_bin2bcd32_x+0, 0
MOVWF INDF+0
GOTO L_bin2bcd3221
L_bin2bcd3220:
;Freq Counter.c,158 :: x = x / 10;
MOVLW 10
MOVWF R4+0
CLRF R4+1
CLRF R4+2
CLRF R4+3
MOVF FARG_bin2bcd32_x+0, 0
MOVWF R0+0
MOVF FARG_bin2bcd32_x+1, 0
MOVWF R0+1
MOVF FARG_bin2bcd32_x+2, 0
MOVWF R0+2
MOVF FARG_bin2bcd32_x+3, 0
MOVWF R0+3
CALL _Div_32x32_U+0
MOVF R0+0, 0
MOVWF FARG_bin2bcd32_x+0
MOVF R0+1, 0
MOVWF FARG_bin2bcd32_x+1
MOVF R0+2, 0
MOVWF FARG_bin2bcd32_x+2
MOVF R0+3, 0
MOVWF FARG_bin2bcd32_x+3
;Freq Counter.c,159 :: digits = digits - 1;
DECF bin2bcd32_digits_L0+0, 1
;Freq Counter.c,160 :: goto bin2bcd32_Loop;
GOTO ___bin2bcd32_bin2bcd32_Loop
;Freq Counter.c,161 :: }
L_bin2bcd3221:
;Freq Counter.c,162 :: }
RETURN
; end of _bin2bcd32
Last edited: