//*****************************************************************************
#DEFINE SIZE_UID 10 // Serial Buffer Size
/***************************************************************/
// VARIABLES
/***************************************************************/
//Definicion de union
union IDcard {
int8 Enbytes[4];
int16 EnHWord[2];
int32 EnWord;
};
union IDcard IDcard;
char UID[SIZE_UID]; // ID 125 K
char c=0x00;
int isCard=0x00;
int counter_read2=0;
#INT_RDA2
void RDA_isr2(); // Serial ISR used
//!************** SERIAL BUFFER ISR *******************************************
#int_RDA2 // Interrupción por recepción de datos UART2
void RDA_isr2(void) { // Interrupción recepción serie USART
c=0x00; // Inicializo caracter recibido
UID[counter_read2++]=c; //
if(counter_read2==5) { // 00-00-00-00-'cheksum'
if((UID[0] ^ UID[1] ^ UID[2] ^ UID[3] ^ UID[4]) == 0){ // Valido el cheksum
IDcard.Enbytes[0] = UID[3]; // 4
IDcard.Enbytes[1] = UID[2]; // 3
IDcard.Enbytes[2] = UID[1]; // 2
IDcard.Enbytes[3] = UID[0]; // 1
counter_read2=0x00; // Reincio contador
isCard=1; // Tarjeta presente
}
else{ //
memset(UID
,NULL
,sizeof(UID
)); // Limpiar buffer counter_read2=0x00; // Reincio contador
isCard=0x00; // Tarjeta invalida
}
}
}
fprintf (debug
,"[%010Lu]\r\n",IDcard.
EnWord); // [0003044755]