/*
ZOLUTION
*/
#include <16f1827.h>
#include <stdlib.h>
#USE DELAY(internal=4000000)
#FUSES NOPROTECT,NOWDT
#fuses nobrownout,nomclr
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,ERRORS)
//usando el pin de recepcion
#bit RXDTSEL = 0x11D.7 // 0X11D HACE REFERENCIA AL REGISTRO APFCON0 bit 7
#bit TXCKSEL = 0x11E.0 // 0X11D HACE REFERENCIA AL REGISTRO APFCON1 bit 0
#USE fast_io (A) // Optimizamos E/S del PORTB ( muy importante para ahorrar memoria )
#USE fast_io (B)
#BYTE porta= 0X0C
#BYTE portb= 0X0D
#define LED PIN_B0
// ******* variable globales ********
long Password1=6457979;//Please type the card's ID number
int flag=0,RX_Flag=0;//serial port sign
char Code[14];
long Num=0;//decode data
//int serpin=7;//pin of servo
//int Door=0; // entrada analoga A0
// ***********************************
// ***** INTERRUPCIONES : RDA Recepción USART ****
/*
#int_rda
void rda_handler(void)
{
Command=getc(); // recibe el comando ...
}
*/
// ****************************************
// Ejecutar según comando recibido /////////
void Read_ID(void);
void main()
{
RXDTSEL=0;// PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO RX
TXCKSEL=0; // PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO TX
//setup_adc_ports(NO_ANALOGS);
set_tris_b(0b00000010);
output_B(0x00);
printf("This is a test for access control system"); delay_ms(100);
output_low (LED);
while(TRUE); // final del Bucle infinito
{
int i;
long temp=0; //,time=0;
RX_Flag=0;
while(true)
{
Read_ID();
if(RX_Flag==1)
{
for(i=5;i<11;i++)//
{
Num<<=4;
if(Code[i]>64) Num+=((Code[i])-55);
else Num+=((Code[i])-48);
}
// if((Num==Password1)||(Num==Password2)||(Num==Password3))//识别æˆåŠŸ si alguna coincide
if(Num==Password1)//识别æˆåŠŸ
{
output_low (LED);
delay_ms(10000);
output_high (LED);
delay_ms(5);
}
RX_Flag=0;//
Num=0;//
}
}
}
}
//****************************
void Read_ID(void)
{
int i=0;
char temp;
for(i=0;(kbhit()>0);i++)//
//while(Serial.available()>0)
{
delay_ms(2);
if(temp==0X02) //recieve the ssrt bit
{
flag=1;i=0;RX_Flag=0;//
}
if(flag==1)//detect the start bit and recieve data
{
if(temp==0X03)//detect the end code,
{
flag=0; //zero clearing
if(i==13) RX_Flag=1;//
else RX_Flag=0;
break;
}
Code[i]=temp;
}
}
flag=0;//
}
// *****************************************