历史上的今天
返回首页

历史上的今天

今天是:2024年10月25日(星期五)

正在发生

2019年10月25日 | 单片机RFID高频RC632读卡程序,14443A,B.15693,都有

2019-10-25 来源:51hei

这是51单片机并行口rc632读卡程序

单片机源程序如下:

#include

#include

#include

#include "main.h"

#include "slrc632.h"

#include "iso14443a.h"

#include "iso14443b.h"

#include "iso15693.h" 


/*Declare SFR associated with the IAP */

sfr  IAP_DATA     =   0xE2;      //Flash data register

sfr  IAP_ADDRH    =   0xE3;            //Flash address HIGH

sfr  IAP_ADDRL    =   0xE4;            //Flash address LOW

sfr  IAP_CMD      =   0xE5;            //Flash command register

sfr  IAP_TRIG     =   0xE6;            //Flash command trigger

sfr  IAP_CONTR    =   0xE7;            //Flash control register


//硬件版本号         

unsigned char code hardmodel[12]  = {"SL601F-0512"};  


bit g_bReceOk;                                              //正确接收到上位机指令标志

bit g_bReceAA;                                              //接收到上位机发送的AA字节标志

bit g_bRc632Ok;                                             //RC632复位正常标志

bit g_bIblock;


void outputconvery ();


unsigned char Readcard_flag,start_flag=0,startnum=0;

unsigned int  idata g_cReceNum;                            //接收到上位机的字节数

unsigned int  data g_cCommand;                              //接收到的命令码

unsigned char data g_cSNR[4];                               //M1卡序列号

unsigned char g_cIcdevH;                                    //设备标记

unsigned char g_cIcdevL;                                    //设备标记

unsigned char g_cFWI;                                       //

unsigned char idata  g_cCidNad,huankuaiflag=0;                                    //

unsigned char idata g_cReceBuf[64];                         //和上位机通讯时的缓冲区

unsigned char idata canshu[5]={0x00,0x00,0x00,0x10,0x01};//0:扇区,1:块,2-3:卡号首尾位置,4:读卡方式

unsigned char idata key[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密码

unsigned char idata canshuflag=0,timenum=0,UID[4];

struct TranSciveBuffer{unsigned char MfCommand;

                       unsigned int  MfLength;

                       unsigned char MfData[64];

                      };


/***************************定时器0初始化********************************/

void timer0init (void)//22.1184MHZ,20ms

{        

        TH0=0x70; 

        TL0=0x00;

        ET0=1;

        TR0=1;

        TMOD=0x21;

}


/*****************************定时器0中断函数********************************/

void timer0(void) interrupt 1

{

        TH0=0x70; 

        TL0=0x00;

        timenum++;

        if(timenum==100)  canshuflag=1,timenum=0;

}

        

void gonggongdaima(void)

{

        IAP_TRIG = 0x46;//发送46h到触发寄存器

        IAP_TRIG = 0xB9;//发送B9h到触发寄存器

        _nop_();//延时

        IAP_CONTR = 0;//关闭IAP功能

        IAP_CMD = 0;//清空命令寄存器

        IAP_TRIG = 0;//清空命令触发寄存器

        IAP_ADDRH = 0;//清空地址高位

        IAP_ADDRL = 0;//清空地址低位

}

/**************************字节读函数***************************************/

unsigned char Byte_Read(unsigned int add)

{

        IAP_DATA = 0x00;//清空数据

        IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 

        IAP_CMD = 0x01;//字节读命令

        IAP_ADDRH = add>>8;//设置高8位地址

        IAP_ADDRL = add&0x00ff;//设置低8位地址

        gonggongdaima();

        return (IAP_DATA);//返回读到的数据

}


/*****************************字节编程函数*****************************/

void Byte_Program(unsigned int add, unsigned char dat)

{

        IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 

        IAP_CMD = 0x02;//字节编程命令

        IAP_ADDRH = add>>8;//设置高8位地址

        IAP_ADDRL = add&0x00ff;//设置低8位地址

        IAP_DATA = dat;//要编程的数据先送进IAP_DATA寄存器

        gonggongdaima();

}


/*****************************扇区擦除函数****************************/

void Sector_Erase(unsigned int add)

{

        IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 

        IAP_CMD = 0x03;//扇区擦除命令

        IAP_ADDRH = add>>8;//设置高8位地址

        IAP_ADDRL = add&0x00ff;//设置低8位地?

        gonggongdaima();

}



/****************************读取参数函数************************/

void Read_canshu(void)

{

        canshu[0]=Byte_Read(0x8000);

        canshu[1]=Byte_Read(0x8001);

        canshu[2]=Byte_Read(0x8002);

        canshu[3]=Byte_Read(0x8003);

        canshu[4]=Byte_Read(0x8004);

}        

void Read_Akey(void)

{

        key[0]=Byte_Read(0x8200);

        key[1]=Byte_Read(0x8201);

        key[2]=Byte_Read(0x8202);

        key[3]=Byte_Read(0x8203);

        key[4]=Byte_Read(0x8204);

        key[5]=Byte_Read(0x8205);

}        

void Read_Bkey(void)

{

        key[0]=Byte_Read(0x8400);

        key[1]=Byte_Read(0x8401);

        key[2]=Byte_Read(0x8402);

        key[3]=Byte_Read(0x8403);

        key[4]=Byte_Read(0x8404);

        key[5]=Byte_Read(0x8405);

}


/****************************保存参数函数****************************/

void Save_canshu(void)

{

        Sector_Erase(0x8000);//擦除扇区

        Byte_Program(0x8000,canshu[0]);

        Byte_Program(0x8001,canshu[1]);

        Byte_Program(0x8002,canshu[2]);

        Byte_Program(0x8003,canshu[3]);

        Byte_Program(0x8004,canshu[4]);

}

void Save_Akey(void)

{

        Sector_Erase(0x8200);//擦除扇区

        Byte_Program(0x8200,key[0]);

        Byte_Program(0x8201,key[1]);

        Byte_Program(0x8202,key[2]);

        Byte_Program(0x8203,key[3]);

        Byte_Program(0x8204,key[4]);

        Byte_Program(0x8205,key[5]);

}

void Save_Bkey(void)

{        

        Sector_Erase(0x8400);//擦除扇区

        Byte_Program(0x8400,key[0]);

        Byte_Program(0x8401,key[1]);

        Byte_Program(0x8402,key[2]);

        Byte_Program(0x8403,key[3]);

        Byte_Program(0x8404,key[4]);

        Byte_Program(0x8405,key[5]);

}                                                                                    


void delay(unsigned int i)

{

   unsigned char j;

   while(i--) for(j=0;j<200;j++);

}


void BEEP(unsigned char i)

{

  unsigned char k;

        k=100;

  sond =  0;

        redled = 1;

        blueled =  0;

        delay(k);

        sond =1;

        blueled = 1;

        redled = 0;   

}


void REDON(void)

{

    redled =  1;

}


void REDOFF(void)

{

    redled =  0;

}

void BLUEON(void)

{

    blueled =  1;

}


void BLUEOFF(void)

{

    blueled =  0;

}



                                          

void main( )

{      

                InitializeSystem( );

                Rc632Ready( ); 

                PcdConfigISOType( '1' );

                BEEP(2);                 

                DelayMs(1000);

                RC632_CE=0;

推荐阅读

史海拾趣

Anderson Power公司的发展小趣事

Anderson Power是一家专注于电源连接器和配件制造的公司,以下是该公司发展的相关故事:

  1. 公司成立与初期阶段:Anderson Power成立于1953年,总部位于美国马萨诸塞州斯特林。最初,公司主要从事电源连接器的制造和销售。公司的创始人是William E. Anderson,他在创立公司之初便致力于提供高质量、可靠的连接器产品,满足不断增长的市场需求。

  2. 技术创新与产品发展:随着市场的需求不断增长,Anderson Power不断进行技术创新和产品开发,推出了一系列新型的电源连接器和配件产品。公司在连接器设计和制造方面拥有丰富的经验和专业知识,能够根据客户的需求定制各种类型的连接器产品。

  3. 客户合作与市场拓展:Anderson Power与全球各个行业的客户建立了长期稳定的合作关系。公司的客户群涵盖了汽车、航空航天、工业、能源等多个领域。通过与客户的紧密合作,Anderson Power不断拓展市场份额,提升品牌知名度,成为电源连接器领域的领先供应商之一。

  4. 全球布局与生产基地:为了更好地服务全球客户,Anderson Power在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在欧洲、亚洲等地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的连接器产品。

  5. 持续发展与未来展望:作为一家专注于电源连接器的公司,Anderson Power将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Anderson Power也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。

Holt Integrated Circuits公司的发展小趣事

除了传统的航空电子解决方案外,Holt还致力于高压LCD显示驱动器的研发。这些产品不仅满足了航空电子设备对高可靠性和高清晰度的需求,还广泛应用于工业过程自动化和井下钻探等领域。Holt的高压LCD显示驱动器以其卓越的性能和稳定性,赢得了众多客户的信赖和好评。

EMC Technology RF Labs公司的发展小趣事

EMC Technology RF Labs成立于XXXX年,作为EMC Technology公司的一个专门研究射频(RF)技术的实验室。创立之初,RF Labs的目标是为电子通信行业提供高质量的射频元件和解决方案。公司聚集了一批在射频技术领域具有丰富经验和专业知识的工程师,开始了对射频技术的深入研究和探索。

D1 International Inc公司的发展小趣事

D1 International Inc公司自创立之初,就专注于技术创新。公司的创始人们深知,在竞争激烈的电子行业中,只有拥有独特的技术优势才能立足。因此,他们投入大量资源研发新型电子元器件,其中一款高性能的芯片因其低功耗和高效能,迅速在市场上获得了认可。这一技术的成功研发,为D1 International Inc公司赢得了第一桶金,也为公司后续的发展奠定了坚实的基础。

Fujisoku Corporation公司的发展小趣事

随着全球化进程的加速,“未来电子”意识到单一市场已无法满足公司的长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,积极拓展国际市场。在欧洲、北美和亚洲等地,“未来电子”的产品和服务得到了广泛认可,市场份额逐年攀升。这一战略不仅提升了公司的国际影响力,还为公司的持续增长提供了强劲动力。

BROTHER公司的发展小趣事

在电子行业的发展过程中,技术创新始终是BROTHER公司的重要驱动力。公司注重研发投入,拥有一支高素质的研发团队,不断推出具有创新性和竞争力的新产品。同时,BROTHER还积极与高校、科研机构等合作,开展产学研合作,推动技术创新和产业升级。通过技术创新,BROTHER不仅提升了产品质量和性能,还降低了生产成本,提高了市场竞争力。

问答坊 | AI 解惑

matlab第六课-图形的修饰

这个好多学问,不过你不想花哨的话,我就简单来几个最常用的了啊…

查看全部问答>

nRF2401 无线传输模块

本帖最后由 paulhyde 于 2014-9-15 03:53 编辑 包括原理图,PCB图和程序,比较全面的资料,内部资料啊!  …

查看全部问答>

求助

马上要毕业了,我是学通信的女生,工作很难找啊,我想好好做一下毕业设计,我的毕业设计的题目是射频技术的研究与应用,看似简单的题目,我却犯难了,不是想网上找些资料随便拼凑一下了事,真的很喜欢这个专业,所以想好好的做,希望各位同仁能够给 ...…

查看全部问答>

运放电路的增益小于1时会怎样?

当用运算放大器组成放大倍数绝对值小于1的回路时电路会怎么样? 内部补偿的恒定GBP的运放在放大倍数大于等于1时可以保证电路稳定,但当组成小于1的电路时会否引起电路稳定性问题??…

查看全部问答>

请问S3C2440+WinCE5.0串口通讯实时性的问题

S3C2440+WinCE5.0平台上,用EVC开发串口接收程序,请问串口能每隔1ms收到1字节的数据吗? 我编的应用程序实时性很差, …

查看全部问答>

通用TFT液晶驱动!!!!

我们公司开发的m600驱动模组能驱动1024*768以下不同厂家不同分辨率的TFT。需要资料的可以跟我联系。 boy_201a@163.com  13501104029 qq 781558807 张凯…

查看全部问答>

食人鱼LED的封装

食人鱼LED产品有很多优点,由于食人鱼LED所用的支架是铜制的,面积较大,因此传热和散热快。LED点亮后,pn结产生的热量很快就可以由支架的四个支脚导出到PCB的铜带上。这种LED食人鱼管子比φ3mm、φ5mm引脚式的管子传热快,从而可以延长器件的使用寿命。 ...…

查看全部问答>

请各位大侠帮帮忙

上面是主电路图 下面是两个控制信号波形 这两个波形的周期是10us 由于仿真已经仿真过了,现在想要做实验的 请大家介绍款比较简单易用的单片机!! 谢谢 …

查看全部问答>

逐次逼近型ADC工作原理----Flash动态演示

https://bbs.eeworld.com.cn/upfiles/img/20096/2009630164127921.rar 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20096/2009630164127921.rar…

查看全部问答>