⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rxd.c

📁 指纹识别源代码,用于智能门紧,还有配合MF800卡使用
💻 C
字号:
#include "reg58.h"

#define _RXD_C_
#include "rxd.h"

#include "intrins.h"
#include "define.h"
#include "keypad.h"
#include "finger.h"
#include "bus.h"
#include "pccomm.h"
#include "timer.h"
#include "system.h"
#include "373.h"
/////////////////////////////////////////////////////////////////////////////////
//unsigned char UARTDATA uart1buff[MAXUART1LEN];
//unsigned char data uart0buff[2];
unsigned char data rxd0chksum;

bit rxd0flag,rxd0packflag,rxd1flag;
bit	keypackflag;
//unsigned short idata rxd1len;
unsigned short data rxd0len,rxd0counter;
unsigned char data rxd0timer;
/////////////////////////////////////////////////////////////////////////////////
void rxd1() interrupt 7 using 1
{
	if(RI_1)		//receive interrupt
	{
		RI_1=0;
		
		if(!rxd0packflag)
		{	
			if(!rxd0flag)		//if uart0 is receiving data, uart1 do nothing
			{
				if(!rxd1flag)
				{	
					if(SBUF1==PCPACKAGEHEAD)		//receive pc data
					{
						uart0buff[0]=PCPACKAGEHEAD;
						rxd1flag=1;
						rxd0counter=1;
						rxd0timer=timerh;
					}
				}
				else
				{
					if(rxd0counter==1)
					{
						rxd0len=SBUF1+0x100;	//+0x100 for fear  that rxd0counter can be larger than rxd0len
					}
					else if(rxd0counter==2)
					{
						rxd0len&=0xff;	
						rxd0len+=SBUF1<<8;
						rxd0len+=3;			//package length is 5 bytes longer than packagelen
					}
					uart0buff[rxd0counter]=SBUF1;
					rxd0counter++;
					if(rxd0counter>=rxd0len)
					{
						rxd0packflag=1;
						rxd1flag=0;
					}
				}
			}
		}
	}
	else			//transmit interrupt
	{

	}
}
/////////////////////////////////////////////////////////////////////////////////
void rxd0() interrupt 4 using 1
{

	if(RI)			//receive interrupt
	{
		RI=0;

		if(!rxd0flag)
		{
			if(SBUF==FIMPACKHEAD)
			{
				keypackflag=0;
				uart0buff[0]=FIMPACKHEAD;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
				rxd1flag=0;				//to keep uart1 from receiving any data
			}
			else if(SBUF==KEYPACKHEAD)
			{
				keypackflag=1;
				rxd0chksum=SBUF;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
			}

		}
		else
		{
			if(keypackflag)
			{
				if(rxd0counter<KEYPACKLEN-1)
				{
					if(rxd0counter==2)
					{
						keytype=SBUF;
					}
					else if(rxd0counter==3)
					{
						keynumber=SBUF;
					}
					else if(rxd0counter==4)
					{
						cardnumhigh=SBUF;
					}
					rxd0counter++;
					rxd0chksum+=SBUF;
				}
				else
				{
					if(!(rxd0chksum+SBUF))
					{
						keydownflag=1;
						rxd0flag=0;
					}
				}	
			}
			else
			{
				if(rxd0counter==1)
				{
					rxd0len=SBUF+0X100;
				}
				else if(rxd0counter==2)
				{
					//rxd1len<<=8;
					rxd0len&=0xff;
					rxd0len+=(SBUF<<8);
					rxd0len+=5;			//package length is 5 bytes longer than packagelen
				}
				uart0buff[rxd0counter]=SBUF;
				rxd0counter++;
				if(rxd0counter>=rxd0len)
				{
					rxd0packflag=1;
					rxd0flag=0;
				}
			}
		}
		/*if(!rxd0flag)					//PC&KEYPAD
		{
			if(SBUF==PCPACKAGEHEAD)
			{
				keypackflag=0;
				uart0buff[0]=PCPACKAGEHEAD;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
				rxd1flag=1;				//to keep uart1 from receiving any data
			}
			else if(SBUF==KEYPACKHEAD)
			{
				keypackflag=1;
				rxd0chksum=SBUF;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
			}

		}
		else
		{
			if(keypackflag)
			{
				if(rxd0counter<KEYPACKLEN-1)
				{
					if(rxd0counter==2)
					{
						keytype=SBUF;
					}
					else if(rxd0counter==3)
					{
						keynumber=SBUF;
					}
					else if(rxd0counter==4)
					{
						cardnumhigh=SBUF;
					}
					rxd0counter++;
					rxd0chksum+=SBUF;
				}
				else
				{
					if(!(rxd0chksum+SBUF))
					{
						keydownflag=1;
						rxd0flag=0;
					}
				}	
			}
			else
			{
				if(rxd0counter==1)
				{
					rxd0len=SBUF+0x100;
				}
				else if(rxd0counter==2)
				{
					//rxd1len<<=8;
					rxd0len&=0xff;
					rxd0len+=SBUF<<8;
					rxd0len+=3;			//package length is 5 bytes longer than packagelen
				}
				uart0buff[rxd0counter]=SBUF;
				rxd0counter++;
				if(rxd0counter>=rxd0len)
				{
					rxd0packflag=1;
					rxd0flag=0;
				}
			}
		}*/
		/*if(!rxd0flag)			//KEYPAD
		{
			if(SBUF==KEYPACKHEAD)
			{
				keypackflag=1;
				rxd0chksum=SBUF;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
			}
			else if(SBUF==FIMPACKHEAD)
			{
				keypackflag=0;
				uart0buff[0]=FIMPACKHEAD;
				rxd0flag=1;
				rxd0counter=1;
				rxd0timer=timerh;
			}
			else return;
		}
		else 
		{
			if(keypackflag)
			{
				if(rxd0counter<KEYPACKLEN-1)
				{
					if(rxd0counter==2)
					{
						keytype=SBUF;
					}
					else if(rxd0counter==3)
					{
						keynumber=SBUF;
					}
					else if(rxd0counter==4)
					{
						cardnumhigh=SBUF;
					}
					rxd0counter++;
					rxd0chksum+=SBUF;
				}
				else
				{
					if(!(rxd0chksum+SBUF))
					{
						keydownflag=1;
						rxd0flag=0;
					}
				}	
			}
			else
			{
				if(rxd0counter==1)
				{
					rxd0len=(unsigned short)SBUF;
				}
				else if(rxd0counter==2)
				{
					//rxd1len<<=8;
					rxd0len+=(SBUF<<8);
					rxd0len+=5;			//package length is 5 bytes longer than packagelen
				}
				uart0buff[rxd0counter]=SBUF;
				rxd0counter++;
				if(rxd0counter>=rxd0len)
				{
					rxd0packflag=1;
					rxd0flag=0;
				}
			}
		}*/
	}
	else if(TI)		//transmit interrupt
	{
		//TI=0;
	}
}
/////////////////////////////////////////////////////////////////////////////////
void init_rxd()
{
	SCON=0X70;	//10BIT ASYNCHRONOUS VARIABLE
	SCON1=0X70;	//10BIT ASYNCHRONOUS VARIABLE
	//SBUF=0X55;
}
/////////////////////////////////////////////////////////////////////////////////
/*void deal_rxd0()
{	
	
	if(!rxd0flag)return ;
	deal_pccomm();

}*/
/////////////////////////////////////////////////////////////////////////////////
/*void deal_rxd1()
{

	if(!rxd1flag)return;
	//if(SELFK)deal_key();
	 deal_finger();

}*/
/////////////////////////////////////////////////////////////////////////////////
/*void send_byte(unsigned char senddata,unsigned char ch)
{
	if(!ch)
	{
		//if(SPTA0)return FALSE;
		SBUF=senddata;
		delayTimerl(T38400DELAY);
		//while(SPTA0);
		//return TRUE;
	}
	else
	{
		//if(SPTA1)return FALSE;
		SBUF1=senddata;
		while(SPTA1);
		//return TRUE;
	}
}*/
/////////////////////////////////////////////////////////////////////////////////
void sendstring1(unsigned short sendcount)
{
	unsigned short i;
	set_373(RS485PORT);			//070307
	delay50us();				//070307
	for(i=0;i<sendcount;i++)
	{
		SBUF1=uart0buff[i];
		while(!TI_1);
		TI_1=0;
	}
	clr_373(RS485PORT);			//070307

}
/////////////////////////////////////////////////////////////////////////////////
void sendstring(unsigned short sendcount)
{
	//unsigned char i,tempchar;
	//for(i=0;i<sendcount;i++)
	//{
	//	tempchar=*(pchar+i);
	//	send_byte(tempchar,ch);
	//}

	unsigned short i;//,tempchar;

	for(i=0;i<sendcount;i++)
	{
		//tempchar=*(pchar+i);

		SBUF=uart0buff[i];
		while(!TI);
		TI=0;
		//delayTimerl(T38400DELAY);
		//send_byte(tempchar,ch);
	}
	//return TRUE;
	//if(!ch)
	//{
	//	if(txdcounter0)return FALSE;
	//	txdcounter0=sendcount-1;
	//	SBUF=*pchar;
	//	return TRUE;
	//}
	//else
	//{
	//	if(txdcounter1)return FALSE;
	//	txdcounter1=sendcount-1;
	//	SBUF1=*pchar;
	//	return TRUE;
	//}
}
/////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -