sistema RFID Pic 18f4550. Almacena tags en EEPROM de pic . Utiliza Lector RF ID GP8f-r2. ###CODIGO### #define lcdport
Views 148 Downloads 29 File size 198KB
sistema RFID Pic 18f4550. Almacena tags en EEPROM de pic . Utiliza Lector RF ID GP8f-r2.
###CODIGO###
#define lcdport LATD
//bits del puerto D seran los bits de LCD
#define rs LATA.F0
//bit 0 de puerto A sera RS
#define rw LATA.F1
//bit 1 de puerto A sera RV
#define en LATA.F2
//bit 2 de puerto A sera EN
#define enable_int_global INTCON.GIE=1 #define disable_int_global INTCON.GIE=0 #define enable_int_externa INTCON.INT0IE=1
//habilita interrupcion global //deshabilita interrupcion global //Habilita interrupcion externa por RB0
#define enable_int_externa1 INTCON3.INT1IE=1 //Habilita interrupcion externa por RB1 #define disable_int_externa1 INTCON3.INT1IE=1 //Deshabilita interrupcion externa por RB1 #define disable_int_externa INTCON.INT0IE=0
//Deshabilita interrupcion externa por RB0
#define bandera_int_externa INTCON.INT0IF //bandera interrupcion externa en RB0 #define bandera_int_externa1 INTCON3.INT1IF //bandera interrupcion externa en RB1 #define Pin_Led_Lectura PORTE.F0 //Led de lectura en RE0 #define Pin_Led_Borrar PORTE.F1 //Led de lectura en RE1 #define Pin_Led_Nuevo PORTE.F2 //Led de lectura en RE2 #define Pin_Led_Prueba PORTA.F3 //Led de Prueba en RB7
void lcd_ini();
//inicializa LCD
void lcdcmd(unsigned char); void lcddata(unsigned char); void modoLectura(); void msj_modoBorrar(); void msj_modoNuevo(); void msj_TagBorrado(); void msj_TagGuardado(); void msj_TagNoExistente(); void msj_TagExistente(); void msj_AccesoHabilitado(); void msj_AccesoNoHabilitado(); void iniciarEEPROM();
void nuevoTag(char tagID[12]); void leerpuertoserie (); void borraTag(char tagID[12], int pos); void buscarTag(char tagID[12]); bit Led_Lectura; bit Led_Borrar; bit Led_Nuevo; bit Led_Prueba; int m = 0; int i=0; int j=0; int ii=0; int corte=0; int direccion; int tagencontrado=0; int posEncontrada=0; int nuevo=0; int borrar=0; char tagID[12]; unsigned char msj1[]="Modo Lectura"; unsigned char msj2[]="Ingrese TAG"; unsigned char msj3[]="Acceso Habilitado"; unsigned char msj4[]="Acceso No habilitado"; unsigned char msj5[]="Tag Guardado"; unsigned char msj6[]="Nuevo Tag"; unsigned char msj7[]="Ingrese TAG a borrar"; unsigned char msj8[]="Tag Existente"; unsigned char msj9[]="Tag Borrado"; unsigned char msj10[]="Tag No Existente";
void interrupt(){
//Vector de interrupciones
if(bandera_int_externa == 1){ bandera_int_externa = 0; Pin_Led_Nuevo = ~Led_Nuevo;
// Si ocurrio una interrupcion externa que viene del puerto RB0 (Tag_Nuevo)
Pin_Led_Borrar = 0; Pin_Led_Lectura = 0; Delay_10ms(); nuevo=1;
//Habilito bandera para nuevo registro
borrar=0; }
if(bandera_int_externa1 == 1){ /// Si ocurrio una interrupcion externa que viene del puerto RB1 (Borrar Tag) bandera_int_externa1 = 0; Pin_Led_Nuevo = 0; Pin_Led_Borrar = ~Led_Borrar; Pin_Led_Lectura = 0; Delay_10ms(); borrar=1;
//Habilito bandera para borrar registro
nuevo=0; } }
void config(){ OSCCON=0b01110111; ADCON1 |= 0x0F; CMCON |= 7;
enable_int_externa; enable_int_externa1; enable_int_global; TRISE = 0x00; TRISD=0; LATD=0; TRISA=0; LATA=0; PORTB = 0x00; //TMR0 activado, prescaler 1:2 // T0CON = 0b10000000;
UART1_Init(9600); Delay_ms(100);
// Inicializo Modulo UART a 9600 bps // Espero estabilizacion de UART
}
void main() { config(); modoLectura(); // iniciarEEPROM(); //esta funcion limpia eeprom while(1) { if (borrar==1) { msj_modoBorrar(); while (borrar==1) { leerpuertoserie(); //lee puerto serie y almacena en arreglo tagID if (i==12) { //Si recolecto los 12 digitos del tag ID, Intenta borrrar tag buscarTag(tagID); if (tagencontrado==1){ borraTag(tagID, posencontrada); //paso ID a borrar y posicion msj_TagBorrado(); } else { msj_TagNoExistente(); //no se puede borrar porque el tag no existe } i=0; borrar=0; } } Delay_1sec(); modoLectura(); }
if (nuevo==1) { msj_modoNuevo();
while (nuevo==1) { leerpuertoserie(); //lee puerto serie y almacena en arreglo tagID if (i==12) { //Recolecto los 12 d