HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

Cápsula técnica: restricciones en C18, en las funciones sprintf( ) y printf( ) para variables de punto flotante.

Descripción:

En el compilador C18, con el objeto de limitar el tamaño de las librerías printf ó sprintf, éstas no manejan variables con formato de punto flotante. El costo de incluir soporte de punto flotante en estas librería, haría que se duplicara su espacio ocupado en memoria de código.

La solución a esta limitación del compilador C18 es, sin embargo, sencilla: convertir el número con formato de punto flotante en dos números enteros, y manejando punto fijo. El primer valor es la parte entera y el segundo, la parte fraccionaria.

Puede bajar aquí el documento de Microchip en donde se explica con más detalle lo arriba expuesto:

CONVERTIR-DE-PUNTO-FLOTANTE-A-STRING-EN-C18.pdf

 

 

He aquí un ejemplo de esta conversión: en el programa mostrado abajo, la variable 'a' con un valor inicial de 3.0048, y que fue definida previamente como de punto flotante, es convertida a su parte entera y su parte decimal (ambos números deben ser declarados previamente como enteros).

Finalmente, en la función sprintf, se manejan ambas variables "entero" y "decimal" con punto fijo, pudiendo mostrarse la información almacenada en el string "array" en el LCD del sistema. 

Note que la parte decimal puede ajustarse a 1 dígito, multiplicando por 10, a 2 dígitos multiplicando por 100 y así sucesivamente.

float a;
int entero,decimal;
char array[10];
void main( )
{
init_bolt( );
InitLCD( );
ClearScreen( );
a=3.0048;
entero=a; //PARTE ENTERA
decimal=(a-entero)*10000; //PARTE DECIMAL
sprintf(array,"%3d.%04d",entero,decimal); //CONVIERTE A STRING
PrintString(array);
for(;;);
}

El programa fuente completo de una aplicación en C18 para el sistema Bolt 18F2550, en la cual se lee la temperatura del sensor DS18B20 para posteriormente mostrarla en el LCD, es el siguiente:

C18-BOLT-DS18B20.c

Un manejo similar se haría en el caso de la función printf( ).