problema con operaciones matematicas en picc

estoy realizando un codigo para controlar un AD9851, este integrado me genera una onda senoidal de frecunecia determinada a partir de una palabra de configuracion de 32 bits. la formula para calcular la frecuencia es f=(W*fclk)/2^32, donde fclk es 180 MHz como la frecuencia requerida se digitara por teclado matricial despejo W=f/0.041909515, el resultado es un dato de 32 bits
el problema lo tengo al manejar la variables de tipo flotante ya que los resultados obtenidos en la lcd no concuerdan con la calculadora
utilizo un pic 16f877a, tengo que decir que si declaro las variables de tipo int32 si me hace bien las operaciones, en cambio cuando las declaro tipo float hay problema sobre todo cuando la frecuncia requerido es en MHz
agradezco que puedan ayudarme a resolver este problema, aca dejo el codigo que he realizado



#include <16f877a.h>

#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(d)

#include <lcd.c>
#include <kbd_lib.c>

void main()
{
char tecla;
int conta,tecla_lcd;
float palabra,dato,dato1;




port_b_pullups(true);
lcd_init();
kbd_init();


do {

tecla=kbd_getc();

if(tecla!=0)
{

tecla_lcd = tecla - 48;
printf(lcd_putc "%u", tecla_lcd);

if(tecla_lcd!=17 && tecla_lcd!=18 && tecla_lcd!=19 && tecla_lcd!=250 && tecla_lcd!=243)
{

conta++;
switch(conta)
{
case 1:
dato = tecla_lcd;
break;

case 2:
dato = (dato*10)+ tecla_lcd;
break;

case 3:
dato = (dato*10)+ tecla_lcd;
break;

case 4:
dato = (dato*10)+ tecla_lcd;

default:
break;
}
}

else
{

switch(tecla_lcd)
{
case 17:
dato1=dato*1000000;
if(dato1>90000000)
{lcd_putc("ERROR FREC>90 MHZ");

}
Lcd_putc ("\f");
printf(lcd_putc "%f MHZ\n",dato);

palabra=dato1/0.041909515;
printf(lcd_putc "%f\n", palabra);
conta = 0;
dato1 = 0;
dato = 0;
break;

case 18:
dato1=dato*1000;

Lcd_putc ("\f");
printf(lcd_putc "%f KHZ\n",dato);

palabra=dato1/0.041909515;
printf(lcd_putc "%f\n",palabra);
conta = 0;
dato1 = 0;
dato = 0;
break;

case 19:

Lcd_putc ("\f");
printf(lcd_putc "%f HZ\n",dato);
palabra=dato/0.041909515;
printf(lcd_putc "%f\n",palabra);
conta = 0;
dato1 = 0;
dato = 0;
break;

case 250:
break;

case 243:
break;

case 20:
break;

default:
break;
}
}
}


} while (TRUE);
}
 
buenas tardes

soy nuevo en esto de la programacion en ccs c, quisiera pedirles el favor me colaboren, tengo el siguiente problema: quiero visualizar una variable de temperatura en lcd 2*16, tiene que mostar valores negativos y decimales. programo en ccs c. gracias por su atencion.
 
Atrás
Arriba