This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

fingerprint sensor error for 8051

i am trying to develop my own project based on 8051. i am using Fingerprint sensor(R305) , AT89S52 and relay for basic relay on/off. given code is not completed i mean i have not included the relay function because it gives error at initial phase.

i am getting too much errors and actually i am new for this platform so please help mehttps://www.rhydolabz.com/wiki/?p=15770

#define _XTAL_FREQ 18432000
#include <REGX51.h>

//#include <xc.h>
//#include<pic.h>
#include <stdio.h>
#include <stdlib.h>
void interrupt SerialRxPinInterrupt(void);
void serialwrite(char ch);
void serialprint(char *str);

int sendcmd2fp(char *pack, int len);
void matchFinger();
void serialFlush();
// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // datas EEPROM Memory Code Protection bit (datas EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG
#define SPBRG
#define TRISC7
#define TRISC6
#define GIE
#define TXIF
#define TXREG
#define uchar unsigned char
#define uint unsigned int
#define RCIF
#define LCDPORTDIR TRISA
#define LCDPORT PORTA
#define RS RE1
#define EN RE0

#define SWPORTdir TRISD
#define SWPORT PORTD
#define PASS 0
#define ERROR 1
#define i 
#define checkKey(id) id=up<down?++id:down<up?--id:id;

uchar buf[20];
uchar buf1[20];
volatile uint index=0;
volatile int flag=0;
uint msCount=0;
uint g_timerflag=1;
volatile uint count=0;
uchar datas[10];
uint id=1;

enum
{
 CMD,
 DATA, 
 SBIT_CREN=4,
 SBIT_TXEN,
 SBIT_SPEN,
};

 

const char passPack[]={0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B};
const char f_detect[]={0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5};
const char f_imz2ch1[]={0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8};
const char f_imz2ch2[]={0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9};
const char f_createModel[]={0xEF,0x1,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x3,0x5,0x0,0x9};
char f_storeModel[]={0xEF,0x1,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE};
const char f_search[]={0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8};
char f_delete[]={0xEF,0x1,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x7,0xC,0x0,0x0,0x0,0x1,0x0,0x15};

void serialbegin()
{
SCON=0x50;  // Configure serial control registern
PCON=0x80;  // SMOD bitm set
TMOD=0x20;  // Using timer1,8-bitn reload mode for baudrate generation
TH1=0xF7;  // 9600 baudrate(16 mhz clock)
TR1=1;  // Start timer
}

void serialwrite(char ch)
{	
		char TXREG;
	 
    TXREG =char ch ;
    while(!TXIF);  // Wait till the transmitter bvbr becomes empty
    TXIF=0;       // Clear transmitter flag
                 // load thevbvc to be transmitted into transmit reg
}
 
void serialprint(char *str)
{
    while(*str)
    {
        serialwrite(*str++);
    }
}

void interrupt SerialRxPinInterrupt(void)
{
    if((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1))
    {
        uchar RCREG;
        uchar ch=RCREG; 
        buf[index++]=ch;
        if(index>0)
            flag=1;
				int RCIF;
        RCIF = 0; // clear rx flag
    }  
}

void serialFlush()
{
    for(int i=0;i<sizeof(buf);i++)
    {
        buf[i]=0;
    }
}

int sendcmd2fp(char *pack, int len)
{
  uint res=ERROR;
  serialFlush();
  index=0;
  __delay_ms(100);
  for(int i=0;i<len;i++)
  {
    serialwrite(*(pack+i));
  }
  __delay_ms(1000);
  if(flag == 1)
  {
    if(buf[0] == 0xEF && buf[1] == 0x01)
    {
        if(buf[6] == 0x07)   // ack
        {
        if(buf[9] == 0)
        {
            uint datas_len= buf[7];
            datas_len<<=8;
            datas_len|=buf[8];
            for(int i=0;i<datas_len;i++)
                datas[i]=0;
            for(int i=0;i<datas_len-2;i++)
            {
                datas[i]=buf[10+i];
            }
            res=PASS;
        }

        else
        {
         res=ERROR;
        }
        }
    }
    index=0;
    flag=0;
    return res;
}
}

void matchFinger()
{
      lcdwrite(1,CMD);
      lcdprint("Place Finger"); 
      lcdwrite(192,CMD);
      __delay_ms(2000);
     if(!sendcmd2fp(&f_detect[0],sizeof(f_detect)))
     {
         if(!sendcmd2fp(&f_imz2ch1[0],sizeof(f_imz2ch1)))
         {
            if(!sendcmd2fp(&f_search[0],sizeof(f_search)))
            {
                lcdwrite(1,CMD);
                lcdprint("Finger Found");
                uint id= datas[0];
                     id<<=8;
                     id+=datas[1];
                uint score=datas[2];
                        score<<=8;
                        score+=datas[3];
                sprintf(buf1,"Id:%d  Score:%d",id,score);
							// relay control codes lies here usingg if statements 
                lcdwrite(192,CMD);
                lcdprint(buf1); 
                LED=1;
                __delay_ms(1000);
                LED=0;
            }
            
            else
            {
                lcdwrite(1,CMD);
                lcdprint("Not Found");
            }
         }
     }
      
     else
     {
         lcdprint("No Finger"); 
     }
      __delay_ms(2000);
}
// main function starts here................................................................
int main()
{            
  void (*FP)();  
  ADCON1=0b00000110;
  LEDdir= 0;
  SWPORTdir=0xF0;
  SWPORT=0x0F;
  serialbegin(57600);
  LCDPORTDIR=0x00;
  TRISE=0;
  lcdbegin();
  lcdprint("Fingerprint");
  lcdwrite(192,CMD);
  lcdprint("Interfacing");
  __delay_ms(2000);
  lcdwrite(1,CMD);
  lcdprint("Using PIC16F877A");
  lcdwrite(192,CMD);
  lcdprint("Circuit Digest");
  __delay_ms(2000);
  index=0;    
  while(sendcmd2fp(&passPack[0],sizeof(passPack)))
  {
     lcdwrite(1,CMD);
     lcdprint("FP Not Found");
     __delay_ms(2000);
     index=0;
  }
  lcdwrite(1,CMD);
  lcdprint("FP Found");
  __delay_ms(1000);
  lcdinst();
  while(1)
  { 
    FP=match<enrol?matchFinger:enrol<delet?enrolFinger:delet<enrol?deleteFinger:lcdinst;
    FP();
  } 
  return 0;
}