La distancia entre los lectores es de 30cm
una imagen del esquemático:
Aparte también tengo un XBee y un reloj RTC conectados al PIC.
el código es harto... pero lo que considero importante sería esto:
#include <16f88.h>
#FUSES HS, NOWDT, NOBROWNOUT, NOLVP
#use delay(clock=20000000)
#use i2c(master, sda=pin_B1, scl=pin_B4 )
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B2, XMIT = PIN_B5, BITS = 8, STREAM = COM_1) //xbee
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B0, XMIT = PIN_B5, BITS = 8, STREAM = COM_2) //rfid1
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B6, XMIT = PIN_B5, BITS = 8, STREAM = COM_3) //rfid2
#int_ext // interrupción del RFID 1
void ext_isr(){
byte_1=fgetc(COM_2); //comienza trama
byte_2=fgetc(COM_2);
byte_3=fgetc(COM_2);
byte_4=fgetc(COM_2);
byte_5=fgetc(COM_2);
byte_6=fgetc(COM_2);
byte_9=fgetc(COM_2); //se envia inicial
byte_10=fgetc(COM_2);
byte_11=fgetc(COM_2);
byte_12=fgetc(COM_2);
byte_13=fgetc(COM_2);
byte_14=fgetc(COM_2); //se envia final
byte_7=fgetc(COM_2);
byte_8=fgetc(COM_2);
byte_15=fgetc(COM_2);
byte_16=fgetc(COM_2);
interrupcion=1;
}
void rb_rfid(){
byte_1=fgetc(COM_3); //comienza trama
byte_2=fgetc(COM_3);
byte_3=fgetc(COM_3);
byte_4=fgetc(COM_3);
byte_5=fgetc(COM_3);
byte_6=fgetc(COM_3);
byte_9=fgetc(COM_3); //se envia inicial
byte_10=fgetc(COM_3);
byte_11=fgetc(COM_3);
byte_12=fgetc(COM_3);
byte_13=fgetc(COM_3);
byte_14=fgetc(COM_3); //se envia final
byte_7=fgetc(COM_3);
byte_8=fgetc(COM_3);
byte_15=fgetc(COM_3);
byte_16=fgetc(COM_3);
interrupcion=1;
}
void main(){
while(1){
if(kbhit(COM_3)){ //interrupcion del rfid2
rb_rfid();}
if(cont==0 && interrupcion==1){
cadena.cadena1[0]=byte_9;
cadena.cadena1[1]=byte_10;
cadena.cadena1[2]=byte_11;
cadena.cadena1[3]=byte_12;
cadena.cadena1[4]=byte_13;
cadena.cadena1[5]=byte_14;
get_time();
tiempo1 = sec + min*60 + hrs*3600;
cont=2;
interrupcion=0;
led();
}
}
tengo las variables declaras y todo ok en el código.......
dentro del while(1) pregunta si tiene algo para leer y luego pregunta por la variable "interrupcion"