Ando de nuevo liado
Bien hice el sistema como dijiste, funciona bien con el teclado y el LCD, pero en cuanto trato de leer la eprom no va
Me explico, he tenido que usar la libreria propia KBD2 porque la KBD solo lleva 3/4 teclas y yo quiero usar 4/4
Funciona, pero en el codigo que te paso no va en cuanto habilito las rutinas de lectura de la eprom.
A ver que se te ocurre
El mismo montaje con tu codigo si va
#include <16f84.h>
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#fuses XT,NOWDT
#include <kbd2.c>
#include <lcd.c>
#include <2432.c>
#define MAX 16
main()
{
int dato_read;
int n;
char k;
EEPROM_ADDRESS direccion;
port_b_pullups(TRUE);
lcd_init(); // Inicializar LCD
lcd_gotoxy(1,1);
lcd_putc("Tecla pulsada:"
;
while(1)
{
k = kbd_getc(); // Leer tecla.
if(k) // si no ha devuelto 0
{
lcd_gotoxy(16,1);
lcd_putc(k); // Visualizar la tecla pulsada en el LCD.
}
init_ext_eeprom();
for (n=0;n<MAX;n++)
{
dato_read = read_ext_eeprom(n);
printf(lcd_putc,"%u",dato_read);
delay_ms(1000);
}
}
}
La libreria que uso para el teclado es
/*-------------------------------------------*
| KBD2.C |
| Autor: Pedro Mª Jiménez |
| (c) Microsystems Engineering (Bilbao) |
*-------------------------------------------*/
// Funciones para la gestión del teclado de la Trainer PLUS.
// char kbd_getc() Devuelve el código ASCII de la tecla pulsada.
// Si no se pulsó ninguna, devuelve 0.
// Conexiones del teclado.
/*
RB0 RB1 RB2 RB3
^ ^ ^ ^
| | | |
|---|---|---|---|
RB4 ---> | 1 | 2 | 3 | F |
|---|---|---|---|
RB5 ---> | 4 | 5 | 6 | E |
|---|---|---|---|
RB6 ---> | 7 | 8 | 9 | D |
|---|---|---|---|
RB7 ---> | A | 0 | B | C |
|---|---|---|---|
*/
// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{"1","2","3","D"},
{"4","5","6","E"},
{"7","8","9","F"},
{"A","0","B","C"}};
#byte kbd_port_b = 6
char kbd_getc()
{
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++)
{
for(c=0x01, j=0; j<4; c<<=1, j++)
{
kbd_port_b = ~f;
delay_cycles(1);
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
if(t == c)
{
delay_ms(20);
tecla=KEYS
[j];
while(t==c)
{
restart_wdt();
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
}
break;
}
}
if(tecla)
break;
}
return tecla;
}
El resto son la estandar con los cambios para el puerto B en el lcd y pines A para eprom