TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: vulca en 07 de Agosto de 2021, 22:19:54
-
Buneas
Estoy teniendo problemas al querer imprimir un número entero en un display lcd LM016L mayor a 126
Esta es son mis encabezados y configuración
#include<16f877a.h>
#fuses XT, NOWDT, PUT, NOPROTECT, BROWNOUT, NOCPD, NOWRT, NODEBUG
#use delay(clock=4M)
#define use_portd_lcd true //se define el puerto para la LCD
#define use_portb_kbd true //se define el puerto para el teclado matricial
#include<lcd.c> //libreria de lcd
#include<kbd.c> //libreria de teclado
#include<stdio.h>
#include<stdlib.h>
Sección de impresión
int directorio[30] = {13264879, 64849217, 31974682, 98663241};
int fila = 0;
printf(lcd_putc "%d", directorio[fila]);
Dentro de la simulación de proteus al querer imprimir 129 aparce -127
-
printf(lcd_putc "%d", directorio[fila]);
Si especificas signed (%d) entenderá signed.
Debió ser:
printf(lcd_putc "%u", directorio[fila]); // unsigned
-
Lo utilice pero para los casos donde quiero imprimir 13264879 y 64849217 me da 239 y 65 respectivamente. Al igual que con los demás datos.
lcd_gotoxy(1,1);
printf(lcd_putc "%u", directorio[fila]);
lcd_gotoxy(1,2);
printf(lcd_putc "%u", directorio[fila + 1]);
Por lo que veo ahora si imprimo 256 aparece 0.
Entiendo que es por que es el límite con 8 bits y anteriormente el octavo bit representaba el signo. Hay alguna forma de solucionarlo?
-
Ya lo conseguí, tuve que cambiar el tipo de dato a int32.
Pongo la solución por si alguien le sirve algún día.
unsigned int32 directorio[10] = {13264879, 64849217, 31974682, 98663241};
int fila = 0;
...
printf(lcd_putc "%lu", directorio[fila]);