导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→mifare 读写程序

* 55321: mifare 读写程序

   yejianguocom 
yejianguocom发表的帖子 

 mifare 读写程序
//--------------------------------------
#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 )
      {
        if( (errorflag&0x17)==0x00 )
          g_task1 |= 0x20;
        else
          g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   else if( g_state_rc500==6 )
      {
        if( (errorflag&0x17)==0x00 && (control&0x08)==0x08)
          g_task1 |= 0x40;
        else
          g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   else if( g_state_rc500==7 )
      {
        if( (errorflag&0x17)==0x00 && (control&0x08)==0x08)
          g_task1 |= 0x80;
        else
          g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   else if( g_state_rc500==8 )
      {
        buzzer_on_moment();
        if( (errorflag&0x17)==0x00 && (control&0x08)==0x08)
          g_task2 |= 0x01;
        else
          g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   else if( g_state_rc500==8 )
      {
        led_r = !led_r;
        if( (errorflag&0x17)==0x00 && (control&0x08)==0x08)
          g_task2 |= 0x01;
        else
          g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   else if( (interruptrq&0x08) == 0x08 )     //  irq_rx
      {
        control |= 0x04;
        switch( g_state_rc500 )
          {
             case 1:
                      if( (errorflag&0x17)==0x00 && fifolength==0x02 )
                          g_task1 |= 0x02;
                      else
                          g_task1 |= 0x01;
                      break;
             case 2:
                      if( (errorflag&0X17)==0x00 && fifolength==0x05 )
                          g_task1 |= 0x04;
                      else
                          g_task1 |= 0x01;
                      break;
             case 3:
                      if( (errorflag&0x17)==0x00 && fifolength==0x01 )
                          g_task1 |= 0x08;
                      else
                          g_task1 |= 0x01;
                      break;
             default :
                      g_task1 |= 0x01;
                      break;
          }
        command = PCD_IDLE;
      }
   else
      {
        g_task1 |= 0x01;
        command = PCD_IDLE;
      }
   cs_rc500 = 1;
}
//--------------------------------------------------------------------------
void timer0_int (void) interrupt 1 using 2        // 0.5 ms for ac_buzzer
{                                                 // 1.0 ms for dc_buzzer
  TR0 = 0;
  TH0 = CONST_TH0;
  TL0 = CONST_TL0;
  TR0 = 1;
  if( g_card_left!=0x00 && --g_card_left==0x00)
    {
       rc500_data_block_bak[0]=0x42;
       rc500_data_block_bak[1]=0x38;
       rc500_data_block_bak[2]=0x17;
       rc500_data_block_bak[3]=0x14;
       rc500_data_block_bak[4]=0x41;
    }
  if( g_buzzer_on_time!=0x00 )
    {
      #ifdef   BUZZER_AC
         buzzer = !buzzer;                       //   (3)   ac_dc buzzer
      #endif
      if( --g_buzzer_on_time==0x00 )
        {
          g_led_on();
          buzzer_dc_off();
        }
    }
  if( --g_rc500_softdog  == 0)
    {
       g_task1 |= 0x01;
    }
}
//---------------------------------------------------------------------------


qq: 157409062

发表时间:2004年5月25日17:01:13

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  55322.[详细]mifare 读写程序
摘要://------------------------------------- #define  IN_ROUTINE_C #include "mifare.h"&nbs......(8635字)
- [yejianguocom][1617次] 2004年5月25日

[上一篇帖子]:mifare 读写程序//--------------------------------
[下一篇帖子]:真诚的希望我能帮到您!!!专业制作各种PCB板:多层板﹝4-20层﹞高频印制板.铝基印制板.双面板.