Impresión de int16 en LCD con CCS Compiler

#1
Hola estimados. Tengo un problema al mostrar una variable unsigned int16 en un LCD.
Lo que hace el código es sumar 4 variables (5 a 200) de tipo unsigned int8 y lo guarda en una unsigned int16.
Al querer imprimirlo en un LCD 2x16, solo muestra las sumas de valores inferiores a 256, al ser valores superiores a este, se imprimen otros números. Por ejemplo: cuando todas las variables unsigned int8 son 200, la suma de la misma guardada en la variable unsigned int16 debería ser 800, pero el LCD muestra 32.
¿A qué se debe este problema?.
De antemano, muchas gracias.

El código resumido es:
void main ()
{
....
unsigned int16 tic = 2000;

unsigned int8 md_1 = 5;
unsigned int8 md_2 = 5;
unsigned int8 md_3 = 5;
unsigned int8 md_4 = 5;
.....

lcd_gotoxy(1,1);
printf(lcd_putc, "%lu", tic);
lcd_gotoxy(1,2);
printf(lcd_putc, "%u %u %u %u", md_1, md_2, md_3, md_4);
.....

def_par( &md_1, &md_2, &md_3, &md_4); //Función para obtener valores de 5 a 200
tic = md_1 + md_2 + md_3 + md_4; // Suma los valores y lo almacena en tic
.....
}
 
#2
En el printf de tic, no creo que te haga falta indicar que es un entero largo. Con %u tendría que ser suficiente.

En cuanto a la suma de enteros de la última línea, es posible que el compilador crea que la suma debe ser int8, para luego transformarse a int16, cuando en realidad deberían transformarse a int16 antes de hacer la suma. Algo así:
C:
tic = (unsigned int16)md_1 + (unsigned int16)md_2 + (unsigned int16)md_3 + (unsigned int16)md_4;
 

Temas similares

Arriba