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

📄 trh031v1.c

📁 This is a source of 13.560MHz RFID card reader for TRH031M as ATMEGA8-16AU MPU. The title is 3Alogi
💻 C
📖 第 1 页 / 共 4 页
字号:
		suma =0x00; 
		for(i=0; i<5; i++)
		{ 
			cid_buf[i] =rf_read(0x02);
			suma =(suma | cid_buf[i]);
		}
		
		if (suma ==0x00)
		{
		  return;
		}
		uart_puts("15693 ");
		uart_cid5();
		
		uart_puts("Mask = ");
		uart_hex(mask1);
		uart_cr();
		
		for (i=0; i<0x05; i++)
		{ 
		  cid_buf[i] =rf_read(0x02);
		}
		uart_puts("15693 ");
		uart_cid5();
		
		rf_write(0x01, 0x00);
		return;
	}
}

// *********************************************** 
// insde setup
// *********************************************** 
void rf_inside_set(void)
{
  rf_write(0x26, 0x02);				// test_out pin =Manchester coded signal
	rf_write(0x11, 0x4B);
	rf_write(0x12, 0x3f);
	rf_write(0x13, 0x02);
	rf_write(0x19, 0x01);   		// Gain

	rf_write(0x14, 0x20);   		// Coder B Set
	rf_write(0x1A, 0x18);   		// Decoder B Set.
	rf_write(0x22, 0x00);	  		// CRC Enable
	rf_write(0x07, 0x3f);   		// IRQ Clear
	rf_write(0x0a, 0x00);   		// Error Clear
	rf_write(0x09, 0x01);   		// Error Clear
    
	rf_write(0x17, 0x27);   		// SOF, EOF Width Change
	rf_write(0x21, 0x0B);   		// RXWait Change 
	rf_write(0x0A, 0x00);   		// RXWait Change 
	rf_write(0x1C, 0x18);   		//

	if (auto_mode != 0xAF)
	{
	  uart_puts("Inside register set !!");
		uart_cr();
	}	
}

// *********************************************** 
// RFID inside execute 
// *********************************************** 
void rf_inside_exec(void)
{
	char len;
	char i;
	
	rf_write(0x09, 0x01);
	rf_write(0x02, 0x0A);   	// action all
	rf_write(0x01, 0x1E);
	delay_10us(t_idl);		 	 	// delay time =100us

	rf_write(0x01, 0x00);	
	rf_write(0x09, 0x01);
	rf_write(0x02, 0x0C);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);		 	 	// delay time =500us
	
	len =rf_read(0x04);				// get length of fifo
  if(len > 0x03)						// length is over 4 bytes?
	{	
		read_cid();							// get cid from fifo
 	  uart_puts("Inside "); // Fail Indicator
		uart_cid5();		 	 			// cid_buf[4] send to uart			 		
		return;
	}
	
	else		 									// UID Read Fail
	{	
		uart_fail("Inside ID");	// Fail Indicator
		rf_write(0x01, 0x00);
	}
}

// *********************************************** 
// RFID inside auto execute 
// *********************************************** 
void rf_inside_auto(void)
{
	char len;
	char i;
	
	rf_write(0x09, 0x01);			// control =erase fifo											 
	rf_write(0x02, 0x0C);			// tx =0x0c
	rf_write(0x01, 0x1E);			// command =transmitt and receive
	delay_10us(t_rec);		 	 	// delay time =500us

	len =rf_read(0x04);				// get length of fifo 
  if(len > 0x05)						// length is over 5 bytes?
	{	
		read_cid();							// get cid from fifo
 	  uart_puts("Auto inside "); // Fail Indicator
		uart_cid5();		 	 			// cid_buf[4] send to uart			 		
		return;
	}
	
	else		 									// UID Read Fail
	{	
		uart_fail("Auto inside ID");
		rf_write(0x01, 0x00);
	}
}

// *********************************************** 
//
// *********************************************** 
void rf_tagit_set(void)
{
	rf_write(0x11, 0x5B);
	rf_write(0x12, 0x3F);
	rf_write(0x13, 0x10);
	rf_write(0x14, 0x02);			//CODERCONTROL TI Tag-it nop address
	rf_write(0x15, 0x10);

	//rf_write(0x19, 0x04);
	rf_write(0x19, 0x01);
	rf_write(0x1A, 0x00);
	rf_write(0x1C, 0x18);
	rf_write(0x1E, 0x81);
	rf_write(0x21, 0x06);
  rf_write(0x26, 0x02);				// test_out pin =Manchester coded signal
	
	rf_write(0x06, 0x24);
	rf_write(0x0F, 0x00);
	rf_write(0x22, 0x0F);

	if (auto_mode != 0xAF)
	{
		uart_puts("Tag-it register set !!");
		uart_cr();
	}
}

// *********************************************** 
//
// *********************************************** 
void rf_tagit_exec(void)
{
	char len;
	char i;

	rf_write(0x09, 0x01);
	rf_write(0x02, 0x03);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);		 	 		// delay time =500us								 

	len =rf_read(0x04);
	//if(Len == 0x12 && (Read(0x0A) & 0x3F) == 0x00)
	if (len ==0x09)
	{		 
		suma =0x00; 
		for(i=0; i<0x05; i++)
		{ 
			cid_buf[i] =rf_read(0x02);
			suma =(suma | cid_buf[i]);
		}
		
		if (suma ==0x00)
		{
		  return;
		}

		uart_puts("Tag-it ");
		uart_cid9();
		//printf("ERRO Flag = %02X\n\r", (int)Read(0x0A));
   	rf_write(0x01, 0x00);
		return;
	}
	
	else		 				 // UID Read Fail 
	{
		uart_fail("Tag-it ID");
		rf_write(0x01, 0x00);
		return;
	}
}

// *********************************************** 
// automatic run for rfid mode
// *********************************************** 
void run_14443a(void)
{
	if (!flag_up)
	{
	  rf_14443a_set();
		flag_up =1;
	}
	//rf_reqa_rdid_auto();
	rf_reqa_exec();  // A1 =reqa
	rf_rdid_exec();	 // A2 =read ID
	//rf_reqa_rdid_exec();		// A3 =reqa and read id
	delay_10us(t_rec);		 	 	// delay time =500us
}

void run_14443b(void)
{
	if (!flag_up)
	{
	 	rf_14443b_set();
		flag_up =1;
	}	
	rf_reqb_auto();
	delay_10us(t_dly);		 	 	// delay time =1000us
}

void run_15693(void)
{
	if (!flag_up)
	{
	  rf_15693_set();
		flag_up =1;
  }
	rf_15693_auto();
	delay_10us(t_dly);		 	 	// delay time =1000us
}

void run_inside(void)
{
	if (!flag_up)
	{
	  rf_inside_set();
		flag_up =1;
  }
	rf_inside_exec();
	delay_10us(t_dly);		 	 	// delay time =1000us
}

void run_tagit(void)
{
	if (!flag_up)
	{
	 	rf_tagit_set();
		flag_up =1;
  }
	rf_tagit_exec();
	delay_10us(t_dly);		 	 	// delay time =1000us
}

void run_all(void)
{
	char i;
  
	//rf_write(0x11,0x58);	
	//delay_us(200);

	if (!flag_up)
	{
	  rf_14443a_set();
		flag_up =1;
  }
	rf_reqa_rdid_auto();
	det =1;
	
	while (det)
  {
		iso_14443a_reg();
 		if(func_reqa() ==4)
		{
			func_anticol_select();
      if(func_sak() ==1)
			{
				for(i=0; i<5; i++) 
				{
				  cid_buf[i] = cid[i];
				}
				uart_puts("14443A ");
				uart_cid5();
		 }
	 }
	 else det =0;
  }

  rf_15693_set(); 
	rf_15693_auto(); 
	delay_10us(t_dly);		 	 	// delay time =1000us

	rf_tagit_set();
	rf_tagit_exec();
	delay_10us(t_dly);		 	 	// delay time =1000us

	rf_14443b_set();
	rf_reqb_auto();
	delay_10us(t_dly);		 	 	// delay time =1000us

  //rf_inside_set();
	//rf_inside_exec();
}

// *********************************************** 
// function run
// *********************************************** 
void func_run(void)
{
	if(sel ==0x00)	 						// select =0 ?										 
	{	
		rx_sel[0] =rxd_buf;				// save rxd from uart
		flag_rxd =0;							// clear flag of rxd										 

		if (rx_sel[0] ==0xC0) sel =0x01;	 // read register
		else if (rx_sel[0] ==0xC1) sel =0x01;	// write register
		
		else 
		{
		  switch(rx_sel[0])				// switch from rxd	 
			{		   				
				case (0xA0): rf_14443a_set(); // setup 14443A								
				break;    
				case (0xA1): rf_reqa_exec();  // read register											
				break;    
				case (0xA2): rf_rdid_exec();	// read ID											 											
				break;     
				case (0xA3): rf_reqa_rdid_exec();		// reqa and read id          		    						
				break;   
				case (0xAA): 
				{
				  if (!(auto_mode ==0xAA)) flag_up =0;
				  auto_mode =0xAA;  // 14443A AutoRun Mode 		    					
				}
				break;    
				
				case (0xAB):
				{
				  if (!(auto_mode ==0xAB)) flag_up =0;
				  auto_mode =0xAB;  // 14443B AutoRun Mode 		    					
				}	
				break;   	
				
				case (0xAD):
				{
				  if (!(auto_mode ==0xAD)) flag_up =0;
				  auto_mode =0xAD;  // 15693 AutoRun Mode 	    					
				}
				break;   								    

				case (0xAF): auto_mode =0xAF;  // ALL AutoRun Mode 	    					
				break;   										
				case (0xAC): auto_mode =0x00;  // AutoRun Mode Clear.		    					
				break;   
				case (0xB0): rf_14443b_set(); 	
				break;  
				case (0xB1): rf_reqb_exec(); 	
				break;  
				case (0xD0): rf_15693_set();
				break; 
				case (0xD1): rf_15693_exec();
				break; 
				case (0xE0): rf_inside_set();
				break; 
				case (0xE1): rf_inside_exec();
				break; 
				case (0xF0): rf_fifo_read();
				break; 

				default:   	
				break;
			} 
		}
	}
  
	else if(sel ==0x01)				// register read =0xC0				
	{
		rx_sel[1] =rxd_buf;
		flag_rxd =0;
		if (rx_sel[0] ==0xC0)
		{			
				uart_puts("Regiter read ");
				uart_hex(rx_sel[1]);
				uart_puts(" => ");
				uart_hex(rf_read(rx_sel[1]));
				uart_cr();
				sel =0x00;
		}
		else sel =0x02;
	}
	
	else if (sel ==0x02 ) 		// register write	=0xC1			 
	{
		rx_sel[2] =rxd_buf;
		flag_rxd =0;
		rf_write(rx_sel[1], rx_sel[2]);
		uart_puts("Register write ");
		uart_hex(rx_sel[1]);
		uart_puts(" <= ");
		uart_hex(rx_sel[2]);
		uart_cr();
		sel =0x00;		
	 }
}

// *********************************************** 
// RFID Card Reader TRH031M reset
// *********************************************** 
void rf_reset(void)
{
  ADRS |= ALE;				 		// ALE =1 (not use)												 
 	PORTD &= ~RST;		 			// turn on trh031m											 	 
	delay_ms(100);					// delay 100ms

 	PORTD |= RST;		 				// turn off trh031m											 	 
	PORTB |= LED;						// LED =on
	delay_ms(100);					// delay 100ms

 	PORTD &= ~RST;		 			// turn on trh031m											 	 
	PORTB &= ~LED;					// LED =off
	delay_ms(100);					// delay 100ms

	ADRS &= ~0x07;					// clear address
  rf_write(0x00, 0x00);		// setup bus mode
  rf_write(0x00, 0x00);		// setup bus mode
}

// *********************************************** 
// Main routine 
// *********************************************** 
void main(void)
{
  CLI(); 	   			   					// disable all interrupts
  MCUCR = 0x02;								// int0 falling edge
  GICR  = 0x00;								// int0 interrupt disable
//GICR  = 0x40;								// int0 interrupt enable

  port_init();
  eeprom_init();		  				// disable eeprom interrupt
  adc_init(); 			  				// 10 bit adc #7 (free run)

  timer2_init();		  				// init 10us timer
  uart0_init();			  	 			// init serial port
  SEI();  	   			  	 			// re-enable interrupts

  uart_puts("3Alogics TRH031M 13.56MHz RFID Reader V1.0");
  uart_cr();				 					// end of string	 

	rf_reset();									// TRH031M reset
	rf_14443a_set();						// TRH031M register setup

	rf_off();										// TRH031M off
	rf_on();										// TRH031M on
	delay_ms(t_dly);						// 10ms delay

//	auto_mode =0xAF;					// auto run for all mode
	auto_mode =0xAC;						// manual command mode
  sel =0x00;									// reset select	
	
  while(1)						 
  {
	  time_1ms =0;			 				// reset 1ms timer
		PORTB |= LED;							// turn on LED.

		if(flag_rxd ==1) func_run();
		else if (auto_mode ==0xAA) run_14443a();
		else if (auto_mode ==0xAB) run_14443b();
		else if (auto_mode ==0xAD) run_15693();
		else if (auto_mode ==0xAE) run_inside();
		else if (auto_mode ==0xAF) run_all();
		//else if (SEL ==0x00 && RxFlag ==FALSE && INT0_EX ==0x01) exec_ex0();

		PORTB &= ~LED;						// turn off LED.
		delay_ms(100 -time_1ms);	// cycle time = 100ms								
	}	
}

// *********************************************** 
// 林 窃荐狼 场
// *********************************************** 

⌨️ 快捷键说明

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