Mi problema era el siguiente: realizando un medidor de distancia para mi bicicleta, mediante la cuenta de los pulsos entrantes por el TMR1 de un 16f877a, ya que el timer es de 16 bits uso una variable int16 (metros) para obtener el valor y cuando la cuenta es mayor a 1000 metros, ahora los convierto a kilómetros (float) y estos los muestro en un LCD; el problema era que al dividir "metros"/1000 para obtener la medida en kilómetros, es decir convertir los metros (int 16) a kilómetros (float) el LCD no imprimía los números después del punto decimal.
void cuenta_mts(){
metros = get_timer1();
if (metros>1000){
kms = metrosf/1000;
}
}
Código donde se imprime metros o kilómetros:
if (metros < 1000){
lcd_gotoxy (10, 1) ;
printf (lcd_putc, "%05Lum",metros);
}
else{
lcd_gotoxy (10, 2) ;
printf (lcd_putc, "%2.3fk",kms);
}
La solución fué "preconvertir" los metros que eran int16 a float y después realizar la división.
void cuenta_mts(){
metros = get_timer1();
if (metros>1000){
metrosf = metros; //metros es int16 y metrosf ya es flotante
kms = metrosf/1000;
}
}
Espero que a alguien más le ayude y que mi tema este en el lugar y con las características correctas, gracias.