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

📄 duxiexitongrc500.c

📁 #include <stc12c2052AD.H>// 标准库的头文件 #include <intrins.h> #include <absacc.h> #d
💻 C
📖 第 1 页 / 共 4 页
字号:
temp = Secnr * 12;//
//sen(temp);
if (Mode == 0)
{
  if (temp >= 0x80) //计算密码存放地址
     {
      lsb = temp - 0x80;
      msb = 0x01;
      }
    else
      {
      msb = 0x00;
      lsb = temp + 0x80;
     }
  }
  else
   {
    msb = 0x01;
    lsb = temp + 0x40;
  }
  for(i=0;i<4;i++) //要装入的密钥可根据你所改的密码填写

//{buffer[i]=0x0f;}
//buffer[4]=0xe1;
//buffer[5]=0xd2;
//for(i=6;i<12;i++)
//{buffer[i]=0x0f;}
for(i=0;i<12;i++)
{buffer[i]=0x0f;}

temp =Command_Send(12, buffer, LoadKey);//此处已修改用LoadKey命令
temp = ErrorFlag & 0x40;
if (temp == 0x40)
{
  return FALSE;
}
temp= RC500_OK;
CardStatus=0x01;
//for (j=0;j<6;j++)
//sen(gonggongxinxi[j]);
//return TRUE;
}
/****************************************************************/
/*名称: MIF_Read */
/*功能: 该函数实现读MIFARE卡块的数值 */
/*输入: buff: 缓冲区首地址 */
/* Block_Adr: 块地址 */
/*输出: RC500_NOTAGERR: 无卡 */
/* RC500_PARITYERR: 奇偶校验错 */
/*RC500_CRCERR: CRC校验错 */
/* RC500_BYTECOUNTERR: 接收字节错误 */
/* RC500-OK: 应答正确 */
/****************************************************************/
uchar MIF_READ(uchar idata *buff,uchar Block_Adr)
{
uchar idata temp;
CRCPresetLSB = 0x63;
CWConductance = 0x3f;
//ModConductance = 0X3f;
ChannelRedundancy = 0x0f;
       //Int_Req=0x7f;
buff[0] = RF_CMD_READ;
buff[1] = Block_Adr;
CardStatus=0; 
temp = Command_Send(2, buff, Transceive);
//sen(temp);//01
if (temp == 0)
{
CardStatus=0; 
return RC500_NOTAGERR;
}
temp = ErrorFlag;
//sen(ErrorFlag);//00
if ((temp & 0x02) == 0x02) 
return RC500_PARITYERR;
if((temp & 0x04) == 0x04) 
return RC500_FRAMINGERR;
if ((temp & 0x08) == 0x08)
return RC500_CRCERR;

temp = FIFO_Length;//0x10
//sen(temp);
if (temp == 0x10)      //8K卡读数据长度为16
{
Read_FIFO(buff);//10
READ_data(temp);
//sen(0x58);
CardStatus=0x01; 
return RC500_OK;
}
else if (temp == 0x04) //Token卡读数据长度为16
{
Read_FIFO(buff);

CardStatus=0x01; 
return RC500_OK;
}
else
{
CardStatus=0; 
return RC500_BYTECOUNTERR;
}
}
/****************************************************************/
/*名称: MIF_Write */
/*功能: 该函数实现写MIFARE卡块的数值 */
/*输入: buff: 缓冲区首地址 */
/* Block_Adr: 块地址 */
/*输出: RC500_NOTAGERR: 无卡 */
/* RC500_BYTECOUNTERR: 接收字节错误 */
/* RC500_NOTAUTHERR: 未经权威认证 */
/* RC500_EMPTY: 数据溢出错误 */
/* RC500_CRCERR: CRC校验错 */
/* RC500_PARITYERR: 奇偶校验错 */
/* RC500_WRITEERR: 写卡块数据出错 */
/* RC500_OK: 应答正确 */
/****************************************************************/
uchar MIF_Write(uchar idata *buff,uchar Block_Adr)
{
uchar idata temp;
//uint i;
uchar idata *F_buff;
CRCPresetLSB = 0x63;
CWConductance = 0x3f;
F_buff = buff + 0x10;
ChannelRedundancy = 0x07;//选择RF 信道上数据完整性检测的类型和模式
*F_buff =RF_CMD_WRITE;
*(F_buff + 1)=Block_Adr;
CardStatus=0;

temp = Command_Send(2, F_buff, Transceive);
//sen(0x07);
if (temp == FALSE)
{CardStatus=0;
return(RC500_NOTAGERR);
}
temp = FIFO_Length;

if (temp == 0)
{CardStatus=0;
return(RC500_BYTECOUNTERR);
}
Read_FIFO(F_buff);//01
temp = *F_buff;
READ_data(temp);
//sen(temp);
switch (temp)
{
case 0x00 :
return(RC500_NOTAUTHERR); //暂时屏蔽掉写错误
case 0x04:
return(RC500_EMPTY);
case 0x0a:
break;
case 0x01:
return(RC500_CRCERR);
case 0x05:
return(RC500_PARITYERR);
default:
return(RC500_WRITEERR);
}
//for(i=0;i<6;i++)                       ///
      //{ buffer[i]=0xff;}
	   //buffer[6]=0x7F;
       //buffer[7]=0x07;
       //buffer[8]=0x88;
      // buffer[9]=0x69;
//for(i=10;i<16;i++)
     //{  buffer[i]=0xff;}
temp = Command_Send(16, buff, Transceive);
if (temp == TRUE)
{

CardStatus=0x01;
return(RC500_OK);
}
else
{CardStatus=0;
temp = ErrorFlag;
//sen(temp); 

if ((temp & 0x02)==0x02)
return(RC500_PARITYERR);
else 
if((temp & 0x04)==0x04)
return(RC500_FRAMINGERR);
else
if ((temp & 0x08)==0x08)
return(RC500_CRCERR);
else
return(RC500_WRITEERR);
}
}

/****************************************************************/
/*名称: HL_Active */
/*功能: 该函数实现高级MIFARE卡激活命令 */
/*输入: Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/*输出: 操作状态码 */
/* 读出数据存于buffer中 */
/****************************************************************/
uchar HL_Active(uchar Block_Adr,uchar Mode)
{
uchar temp;
CardStatus=0;
Secnr = Block_Adr/4;
MIF_Halt();                         //暂停MIFARE卡71 01
temp = Request(RF_CMD_REQUEST_STD); //监测ALL的卡片请求
if(temp != RC500_OK)
{CardStatus=0;
return(RC500_REQERR);
}
temp = AntiColl();                  //卡片的防冲突检测读出卡号 71 length  05    6A 8B 2E 0E C1     03
if(temp != RC500_OK)
{CardStatus=0;
return(RC500_ANTICOLLERR);
}
temp = Select_Card();               //71  40  01
if(temp != RC500_OK)
{CardStatus=0;
return(RC500_SELERR);
}
Load_keyE2_CPY((Secnr%16), Mode); //LoadKey
temp = mimarenzhen(UID, Secnr, Mode);
if(temp != RC500_OK)
{CardStatus=0;
return(RC500_AUTHERR);
}
CardStatus=0x01;
return RC500_OK;
}

/****************************************************************/
/*名称: HL_Read */
/*功能: 该函数实现高级读命令 */
/*输入: Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/*输出: 操作状态码 */
/* 读出数据存于buffer中 */
/****************************************************************/
uchar HL_Read(uchar idata *buff,uchar Block_Adr,uchar Mode)
{
uchar temp;
CardStatus=0;
temp = HL_Active(Block_Adr, Mode);
if(temp !=  RC500_OK)
{
CardStatus=0;
return temp;
}
temp = MIF_READ(buff,Block_Adr);
if(temp !=  RC500_OK)
{
CardStatus=0;
return temp;
}
 
//DelayMS(1000);
//P14=0;
//DelayMS(1000);        //控制小喇叭
//P14=1;  
CardStatus=0x01;
return  RC500_OK;
}
/////////////////////////////////////////

/****************************************************************/
/*名称: HL_Write */
/*功能: 该函数实现高级写命令 */
/*输入: buff: 待写入数据的首地址 */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/*输出:操作状态码 */
/****************************************************************/
/*uchar HL_Write(uchar idata *buff,uchar Block_Adr,uchar Mode)// 写卡
 {
    uchar temp; ///
  CardStatus=0;
    temp = HL_Active(Block_Adr, Mode);
   if(temp !=  RC500_OK)
   {CardStatus=0;
   return temp;
   }

temp = MIF_Write(buff,Block_Adr);
    if(temp !=  RC500_OK)
   {CardStatus=0;
   return temp;
   }
CardStatus=0x01;
return  RC500_OK;
 }

*/

/*--------------------------------------------------------------------
 FUNCTION: TurnOff_Card,关卡
 INPUT:
 OUTPUT:   CardStatus
--------------------------------------------------------------------*/
void 	TurnOff_Card(void)
   {   
	 uchar temp;
  CardStatus=0;
     temp = MIF_Halt();	
 if(temp !=  RC500_OK)
   {
    CardStatus=0;
   }
 else{
      CardStatus=0x01;
     }
 }
/************************************************
一、	通讯测试,测试单片机与模块通讯是否正常
************************************************/
void Commu_test(void)
{   uchar  temp ;
    uint i;
    //uchar Block_Adr=4;
    CardStatus=0; 
    NCS = FALSE;
	MFRST=1;
	for (i=0;i<0x1fff; i++)
	 {
	  _nop_();
	 }
	MFRST=0;
	for(i=0;i<0x1fff;i++)
	  {
		_nop_();
	  }
  while(Command!=0);
      RC500_Bus_Sel();
      TimerClock=0x0b;
	  TimerControl=0x02;
      TimerReload=0x42;
      InterruptEn=0x7f;
      temp=InterruptEn;
      Int_Req=0x7f;
      MFOUTSelect=0x02;//调整输出功率以及电流消耗和操作距离.
      TxControl=0x5b;//TX2/1上的输出信号将传递由发送数据调制的13.56MHz能量载波
      CardStatus=0x01;
 }
/************************************************
一、	
                  寻卡请求
************************************************/
uchar xunka(void)  
{  uchar temp;
CardStatus=0; 
MIF_Halt();                         //暂停MIFARE卡71 01
temp = Request(RF_CMD_REQUEST_ALL);//监测ALL的卡片请求
if(temp != RC500_OK)
{
CardStatus=0;
return(RC500_REQERR);
//for(i=0;i<6;i++)
//sen(cuowufanhui[i]);
}
temp = AntiColl(); 

//卡片的防冲突检测读出卡号 
if(temp != RC500_OK)
{CardStatus=0;
return(RC500_ANTICOLLERR);
} 
else{ CardStatus=0x01;
         }
    }
/////////////////////////////////////////
uchar xiamima(uchar Secnr,uchar Mode)
{
uchar temp;
CardStatus=0; 
xunka();//2
temp = Select_Card();               //71  40  01
if(temp != RC500_OK)
{
CardStatus=0; 
return(RC500_SELERR);
}
Load_keyE2_CPY((Secnr%16), Mode); //LoadKey 
if(CardStatus)
{
CardStatus=0x01;
}
else{
CardStatus=0;
return(RC500_SELERR);
         }
}
////////////////////////////////////////////////////////
uchar mimarenzheng(uchar idata *UID,uchar Secnr,uchar mode)
 {  uchar temp;
   CardStatus=0; 
temp=mimarenzhen(UID, Secnr, mode);
if(temp != RC500_OK)
{
CardStatus=0; 
return(RC500_SELERR);
}
else{ CardStatus=0x01;
         }

}

///////////////////////////////////////////
uchar xiangsheng(void)
{
uchar j;
DelayMS(100);
P14=0;
DelayMS(1000);        //控制小喇叭
P14=1;
for (j=0;j<6;j++)
sen(gonggongxinxi[j]);
return(CardStatus);
}
//////////////////////////////////////////////////////////////////////////////////////////
void main(void)
   {
     uchar i,j;
	 uchar shuju[30];
     //uchar CardDataBuf[16];
   PCON = 0x00;   //波特率控制,SMOD=0
   TMOD = 0x20;   // //定时器1定时方式2
   TH1  = 0xfa;   //9600Baud, 
   TL1  = 0xfa;
   SCON = 0x50;   //串口方式 1,8bit UART ,SM2=0,REN=1
   TI = 0; //发送中断标志位置零
   RI = 0; //接收中断标志位置零 
   TR1  = 1;//启动定时器 
     //TL1=0xFA;
     //TH1 = 0xFA;
     //TL0=0xff;
	 //TH0=0x00;
 	 //TMOD=0x21;
     //SCON = 0x50; // 串口工作方式1,允许接收

⌨️ 快捷键说明

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