📄 trh031v1.c
字号:
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 + -