RC500读卡单片机源程序

发布时间:2022-12-26  

#define __MAIN_H

#include "main.h"

#undef __MAIN_H


#include

#include

#include

#include

#include "AT89S52.h"

#include "RICReg.H"

#include "m500a.H"

#include "PICCCmdConst.h"

#include "MfErrNo.h"


#define uchar unsigned char

#define uint unsigned int

//#define DataPort P0 // 并行数据接口

//pin define mcu 引脚定义

sbit RC500RST = P1^0; //复位 rc500

sbit RC500CS = P1^1; //rc500片选

sbit CARD_LED = P1^2; //系统LED灯

sbit SPEAKER = P1^3; //扬声器


bit bcard;


///////////////////////////////////////////////////////////////////////

// main

///////////////////////////////////////////////////////////////////////

void main(void)

{ //波特率

uchar baud;

InitSystem(); //系统初始化

delay_10ms(5); //延时

while (1)

{ delay_10ms(5);

if (bCmd) //判断执行命令标志位

{ bCmd = FALSE; //命令执行标志位清零

if(RevBuffer[0]==0x10) //RevBuffer[0]为0x10

{

RevBuffer[2]=RevBuffer[1];

cmd_ok();

SPEAKER=1;

CARD_LED=ON;

delay_10ms(RevBuffer[2]); //闪灯并鸣笛

SPEAKER=0;

CARD_LED=OFF;

}

else if(RevBuffer[0]==0x11) //RevBuffer[0]为0x11

{ switch(RevBuffer[1])

{ case 0:

baud=BAUD_9600;

break;

case 1:

baud=BAUD_14400;

break;

case 2:

baud=BAUD_19200;

break;

case 3:

baud=BAUD_28800;

break;

case 4:

baud=BAUD_38400;

break;

case 5:

baud=BAUD_57600;

break;

case 6:

baud=BAUD_115200;

break;

default:

baud=BAUD_19200;

break;

}

cmd_ok();

delay_10ms(5);

TR1 = 0;

TH1 = baud;

TL1 = TH1;

delay_10ms(2);

TR1 = TRUE;

}

else

uart_process(); //调用串口处理函数

}

}

}


///////////////////////////////////////////////////////////////////////

// 系统初始化

///////////////////////////////////////////////////////////////////////

void InitSystem(void)

{

RC500CS=0; //选通RC500

RC500RST=0; //复位


ET2 = FALSE; // 定时器2关中断

T2CON = 0x04; //TR2=1,TIMER2,auto reload

PCON = 0x80;

SCON = 0x70; // SMOD = 1;

TMOD = 0x21; //TMOD = 0x22;


TH1 = BAUD_19200; //定时器1产生波特率

TL1 = TH1;

TR1 = TRUE; // HT1

ET1=FALSE;

IT0 =TRUE; // Config ext0 as edge trigger for RC500

EX0 =TRUE; // Enable ext0 interrupt for RC500

EA = TRUE; // Enable all interrupts

TR2=FALSE; //Close T2

IP=0x10; //interrupt priority

ES = TRUE;

bCmd=FALSE; //

beep(1); //

splash(1);

MfConfig(); //配置RC500

}


///////////////////////////////////////////////////////////////////////

// uart 中断服务程序

///////////////////////////////////////////////////////////////////////

void Uart_ISR(void) interrupt 4 using 1

{

uchar len, i;

uint j=0;

if(RI) //如果是接收中断

{ len=SBUF; //读取接收到的数据

RI=0; //清除接收中断标志

for(i=0;i{

while(!RI)

{

j++;

if(j>1000)

{break; //超时退出

}

}

if(j<1000)

{ RevBuffer[i]=SBUF; //读取接收到的数据

RI=0;

j=0;

}

else

{break; }//超时退出

}

if(i==len)

{ REN=0; // 循环缓冲区环回

bCmd=TRUE; //命令标志位bCmd置位

}

}

else if(!RI && TI) //如果 RI=0,TI=1

{

TI=0; //清除发送中断标志位

len=RevBuffer[0]; //发送RevBuffer长度个数据

for(i=0;i{ SBUF=RevBuffer[i];

while(!TI)

;

TI=0;

}

REN=1;

}

}



///////////////////////////////////////////////////////////////////////

// uart process routine

///////////////////////////////////////////////////////////////////////

void uart_process(void)

{

uchar cmd;

uchar status;

cmd = RevBuffer[0];

switch(cmd)

{

case 0x20: // Request ,?

status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);

if(status!=0)

{

status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);

if(status!=0)

{

RevBuffer[0]=1;

RevBuffer[1]=status;

break;

}

}

if(RevBuffer[2]==2)

cardtype=mifare1S70; // Mifare1 S70 

else if(RevBuffer[2]==4)

cardtype=mifare1S50; // Mifare1 S50 

else if(RevBuffer[2]==16)

cardtype=mifarelight; // Mifare Light 

else

cardtype=unknowncard;

RevBuffer[0]=3; // 

RevBuffer[1]=status;

break;

case 0x21: //CardSnr

status = M500PiccCascAnticoll(0,&RevBuffer[2]);

if(status!=0) //ア?

{

RevBuffer[0]=1;

RevBuffer[1]=status;

break;

}

memcpy(CardSnr,&RevBuffer[2],4);

RevBuffer[0]=5;

RevBuffer[1]=status;

break;

case 0x22: // Select Card

status=M500PiccCascSelect(CardSnr,&RevBuffer[2]);

if(status!=MI_OK)

{

RevBuffer[0]=1;

RevBuffer[1]=status;

break;

}


RevBuffer[0]=3;

RevBuffer[1]=status;

break;

case 0x23: // Key loading into the MF RC500's EEPROM

status=M500PiccAuthE2(RevBuffer[1],CardSnr,RevBuffer[2],RevBuffer[3]);

RevBuffer[0]=1;

RevBuffer[1]=status;

break;

case 0x24: // Key loading into the MF RC500's EEPROM

status=M500PcdLoadKeyE2(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);

RevBuffer[0]=1;

RevBuffer[1]=status;

break;

case 0x25: // Read the mifare card

status=M500PiccRead(RevBuffer[1],&RevBuffer[2]);

if(status==0)

{

if(cardtype==mifare1S50||cardtype==mifare1S70)

RevBuffer[0]=17;

else if(cardtype==1)

RevBuffer[0]=9;

else

RevBuffer[0]=16;

}

else

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    时,一般会对多个从站设备的参数进行轮询。本文介绍西门子S7-1200作为Modbus RTU主站时的定时轮询程序。 1 主要使用的硬件和软件 2 通信任务 3 程序思路 要实现该功能,采用定时器轮询的方式来读写......
    层,提供RFID读写器的固件程序,支持多种数据采集模块;设备层,提供RFID系统运行的硬件环境和提供多种物理接口;系统层,提供RFID系统运行的软件环境;中间层,提供开发系统的基础软件框架和应用型RFID......
    作控制和UHF RFID读写器的手动测试过程,了解频谱仪FSV7对所测项目所需的参数配置。 LabVIEW测试软件的程序框图如图3所示。 其中仪器地址设置模块用来设置频谱仪的地址,实现......
    可以识别高速运动物体,并且能够同时识别多个标签,操作快捷方便。 简化的RFID系统 RFID系统模型如上图所示,RFID读写器/记录器中的环路天线通过电磁耦合与RFID标签中的环路天线进行通信,RFID读写器......
    结果中经常存在由于预期而影响交付的错误,生产线也经常存在人为因素导致的各种误差。将RFID标签应用于生产材料或产品,可以自动记录数量、规格、质量、时间、责任人等生产信息,取代传统的手工记录;生产主管通过读写器随时读取产品信息;其他......
    复旦微电推出UHF RFID整体解决方案,高度适用无源物联应用场景;2022年8月30日,上海讯——上海复旦微电子集团股份有限公司今日宣布推出超高频FM13UF系列标签芯片和FM13RD1616系列读写器......
    国芯物联获RFID芯片行业单笔最大融资 首款GXR-01读写器芯片已进入量产;据深圳特区报9月9日消息,深圳市国芯物联科技有限公司(以下简称“国芯物联”)凭借其自主研发的国产RFID(射频......
    复旦微电推出UHF RFID整体解决方案,高度适用无源物联应用场景;上海复旦微电子集团股份有限公司今日宣布推出超高频FM13UF系列标签芯片和FM13RD1616系列读写器芯片,具备超可靠、快速......
    应用案例 | RFID读写器设备在智能工厂的经典应用;RFID技术是工业制造领域实现智慧化识别和管理的基础,从原物料的探勘、采购、生产、物流,到送达工厂、库存、销售等整个过程,都可......
    流领域,RFID(射频识别)是一种管理货物的电子标签技术,主要用于货物出库、入库时的识别及管理。由于RFID标签本身没有电源,需捕捉读写器发出的电磁波进行通信,因此经常存在漏读,或者......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>