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

📄 main.c

📁 用430控制FM1702SL----------------------------好东西
💻 C
📖 第 1 页 / 共 2 页
字号:
	acktemp=SPIWrite(TxControl_Reg,temp,1);
	if(acktemp) return(1);
	temp[0]=0x1;
	acktemp=SPIWrite(RxControl2_Reg,temp,1);
	if(acktemp) return(1);
	temp[0]=0x7;
	acktemp=SPIWrite(RxWait_Reg,temp,1);
	if(acktemp) return(1);
	return(0);
	}
////使FM1702SL进入软件powerdown模式
////;FM1702_Standby		发送FM1702_Standby信号
//char FM1702_Standby()
//{char acktemp,temp[1];
//	acktemp=SPIRead(Control_Reg,temp,1);
//	if(acktemp) return(1);
//	temp[0]=0x20;
//	acktemp=SPIWrite(Control_Reg,temp,1);
//	if(acktemp) return(1);
//	temp[0]=0x58;
//	acktemp=SPIWrite(TxControl_Reg,temp,1);
//	if(acktemp) return(1);
//	return(0);
//	}
////;使FM1702SL进入工作模式
////FM1702_Wakeup		发送FM1702_Wakeup信号
//char FM1702_Wakeup()
//{char acktemp,temp[1];
//	acktemp=SPIRead(Control_Reg,temp,1);
//	if(acktemp) return(1);
//	temp[0]=0xdf;
//	acktemp=SPIWrite(TxControl_Reg,temp,1);
//	if(acktemp) return(1);
//	acktemp=SPIRead(Control_Reg,temp,1);
//	if(acktemp) return(1);
//	if(temp[0]&0x20)return(1);
//	temp[0]=0x5b;
//	acktemp=SPIWrite(TxControl_Reg,temp,1);
//	if(acktemp) return(1);
//	return(0);
//
//	}
char Request()
{
char acktemp,temp[1];
	temp[0]=0x7;
	acktemp=SPIWrite(BitFraming_Reg,temp,1);
	if(acktemp) return(1);
//	temp[0]=0x7;
	acktemp=SPIRead(Control_Reg,temp,1);
	if(acktemp) return(1);

	temp[0]&=0xf7;
	acktemp=SPIWrite(Control_Reg,temp,1);
	if(acktemp) return(1);

	temp[0]=0x3;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
	if(acktemp) return(1);
	temp[0]=0x52;
  acktemp=Command_Send(Transceive,temp,1);
	if(acktemp) return(1);
	acktemp=Read_FIFO(temp);
	if(acktemp) return(1);
	if((temp[0]!=0x50)|(buff[0]!=0x4)|(buff[1]!=0x0))
	return(1);

	return(0);
}
char Clear_FIFO()
{char acktemp,temp[1],i;
 acktemp=SPIRead(Control_Reg,temp,1);
	if(acktemp) return(1);
	temp[0]|=0x1;
	acktemp=SPIWrite(Control_Reg,temp,1);
	if(acktemp) return(1);
	for(i=0;i<5;i++)
	  {acktemp=SPIRead(FIFOLength_Reg,temp,1);
	  if(acktemp==0)
	      {if(temp[0]==0)return(0);}
	   }
	return(1);
	}

//++++++++++++++++++++++++++++++++++++++++++
char Write_FIFO(char *ramadr,char width)
{char acktemp;
	if(width==0)return(0);
//	 for(i=0;i<width;i++)
	   acktemp=SPIWrite(FIFO_Reg,ramadr,width);
	   	if(acktemp) return(1);
	return(0);
	}
char Read_FIFO(char *ramadr)
{char acktemp,i;
	acktemp=SPIRead(FIFOLength_Reg,ramadr,1);
	if(acktemp) return(1);
	if(ramadr[0]==0)return(1);
	if(ramadr[0]>16)return(1);
	i=ramadr[0];
	acktemp=SPIRead(FIFO_Reg,&buff[0],i);
	 return(0);
	}
char Command_Send(char comm,char *ramadr,char width)
{char acktemp,temp[1],i;
	acktemp=Clear_FIFO();
	if(acktemp) return(1);

  ///测试读写//////////////////////////////
//  acktemp=Read_FIFO(temp);
//	if(acktemp) return(1);
//  buff[0]=0x12;buff[1]=0x34;buff[2]=0x56;
//  acktemp=Write_FIFO(buff,3);
//	if(acktemp) return(1);
//	buff[0]=0;buff[1]=0;buff[2]=0;
//   acktemp=Read_FIFO(temp);
//	if(acktemp) return(1);
 /////////////////////////////////////////////
         acktemp=Write_FIFO(ramadr,width);
	if(acktemp) return(1);

	acktemp=SPIWrite(Command_Reg,&comm,1);
	   	if(acktemp) return(1);
	 for(i=0;i<16;i++)
          {
          acktemp=SPIRead(Command_Reg,temp,1);
	  if(acktemp==0)
	      {if(temp[0]==0)return(0);}
	   }
	   return(1);
	}
char Get_UID()
{char acktemp,temp[2],i;
	temp[0]=0x3;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
	   	if(acktemp) return(1);
	temp[0]=0x93;temp[1]=0x20;
	acktemp=Command_Send(Transceive,temp,2);
	   	if(acktemp) return(1);
	acktemp=Read_FIFO(temp);
	if(temp[0]!=0x5)return(1);
	acktemp=0;
  for(i=0;i<5;i++)
     acktemp^=buff[i];
   if(acktemp) return(1);
   for(i=0;i<5;i++)
     Card_UID[i]=buff[i];
	return(0);
}

char Select_Tag()
{char acktemp,temp[1],i;
	temp[0]=0xf;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
	   	if(acktemp) return(1);
	buff[0]=0x93;buff[1]=0x70;
	for(i=0;i<5;i++)
     buff[i+2]=Card_UID[i];
	acktemp=Command_Send(Transceive,buff,7);
	   	if(acktemp) return(1);
	acktemp=Read_FIFO(temp);
	if(temp[0]!=0x1)return(1);
	if(buff[0]!=0x8)return(1);
	return(0);
	}
//存储密钥
//*ramadr:密钥
//buff[0]密钥密钥地址
//buff[1]:0
//buff[2]~buff[9]不能放密码//////////////
char Load_Key(char n,char *ramadr)
{char acktemp,temp[1],i;
	 buff[0]=n;buff[1]=0x0;
for(i=0;i<6;i++)
	{ temp[0]=ramadr[i];
        buff[2+i+i]=(((ramadr[i]&0xf0)>>4)|((~ramadr[i])&0xf0));
        buff[3+i+i]=((temp[0]&0xf)|(~(temp[0]&0xf)<<4));
   }
acktemp=Command_Send(WriteEE,buff,0x0e);
  delay1ms(4);
acktemp=SPIRead(SecondaryStatus_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x40)
  {temp[0]=0x0;
  acktemp=SPIWrite(Command_Reg,temp,0x1);
  if(acktemp) return(1);
  return(0);}
temp[0]=0x0;
acktemp=SPIWrite(Command_Reg,temp,0x1);
return(1);
}
//加载密钥
//入口:buff[0]密钥密钥地址
//buff[1]:0
char Load_Key_EE(char n)
{char acktemp,temp[2];
	temp[0]=n;temp[1]=0x0;
	acktemp=Command_Send(LoadKeyE2,temp,0x2);
  if(acktemp) return(1);
	acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x40)return(1);
	return(0);
	}

//读卡:
//sq,扇区,n:读N块
char rdbuff(char sq,char n)
{char acktemp;
	acktemp=Authentication(sq);
	if(acktemp) return(1);
	acktemp=Read_Block(n);
	if(acktemp) return(1);
	return(0);
	}
//三重认证
//N认证的块:
//temp[0]:0x60为A密钥,0x61为B密钥
char Authentication(char sq)
{char acktemp,temp[6],i;
	temp[0]=0xf;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
  if(acktemp) return(1);
  temp[0]=0x61;
  temp[1]=sq;
  for(i=0;i<4;i++)
  temp[2+i]=Card_UID[i];
  acktemp=Command_Send(Authent1,temp,0x6);
  if(acktemp) return(1);
	acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
 if(temp[0]&0xe)return(1);
 acktemp=Command_Send(Authent2,temp,0);
 if(acktemp) return(1);
 acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0xe)return(1);
acktemp=SPIRead(Control_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x8)return(0);
	return(1);
	}
char Read_Block(char n)
{char acktemp,temp[2];
	temp[0]=0xf;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
	if(acktemp) return(1);
	temp[0]=0x30;temp[1]=n;
	acktemp=Command_Send(Transceive,temp,2);
 if(acktemp) return(1);
	acktemp=SPIRead(ErrorFlag_Reg,temp,1);
  if(acktemp) return(1);
  if(temp[0]&0xe)return(1);
  acktemp=Read_FIFO(temp);
  if(acktemp) return(1);
  if(temp[0]!=16)return(1);
  return(0);
	}
char Write_Block(char *ramadr,char n)
{char acktemp,temp[2];
	temp[0]=0x7;
	acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
	if(acktemp) return(1);
	temp[0]=0xa0;temp[1]=n;
	acktemp=Command_Send(Transceive,temp,2);
	if(acktemp) return(1);
	temp[1]= buff[0];
	acktemp=Read_FIFO(temp);
  if(acktemp) return(1);
  if(temp[0]!=1)return(1);
  if(buff[0]!=0xa)return(1);
  buff[0]=temp[1];
  acktemp=Command_Send(Transceive,buff,0x10);
	if(acktemp) return(1);
	acktemp=Read_FIFO(temp);
  if(acktemp) return(1);
  if(temp[0]!=1)return(1);
  if(buff[0]!=0xa)return(1);
  buff[0]=temp[1];
  return(0);
	}

⌨️ 快捷键说明

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