hola! ayuda ayuda
ya conecte todo y utilice lo que me habian indicado pero lo hice con ansi c, pero no entiendo que hago mal porque no me esta funcionando ... es mas no entiendo porque solo me reconoce las letras a z y q cuando conecto un teclado en vez del lector y con el lector naaaada... aqui va mi programita ... me ayudan porfavor_¿?
#include <htc.h>
#include <delay.h>
#include <delay.c>
#include <lcd.c>
#include <lcd.h>
#define XTAL_FREQ 4MHZ
#define BRATE 9600
#define BUFF_SIZE 64
#define LCD_RS RE2
#define LCD_RW RE1
#define LCD_EN RE0
#define LCD_DATA PORTD
#define LCD_STROBE ((LCD_EN = 1),(LCD_EN = 0))
//DEFINICIONES GLOBALES
int cantidad;
unsigned char code_asc[10];
char got_interrupt;
char interrupt_count;
char status_b3;
unsigned char edge, bitcount;
int q;
unsigned char m;
//DECLARACION DE SUBRUTINAS
void interrupt int_ext (void);
void inicializa_kb(void);
void decode (unsigned char sc);
void lcd_cadena (const char * cadena);
void lcd_escribir_dato (char);
void convertir_cadena();
//TABLA DE CARACTERES COSRRESPONDIENTES A LA PULSACION DE LA TECLA
//1.MODALIDAD NORMAL (SIN PULSAR SHIFT)
unsigned char const unshifted[68][2] = {
0x0d,9,
0x0e,'º', 0x15,'q', 0x16,'1', 0x1a,'z', 0x1b,'s', 0x1c,'a', 0x1d,'w',
0x1e,'2', 0x21,'c', 0x22,'x', 0x23,'d', 0x24,'e', 0x25,'4', 0x26,'3',
0x29,' ', 0x2a,'v', 0x2b,'f', 0x2c,'t', 0x2d,'r', 0x2e,'5', 0x31,'n',
0x32,'b', 0x33,'h', 0x34,'g', 0x35,'y', 0x36,'6', 0x39,',', 0x3a,'m',
0x3b,'j', 0x3c,'u', 0x3d,'7', 0x3e,'8', 0x41,',', 0x42,'k', 0x43,'i',
0x44,'o', 0x45,'0', 0x46,'9', 0x49,'.', 0x4a,'-', 0x4b,'l', 0x4c,'ñ',
0x4d,'p', 0x4e,'+', 0x52,'´', 0x54,'`', 0x55,'¡', 0x5a,13, 0x5b,'+',
0x5d,'ç', 0x61,'<', 0x66,8, 0x69,'1', 0x6b,'4', 0x6c,'7', 0x70,'0',
0x71,'.', 0x72,'2', 0x73,'5', 0x74,'6', 0x75,'8', 0x79,'+', 0x7a,'3',
0x7b,'-', 0x7c,'*', 0x7d,'9',
0,0
};
//1.MODALIDAD MAYUSCULA (SHIFT PULSADO)
unsigned char const shifted[68][2] = {
0x0d,9,
0x0e,'ª', 0x15,'Q', 0x16,'!', 0x1a,'Z', 0x1b,'S', 0x1c,'A', 0x1d,'W',
0x1e,'"', 0x21,'C', 0x22,'X', 0x23,'D', 0x24,'E', 0x25,'$', 0x26,'•',
0x29,' ', 0x2a,'V', 0x2b,'F', 0x2c,'T', 0x2d,'R', 0x2e,'%', 0x31,'N',
0x32,'B', 0x33,'H', 0x34,'G', 0x35,'Y', 0x36,'&', 0x39,'L', 0x3a,'M',
0x3b,'J', 0x3c,'U', 0x3d,'/', 0x3e,'(', 0x41,';', 0x42,'K', 0x43,'I',
0x44,'O', 0x45,'=', 0x46,')', 0x49,':', 0x4a,'_', 0x4b,'L', 0x4c,'Ñ',
0x4d,'P', 0x4e,'?', 0x52,'¨', 0x54,'^', 0x55,'¿', 0x5a,13, 0x5b,'*',
0x5d,'Ç', 0x61,'>', 0x66,8, 0x69,'1', 0x6b,'4', 0x6c,'7', 0x70,'0',
0x71,'.', 0x72,'2', 0x73,'5', 0x74,'6', 0x75,'8', 0x79,'+', 0x7a,'3',
0x7b,'-', 0x7c,'*', 0x7d,'9',
0,0
};
//PROGRAMA PRINCIPAL
void main(void){
TRISB=0x09;
TRISE0=0; //RE0 como salida
TRISE1=0; //RE1 como salida
TRISE2=0; //RE2 como salida
TRISD=0x00;
//PORTB=0x00;
PORTE=0x00;
PORTD=0x00;
ADCON1=0x06;
cantidad="0000";
//code_asc="0000000";
inicializa_kb (); // Inicializa la recepcion del teclado
RBPU=0; // Pull_up activo para el puerto B
DelayUs(5);
//Inicializa las variables usadas por la rutina de interrupcion antes de activar las interrupciones
interrupt_count=0;
got_interrupt=0;
status_b3=0;
INTEDG=0; // Bit de seleccion del tipo de flanco para la interrupcion (0=Flanco de bajada)
INTF=0;
INTE=1; // Bit de habilitacion de interrupcion externa para RB0/INT
GIE=1; // Bit de habilitacion de interrupciones globales
//Bucle principal
//Verificar si se produce alguna interrupcion (got_interrupt). Si es asi, contar, borrar
//el flag y esperar 50ms, reactivando la gestion de las interrupciones
while (1){
if (got_interrupt==1){ //Verificar si se produce alguna interrupcion (got_interrupt)
got_interrupt=0; // Borrar el flag global que se inicio en la rutina de servicio
// DelayMs(50); //Esperar 50ms para evitar rebotes en los contactos de las teclas
INTF=0;
INTE=1; // Bit de habilitacion de interrupcion externa para RB0/INT
} //Fin del IF
} //Fin del while
} //Fin del MAIN
//Subrutina para INICIALIZAR TECLADO
void inicializa_kb(void){
unsigned char edge, bitcount; // 0 = neg. 1 = pos
edge=0; // 0=flanco de bajada y 1= flanco de subida
bitcount=11;
}
//INTERRUPCION EXTERNA
void interrupt int_ext(void){
unsigned char data;
if( bitcount<11 && bitcount>2){ //Los bits del 3 al 10 son datos.
//Los bits de paridad, de comienzo y de fin son ignorados.
data=(data>>1); // Se desplaza un lugar a la derecha
status_b3=RB3;
if (status_b3==1){
data= data | 0x80;
}
}
if(--bitcount==0){ // Todos los bits fueron recibidos
lcd_init();
lcd_clear();
lcd_goto(0);
lcd_puts("Articulos =");
lcd_goto(12);
lcd_puts("cantidad");
lcd_goto(64);
lcd_puts("Precio =");
lcd_goto(73);
decode(data); // Envia data la SUBRUTINA DECODE
DelayMs(100);
data=0;
bitcount=11;
got_interrupt=1;
}
got_interrupt=1;
interrupt_count++;
INTF=0;
q=0;
}
//SUBRUTINA DECODE
void decode (unsigned char sc){
static unsigned char is_up=0, shift=0, mode=0;
unsigned char i,q;
//El ultimo dato recibido fue el identificador up-key
if (!is_up){
switch (sc){
case 0xF0: // La tecla de up-key
is_up=1;
break;
case 0x12: // Shift izquierdo
shift=1;
break;
case 0x59: // Shift derecho
shift=1;
break;
default:
if(!shift){ // Si shift no esta presionado, mirar la tabla del scancode
for (i=0;unshifted
[0]!=sc && unshifted [0]; i++ );
if (unshifted[0]==sc){
code_asc[0]=unshifted[1];
lcd_puts (code_asc);
} //fin del switch dentro del if y del for
} //fin del if dentro del for
} // si shift no esta presionado
else{ // Si shift esta presionado
for (i=0; shifted[0]!=sc && shifted [0]; i++ );
if (shifted[0]==sc){
code_asc[0]=shifted[1];
lcd_puts (code_asc);
} // Fin del if dentro del switch
} // Fin del else
break;
} // Fin del switch
} // Fin del if
else{
is_up=0;
switch (sc){
case 0x12: //Shift Izquierdo
shift=0;
break;
case 0x59: //Shift Derecho
shift=0;
break;
}
} // Fin del else
} // Fin de la SUBRUTINA DECODE