/*
;******************************************************************************
; *
; Filename: RFID READER *
; Date: Sunday, May 05, 2009 *
; File Version: 002 *
; *
; Author: Jason Lopez *
; Company: AtomSoft *
; *
;******************************************************************************
; *
; Files Required: P18F2525.INC *
; *
;******************************************************************************
*/
#include <p18f2525.h>
#include <delays.h>
#include <string.h>
#pragma config WDT = OFF, LVP = OFF, OSC = INTIO67, XINST = OFF
/************************************
Prototypes
*************************************/
void main(void);
void delay_s(int s);
void rx_isr (void);
void ErrLed(void);
void OkLed(void);
/************************************
Variables and Defines
*************************************/
unsigned char tempID[12];
unsigned char pntr;
#define LEDC LATCbits.LATC0
#define LEDA LATCbits.LATC1
/************************************
Interrupt Vectors
*************************************/
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
_asm
goto rx_isr //jump to interrupt routine
_endasm
}
#pragma code
/************************************
Main
*************************************/
void main(void){
char x;
unsigned char AtomID[12] = {10,48,70,48,51,48,52,48,51,69,65,13};
OSCCON = 0x72; //8MHz clock
while(!OSCCONbits.IOFS); //wait for osc stable
TRISC = RCSTA = TXSTA = 0x00;
INTCON = 0xC0;
BAUDCONbits.BRG16 = 0;
SPBRGH = 0x00;
SPBRG = 51;
RCSTA = 0x90;
TRISCbits.TRISC7 = 1; //Set both PORTC 7 and 6 as inputs.
TRISCbits.TRISC6 = 1;
IPR1bits.RCIP = 1; //Make Rx High Priority
PIE1bits.RCIE = 1; //Enable Rx Interrupt
PIR1bits.RCIF = 0; //Ensure Clear Flag
pntr = 0x00;
while(1){
if(pntr >= 12) {
pntr = 0;
if(memcmp(AtomID,tempID,12) == 0){
OkLed();
delay_s(2);
}
}
ErrLed();
}
}
/************************************
Rx Intterup (HIGH)
*************************************/
#pragma interrupt rx_isr
void rx_isr (void){
tempID[pntr] = RCREG;
pntr++;
PIR1bits.RCIF = 0;
PORTC = 0;
}
void ErrLed(void){
LEDA = 1;
LEDC = 0;
}
void OkLed(void){
LEDA = 0;
LEDC = 1;
}
void delay_s(int s){
int x;
for(x=0;x<s;x++){
Delay10KTCYx(200);
}
}