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

📄 x5045.c

📁 此程序为13.56MHz的RFID底层读写卡程序
💻 C
字号:
/******************************************************************/
// 模块原型:   FUNC.C
// 功    能:   X5045(EEPROM+WATCHDOG)操作底层函数。
/******************************************************************/

#include "hardware.h"
#include "intrins.h"

void Data_load(uchar RAM_data);
void instruction_load(uchar inst_name);
void Write_Status_Register(uchar RAM_data4);
void clock(void);



/******************************************************************/
// 函数原型:   void init_X5045(void)
// 功    能:   X5045初始寄存器设置
// 参    数:   Status_Register (初始寄存器值)
/******************************************************************/
void init_X5045(uchar Status_Register)
{

    CSI=0;_nop_();
    SCK=0;
    SI=0;
    SO=1;
    Write_Status_Register(Status_Register);
}
/******************************************************************/
// 函数原型:   void instruction_load(uchar inst_name)
// 功    能:   写入X5045命令字
// 参    数:   inst_name(命令字)
/******************************************************************/
void instruction_load(uchar inst_name)
{
   register uchar i;

   CSI=0;_nop_();
   for(i=0;i<8;i++)
   {
      SI=(bit)(inst_name&0x80);
      inst_name=inst_name<<1;
      clock();
   }

}
/******************************************************************/
// 函数原型:   void Data_load(uchar RAM_data)
// 功    能:   X5045写入数据
// 参    数:   RAM_data(1字节数据)
/******************************************************************/
void Data_load(uchar RAM_data)
{
    register uchar i;

    for(i=0;i<8;i++)
    {
       SI=(bit)(RAM_data&0x80);
       RAM_data=RAM_data<<1;
       clock();
    }
}
/******************************************************************/
// 函数原型:   void Write_Status_Register(uchar RAM_data4)
// 功    能:   X5045写状态寄存器
// 参    数:   RAM_data4(1字节数据)
/******************************************************************/
void Write_Status_Register(uchar RAM_data4)
{

   instruction_load(WREN);
   CSI=1;_nop_();
   _nop_();_nop_();
   instruction_load(WRSR);
   Data_load(RAM_data4);
   CSI=1;_nop_();
}

/******************************************************************/
// 函数原型:   uchar Read_Status_Register(void)
// 功    能:   读X5045状态寄存器
// 参    数:   无
/******************************************************************/
uchar Read_Status_Register()
{
   register uchar i;
   bit bit_temp=0;
   uchar  I_data=0;

   instruction_load(RSDR);
   SCK=1;_nop_();
   bit_temp=SO;
   for(i=0;i<8;i++)
   {
      SCK=0;_nop_();
      I_data*=2;
      if(bit_temp)
      { I_data++; }
      SCK=1;_nop_();
      bit_temp=SO;
   }
   CSI=1;_nop_();
   return(I_data);
}
/******************************************************************/
// 函数原型:   uchar Write_Ram_byte(uint RAM_address,uchar *RAM_data2,uchar length)
// 功    能:   X5045写入数据
// 参    数:
/******************************************************************/
uchar Write_Ram_byte(uint RAM_address,uchar *RAM_data2,uchar length)
{
   uchar low_addr,WRITE;
   uint i;
   bit SS;

   CSI=0;_nop_();
   SCK=0;
   SI=0;
   SO=1;
   SS=(bit)(RAM_address&0x100);
   if(SS==1)
   {  WRITE=0x0a;}
   else{ WRITE=0x02;}

   low_addr=(uchar)RAM_address;
   CSI=1;_nop_();
   instruction_load(WREN);
   CSI=1;_nop_();
   instruction_load(WRITE);
   Data_load(low_addr);
   for(i=0;i<length;i++)   { Data_load(RAM_data2[i]); }
   CSI=1; _nop_();

   for(i=0;i<1900;i++)
   {
     _nop_();
     _nop_();
   }
   _nop_();
   do
   {
      i=Read_Status_Register();
      SS=(bit)(i&0x01);
   }
   while(SS);
   return 0;
}
/******************************************************************/
// 函数原型:   void Read_Ram(uint RAM_address,uchar *RAM_data6,uchar length)
// 功    能:   读X5045偏移地址内容
// 参    数:
/******************************************************************/
void Read_Ram(uint RAM_address,uchar *RAM_data6,uchar length)
{
   uchar  j,I_data=0;
   register uchar i;
   bit bit_temp=0;

   CSI=0;_nop_();
   SCK=0;
   SI=0;
   SO=1;

   CSI=1;_nop_();
   SO=1;_nop_();

   if((bit)(RAM_address&0x100)==1)
   {  instruction_load(0x0b);  }
   else{  instruction_load(0x03); }
   Data_load((uchar)RAM_address);

   for(j=0;j<length;j++)
   {
        SCK=1;_nop_();
        bit_temp=SO;
        for(i=0;i<8;i++)
        {

           SCK=0;_nop_();
           I_data*=2;
           if(bit_temp)
           { I_data++; }
           SCK=1;_nop_();
           bit_temp=SO;
        }
        RAM_data6[j]=I_data;
   }
   CSI=1;_nop_();
}
/******************************************************************/
// 函数原型:   void clock(void)
// 功    能:   X5045时钟
// 参    数:   无
/******************************************************************/
void clock(void)
{
  SCK=1;
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   SCK=0;
}

/******************************************************************/
// 函数原型:   void watchdog(void)
// 功    能:   看门狗 (default 1.4s)
// 参    数:   无
/******************************************************************/
void W_DOG(void)
{
   CSI=1;
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   CSI=0;
}

⌨️ 快捷键说明

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