射频 rc500代码完全注释

2018-11-29 16:23

#define M500_GLOBALS //PICC=卡?PCD=阅读器 //以下位要包含的头文件

#include /*字符串函数及存储器函数头文件*/ #include /*标准I/O头文件*/

#include /*存储器绝对地址访问定义?与指令MOVX相关*/ #include /*内部函数定义?与循环指令?例如RR)?位判断指令?例如JB),以及空操作指令?NOP)等相关*/

#include \内部寄存器定义头文件*/ #include \内部寄存器错误标志头文件*/ #include \内部寄存器定义头文件*/

#include \用户自定义相关变量和数据结构头文件*/

#define GetRegPage(addr)(0x80|(addr>>3)) /*将addr右移3位再与80h取或*/

#definenocard0 / *能量场中没有卡*/ #definemifare11 /*场中有mifare1卡*/

#definemifarepro2 /*场中有mifarepro卡*/ #definemifarelight3 /*场中有mifarelight卡*/ #defineunknowncard4 /*场中有未知卡*/ #defineNO_TIMER21 /*?*/ #defineucharunsignedchar

bdataucharAA; //A,可位寻址单字节数据类型 sbithigh_bit=AA^7; //ACC.7 sbitlow_bit=AA^0; //ACC.0 //ucharsebuf;//RECBUF,SENBUF ucharidatadisp_buf[4]; void del_8us() {

Uchar i;

for(i=0;i<1;i++) {;} }

voiddel_50us()//延时子程序 {

Uchar i;

for(i=0;i<6;i++) {;} }

voiddel_50ms() {

Uchar i,j;

for(i=0;i<255;i++) for(j=0;j<255;j++)

{;} }

voidsend(ucharsebuf)//发送子程序 {

57.uchari; 58.AA=sebuf; 59.CLK=0; 60.CS=0;

61.del_50us();

62.for(i=0;i<8;i++) 63.{

64.del_8us(); 65.DIO=high_bit; 66.CLK=1;

67.del_8us();

68.AA=AA<<1;//循环移位 69.CLK=0; 70.}

71.DIO=0; 72.}

void reset_light()//复位子程序 {

KEY=1; DIO=1;

del_8us(); send(0xa4); CS=1;

del_8us(); }

void reset_7289() {

reset_light();//上电初检 send(0xbf);

CS=1;//测试所有的led灯 del_50ms();

reset_light();//恢复熄灭状态 }

void display() {

Uchar i;

for(i=0;i<4;i++)

{send(0xa1);CS=1;del_8us();//逻辑左移指令 send(0xc8);

send((disp_buf[i]>>4)&0x0f);CS=1;del_8us();

send(0xa1);CS=1;del_8us();//逻辑左移指令 send(0xc8);

send(disp_buf[i]&0x0f);CS=1;del_8us(); } }

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

/*往一个寄存器写一个数据*/

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

Void WriteRawIO(unsignedcharAddress,unsignedcharvalue) {

XBYTE[Address]=value;/*调用XBYTE函数?*/ }

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

/*从一个寄存器读出一个数据*/

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

Unsigned char ReadRawIO(unsigned char Address) {

returnXBYTE[Address];/*调用XBYTE函数*/ }

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

/*用页选方式访问寄存器?写入?*/

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

void WriteIO(unsigned char Address,unsigned char value) {

WriteRawIO(0x00,GetRegPage(Address));/*调用writerawio()函数?页选?80h-87h?*/

WriteRawIO(Address,value);/*调用writerawio()函数?选择一个寄存器?0-7h?*/ }

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

/*用页选方式访问寄存器?读出?*/

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

Unsigned char ReadIO(unsigned char Address) {

WriteRawIO(0x00,GetRegPage(Address));/*调用writerawio()函数?页选*/ returnReadRawIO(Address);/*调用readrawio()函数*/

}

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

/*设置定时时间*/

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

void M500PcdSetTmo(unsigned char tmoLength) {

switch(tmoLength) {case1:

WriteIO(RegTimerClock,0x07);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,0x6a);/*调用WRITEIO()函数,从单片机写计时器的初始值(6AH)*/ break; case2:

WriteIO(RegTimerClock,0x07);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,0xa0);/*调用WRITEIO()函数,从单片机写计时器的初始值(A0H)*/ break; case3:

WriteIO(RegTimerClock,0x09);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/512--2^9*/

WriteIO(RegTimerReload,0xa0);/*调用WRITEIO()函数,从单片机写计时器的初始值(A0H)*/ break; case4:

WriteIO(RegTimerClock,0x09);/*调用WRITEIO()函数,从单片机写计时器得分频比

(09H)=13.56MHZ/512--2^9*/

WriteIO(RegTimerReload,0xff);/*调用WRITEIO()函数,从单片机写计时器的初始值(FF)*/ break; case5:

WriteIO(RegTimerClock,0x0b);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,0xff);/*调用WRITEIO()函数,从单片机写计时器的初始值(FFH)*/ break;

case6:

WriteIO(RegTimerClock,0x0d);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,0xff);/*调用WRITEIO()函数,从单片机写计时器的初始值(FFH)*/ break; case7:

WriteIO(RegTimerClock,0x0f);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,0xff);/*调用WRITEIO()函数,从单片机写计时器的初始值(FFH)*/ break;

default:/*其它情况*/

WriteIO(RegTimerClock,0x07);/*调用WRITEIO()函数,从单片机写计时器得分频比

(07H)=13.56MHZ/128--2^7*/

WriteIO(RegTimerReload,tmoLength);/*调用WRITEIO()函数,从单片机写计时器的初始值(TMOLENTH)*/ break; } }

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

//Request Command define dinISO14443(Mifare) /*命令判别程序*/

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

Char M500PcdCmd(unsigned char cmd, volatileunsignedchardata*rcv, MfCmdInfoidata*info) {

Char idatastatus=MI_OK;

Char idatatmpStatus;/*中间状态寄存器*/

Unsigned char idatalastBits;/*中间状态寄存器*/ unsigned int idatatimecnt=0; unsigned char idatairqEn=0x00; unsigned char idatawaitFor=0x00; unsigned char idatatimerCtl=0x00;

WriteIO(RegInterruptEn,0x7F);/*?06H?SETEN,0,TIMER,TX,RX,IDLE,HI,LO=0111,1111:禁中断使 能*/

WriteIO(RegInterruptRq,0x7F);/*(07H)SETIRQ,0,TIMER,TX,RX,IDLE,HI,LO=


射频 rc500代码完全注释.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:竞彩足球双平买法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: