No.55321 作者:yejianguocom 邮件: ID:1501 登陆:20次 文章数:7篇 最后登陆IP:116.25.79.75 最后登陆:2009/7/1 0:45:43 注册:2002/7/16 10:09:00 财富:41 发帖时间:2004/5/25 17:01:13 发贴者IP:219.133.90.135 标题:yejianguocom:mifare 读写程序 摘要:No.55321mifare 读写程序 //-------------------------------------- #define IN_MIFARE_C #include "mifare.h" //-------------------------------------- uchar g_task1; uchar g_task2; uint g_rc500_softdog; uchar g_state_rc500; uint g_card_left; uint g_buzzer_on_time; uchar g_rc500_sector; uchar g_rc500_block; uchar g_rc500_key_kind; uchar idata inside_pin[12]={0xdd,0xdd}; uchar idata rc500_serial_no[16]={0xaa,0xaa,0xaa,0xaa,0xaa}; uchar idata rc500_data_block_bak[16]={0xbb,0xbb,0xbb,0xbb,0xbb}; //-------------------------------------- void main(void) { r_led_on(); feed_dog(); init_cpu_io(); delay_ms(150); init_cpu_io(); init_var(); buzzer_on_moment(); soft_reset_rc500(); feed_dog(); init_rc500(); init_cpu(); g_led_on(); while(1) { feed_dog(); if( (g_task1&0x01) == 0x01) { g_task1 &= ~0x01; g_state_rc500 = 1; config_rc500_request(); g_rc500_softdog = 2000; // 1s } if( (g_task1&0x02) == 0x02) { g_task1 &= ~0x02; g_state_rc500 = 2; config_rc500_anticollision(); } if( (g_task1&0x04) == 0x04) { g_task1 &= ~0x04; g_state_rc500 = 3; get_rc500_card_serial(); config_rc500_select_card(); } //-------------------------------------------------------- if( (g_task1&0x08) == 0x08) { g_task1 &= ~0x08; g_state_rc500 = 4; config_rc500_pcd_loadkey(); // ok } if( (g_task1&0x10) == 0x10) { g_task1 &= ~0x10; g_state_rc500 = 5; config_rc500_picc_authenticate1(); } if( (g_task1&0x20) == 0x20) { g_task1 &= ~0x20; g_state_rc500 = 6; config_rc500_picc_authenticate2(); } if( (g_task1&0x40) == 0x40) { g_task1 &= ~0x40; g_state_rc500 = 7; config_rc500_inc_value(); } if( (g_task1&0x80) == 0x80) { g_task1 &= ~0x80; g_state_rc500 = 8; config_rc500_inc_data_1(); g_task2 |= 0x01; } if( (g_task2&0x01) == 0x01) { g_task2 &= ~0x01; r_led_on(); buzzer_on_moment(); g_task1 |= 0x01; } } } //--------------------------------------------------------- void rc500_interrupt (void) interrupt 0 using 1 { cs_rc500 = 0; if( (interruptrq&0x20) == 0x20 ) // irq_timeout { g_task1 |= 0x01; command = PCD_IDLE; } else if( g_state_rc500==4 ) { if( (errorflag&0x17)==0x00 ) g_task1 |= 0x10; else g_task1 |= 0x01; command = PCD_IDLE; } else if( g_state_rc500==5 ) { ......
>>返回讨论的主题
|