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

📄 rfid_u2270.c

📁 找的一个用U2270B开发的射频卡项目文件
💻 C
📖 第 1 页 / 共 3 页
字号:
	j = numBits;				// Store number of bits needed
	j = j>>3;                               // Convert to number of bytes
	dataPtr = inDataPtr;			// Store beginning pointer in temp pointer	
	
	//  Loop until 2x number of bits have been checked  //
	for(k=0; k<(j*2); k++)
	{
		tmp1 = inDataPtr[cBytes];      	// Store first byte to be checked
		tmp2 = inDataPtr[cBytes+1];    	// Store the next byte that will be shifted into first
		
		for(cBits=0; cBits<8;)         	// Check all bits in the byte for header match
		{
			if(tmp1 == 0x00 && (tmp2&0xE0) == 0x20)	// Found matching Header
			{
				
				//  Reload data with beginning of data located at the inital pointer location  //
				for(i=0; i<j; i++)
				{
					tmp1 = inDataPtr[cBytes+i]<<cBits;               // Shift bytes to start of data
					tmp1 = tmp1 | inDataPtr[cBytes+i+1]>>(8-cBits);  // found by previous search
					inDataPtr[i] = tmp1;                             // Store back at beginning pointer location
				}
				
				//  Load remaining buffer with all zeros  //
				for(i=(unsigned char)(j); i< (unsigned char)((j+1)*2); i++)
				{
					inDataPtr[i] = 0x00;
				}
				k = (numBits*2)+1;					// break search loop
				cBits = 8;                                              // break search loop
				return 0;                                               // return successful
			}
			else								// Header not found						
			{
				tmp1 = tmp1<<1;                				// Shift first byte right
				if(tmp2&0x80){tmp1 = tmp1|0x01;}                        // Move MSB of second byte to LSB of first
				tmp2 = tmp2<<1;                                         // Shift second byte right
				cBits++;                                                // Increment bits checked
			}
		}
		cBytes++;			// Increment bytes checked
	}
	return SeqTermErr;			// Pattern not found, Return error code  
}

// *******************************************************************************
// Read Routine Using the U2270 
// Pass in the number of Tag Type, data encoding, and type of synch.
// Pass in the number of bits being sent and the data buffer 
// ******************************************************************************/
unsigned char U2270_ReadData(unsigned char Target_Tag,unsigned char **cDatPtr,unsigned char cEncoding,unsigned char cSyncType,unsigned int numBits)
{
	unsigned char cBit = SeqTermErr;
	unsigned char cError = 0;
	unsigned char cQuit = 0;
	
	unsigned int timeOut0, cNumBits = 0, cNumBytes = 0;
	unsigned char *cDataBuffPtr,i;
		
	for(i=0; i < 129; i++){cDataBuff[i]=0x00;} //Reset Buffer

	RFIDTimer_Set(0xFF, 0xFF);			// Zero Read Timer Count
	RFIDTimer_RD_Init();				// Start the Read Timer
	
	RFIDTimerFlag = 0;					// Clear Timer Flag	 
	while(!RFIDTimerFlag); 				// Wait for next edge
	RFIDTimerFlag = 0; 				// Clear Timer Flag
	while(!RFIDTimerFlag); 				// Wait for next edge
		
	if(RFIDTimerFlag == 2)				// Overflow
	{
		cError = TagErr;
		cQuit = 1; 
	}			
	timeOut0 = 0;					// Start Timeout counter
	
	//  Loop until error, timeout, or valid read  //
	while(cQuit == 0 && timeOut0++ < 1000)	
	{ 
		cDataBuffPtr = &cDataBuff[0];		// Place pointer at beginning of buffer
		cNumBits = 0;				// Clear bit counter for new read attempt
		cNumBytes = 0;				// Clear byte counter for new read attempt
		 
		if(RdTime < U2270_LongH)		// Check for Tag presence. IF no tag present skip bit checking
		{
			if(cSyncType == X555XSYNC)
			{
				cBit = U2270_Check555xSequenceTerm();						// Look for 555x-based terminator timing pattern
				
				//  Special processing of first bit after terminator time  //
				if(cBit == 1)												// IF first bit starts w/ one  			
				{	
					*cDataBuffPtr = *cDataBuffPtr << 1;					
					*cDataBuffPtr = *cDataBuffPtr | 0x01;					// Store a one
					cNumBits++;												// Increment number of bits read
				}
				else if(cBit == 0)											// IF first bit starts w/ zero
				{
					*cDataBuffPtr = *cDataBuffPtr << 1;   					// Store a zero
					cNumBits++;												// Increment number of bits read
				}
			} 	
			else if(cSyncType == SOFSYNC){cBit = U2270_x5558SOFSync(1);}	// Look for 5558 SOF Pattern
			else {cBit = U2270_Manchester2TSync();}							// Look for first logic change (10 or 01)
			
			if(cBit == 0 || cBit == 1)										// IF sync found, else exit and try again
			{
				//  This will read and store 2 times the number of bits needed  //
				while(cBit != BitErr && (cNumBits+(8*cNumBytes)) < (numBits*2)+10)
			 	{
			 		if(cNumBits == 8)					// When full byte is read
			 		{
			 			cDataBuffPtr++;					// Increment pointer to next byte in buffer
			 			cNumBits = 0;					// Clear bit counter
			 			cNumBytes++;					// Increment byte counter
			 		}
			 		if(cEncoding == MANCHESTER){cBit = U2270_ManchesterDecode(cBit);}				// Decode the next bit (Manchester) 
			 		else if(cEncoding == BIPHASE){cBit = U2270_BiPhaseDecode();}				// Decode the next bit (BiPhase) 
			 		if(cBit == 1)
			 		{
						*cDataBuffPtr = *cDataBuffPtr << 1;		// Shift byte to store previous bit   		
						*cDataBuffPtr = *cDataBuffPtr | 0x01;		// Store a one
			 		}
			 		else if(cBit == 0)
			 		{
						*cDataBuffPtr = *cDataBuffPtr << 1; 		// Store a zero	  		
			 		}
					cNumBits++;						// Increment number of bits read
			 	}
				if(cSyncType == X555XSYNC || cSyncType == SOFSYNC)
				{
					cQuit = 1;
				 	if((cNumBits+(8*cNumBytes)) > (numBits)){cBit = 0;}			// Check for successfull read of all needed bits
				}  
		 		else if(cSyncType == HEADERSYNC)
				{
				 	if((cNumBits+(8*cNumBytes)) == (numBits*2)+10)			// Check for successfull read of all needed bits
				 	{
						cBit = U2270_HeaderSearch(&cDataBuff[0], numBits, 0xE6);// Look for start of data by finding header pattern	
			 			if(cBit == 0){cQuit = 1;}	// If pattern found, quit read routine with success
						else{cQuit = 1;}				
					}
				}				
		 		else if(cSyncType == X5557SYNC)
				{
				 	if((cNumBits+(8*cNumBytes)) == (numBits*2)+10)			// Check for successfull read of all needed bits
				 	{
			 			cBit = U2270_Check5557SequenceTerm(&cDataBuff[0], numBits);       // Look for start of data by finding synch pattern
			 			if(cBit == 0){cQuit = 1;}                               // If synch found, quit read routine with success
						else{cQuit = 1;}				
					}
			 	}
		 		else if(cSyncType == ANIMALSYNC)
				{
				 	if((cNumBits+(8*cNumBytes)) == (numBits*2)+10)			// Check for successfull read of all needed bits
				 	{
			 			cBit = U2270_AnimalIDHeaderSearch(&cDataBuff[0], numBits);       // Look for start of data by finding synch pattern
			 			if(cBit == 0){cQuit = 1;}                               // If synch found, quit read routine with success
						else{cQuit = 0;}				
					}
			 	}
				
				if(cBit == 0 || cBit == 1){cError = 0;}				// If read was successfull quit with no errors
				else{cError = cBit;}						// Else, return error code
				
			}
			else {cError = SeqTermErr;} 
		}
		else {cError = TagErr;}
	}
	RFIDTimer_Stop();										// Stop the Read Timer
		
	//  ERROR Processing  //
	if(cError != 0 || (cNumBits+(8*cNumBytes)) < numBits)
	{	
		snd_Play(BUZZFREQ1,BUZZFREQ0,BUZZTIME);	// return Audio feedback
	}
	else 
	{
		cDataBuffPtr = &cDataBuff[0];
		*cDatPtr = cDataBuffPtr;
		snd_Play(BEEPFREQ1,BEEPFREQ0,BEEPTIME);	// return Audio feedback
	}
	return cError;			// Return error code (zero = successfull)
}

unsigned char U2270_x5558_Arbitrate(void)
{
	unsigned char tmp = 2, result = 3, loop = 0, numBits = 0, numBytes = 0;
//	unsigned int timeout = 0;
	unsigned char *cTagIDPtr;
	unsigned char i, count;
	unsigned char TagFilter[12]={0}, TagFilterBits;

	for(i=0; i<12; i++){Target_Tag_ID[i]=0xFF;}
	TagFilter[0] = 0x00;
	TagFilter[1] = 0x04;
	TagFilterBits = 15;

/*	numBytes = (TagFilterBits>>3);
	numBits = TagFilterBits - (numBytes*8);

	for(i=0; i<numBytes; i++){Target_Tag_ID[i]=TagFilter[i];}
	cTagIDPtr = &Target_Tag_ID[numBytes];
*/
//	PORTF &= ~0x02;
	x5558_GetID(70);
//	x5558_GetIDeven(70, &TagFilter[0], TagFilterBits);
//	x5558_GetIDodd(70, &TagFilter[0], TagFilterBits);

	RFIDTimer_Set(0xFF, 0xFF);				// Zero Read Timer Count
	RFIDTimer_RD_Init();                                       // Start Read Timer
//	Timer_delay_us(1200);
	
	RFIDTimerFlag = 0;                 // Clear Timer Flag
	while(!RFIDTimerFlag); 		// Wait for next edge 	
//	PORTF |= 0x02;
	/*while(tmp != 1 && timeout < 20)
	{
		RFIDTimerFlag = 0;                 // Clear Timer Flag
		while(!RFIDTimerFlag); 		// Wait for next edge 
		//  Make sure edge time greater than a long and less than 1.5 long  //
		if(RdTime > U2270_LongL+50 && RdTime < (U2270_LongH+(U2270_LongH>>1)))
		{
			RFIDTimerFlag = 0;		// Clear Timer Flag
			while(!RFIDTimerFlag); 	// Wait for next edge
			//  Make sure next edge time is short  //
			if(RdTime > U2270_ShortL && RdTime < U2270_ShortH+100)
			{
				PORTF &= ~0x02;
				tmp = 1;	//SOF Found, return success 
				PORTF |= 0x02;
			}
		}
		else {tmp = 3;}         // SOF not found, return error code 
		timeout++;	
	}*/
    tmp = U2270_x5558SOFSync(2);
	if(tmp == 1)// || tmp == 0)
	{
		result = tmp;
		cTagIDPtr = &Target_Tag_ID[0];
		while(loop == 0)
		{
			if(numBits > 7)
			{
				numBytes++;
				numBits = 0;
				cTagIDPtr = &Target_Tag_ID[numBytes];
			}			
			if(numBytes > 11){loop = 1;}
			else
			{
				result = U2270_DualPatternDecode();				
				if(result == 1)
				{
					PORTD &= ~0x40;
					Timer_delay_us(100);
					PORTD |= 0x40;
//	                Timer_delay_us(1200);
//					PORTF &= ~0x02;
//					PORTF |= 0x02;					
                    *cTagIDPtr = *cTagIDPtr<<1;
					*cTagIDPtr |= 0x01;				

                    RFIDTimerFlag = 0;                 // Clear Timer Flag
					while(!RFIDTimerFlag); 		// Wait for next edge 				
				
					tmp = 2;
					/*timeout = 0;
					while(tmp != 1 && timeout < 20)
					{
						RFIDTimerFlag = 0;                 // Clear Timer Flag
						while(!RFIDTimerFlag); 		// Wait for next edge 
						//  Make sure edge time greater than a long and less than 1.5 long  //
						if(RdTime > U2270_LongL+50)
						{
							RFIDTimerFlag = 0;		// Clear Timer Flag
							while(!RFIDTimerFlag); 	// Wait for next edge
							//  Make sure next edge time is short  //
							if(RdTime > U2270_ShortL && RdTime < U2270_ShortH+100)
							{
								PORTF &= ~0x02;
								tmp = 1;	//SOF Found, return success 
								PORTF |= 0x02;
							}
						}
						else {tmp = 3;}         // SOF not found, return error code
						timeout++;
					}*/
                    tmp = U2270_x5558SOFSync(2);
					if(tmp != 1)
					{
						loop = 1;
						result = 5;
					}
					count++;
				}
				else if(result == 0)
				{
					*cTagIDPtr = *cTagIDPtr<<1;
					count++;
				}
				else{loop = 1;}
				numBits++;
			}
		}
	}
	else
	{
		result = 5;
	} 
	RFIDTimer_Stop();										// Stop the Read Timer
	if(result == 0){result = 1;}
	return result;
}


⌨️ 快捷键说明

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