loloco.. hola a mi si me interesa tu proyecto, tengo el mismo problema del teclado pero con el pic18f4550.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#if defined(__PCH__)
#if defined use_portb_kbd
#byte kbd = 0xF81 // This puts the entire structure
#else
#byte kbd = 0xF83 // This puts the entire structure
#endif
#else
#if defined use_portb_kbd
#byte kbd = 6 // on to port B (at address 6)
#else
#byte kbd = 8 // on to port D (at address 8)
#endif
#endif
#if defined use_portb_kbd
#define set_tris_kbd(x) set_tris_b(x)
#else
#define set_tris_kbd(x) set_tris_d(x)
#endif
/*Area de libreria*/
#include <LCD.C>
#include <kbd.c>
#include <string.h>
#use fast_io(a)
Función principal
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
set_tris_a(0x1F);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
kbd_init();
port_b_pullups(true);
while(true)
{
llamado a la función menu_llamada
}
int menu_llamada ( )
{
char t ;
kbd_init();
t=kbd_getc();
/* En este punto ya la variable t llega con el dato errado*/
if(t!=0 )
{
bell();
if(t == '1')
{
return 1;
}
if(t == '2')
{
return 2 ;
}
if(t == '3')
{
return 3 ;
}
if(t == '4')
{
return 4 ;
}
if(t == '5')
{
return 5 ;
}
if(t == '6')
{
return 6 ;
}
if(t == '7')
{
return 7 ;
}
if(t == '8')
{
return 8 ;
}
if(t == '9')
{
return 9 ;
}
if(t == '0')
{
return 0 ;
}
if(t == '*')
{
return 14 ;
}
if(t == '#')
{
return 13 ;
}
}
return 16;
}
Pero aquí estás usando este fuse...Hola a todos. Estoy usando un PIC16F877A con un oscilador a cristal 4.3587MHz
El problema no creo que lo tengas con los fuses de la palabra de configuración.Realicé los ajustes necesarios con respecto al XT y era HS pero me sigue dando el mismo error.
Ahora lo que haré será terminar de revisar el Fuse como me indicaste para ver que más está mal y te cuente.
Una recomendación para ahorrar pines, es usar el teclado y la pantalla por el mismo puerto.
Éste fragmento de código es para usar ambos por el puerto B en el PIC16F877A:
#define LCD_DATA_PORT getenv("SFRORTB")
#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd.c>
Y debe ser colocado debajo de #use delay()
Prueba de esta forma, es funcional como te menciono y está comprobado.
No olvidar activar los resistores pull-up en el puerto B.
Suerte.
Saludos.
No, ya no se podrán usar las interrupciones del puerto B, porque se activarían con los datos de la pantalla.
Si requieres usar esas interrupciones, es mejor cambiar la pantalla y el teclado a otro puerto.