射频 rc500代码完全注释(6)

2019-09-01 23:58

1003.{

1004.memcpy(_data,SerBuffer,16);/*则将读出的数据送_DATA存储*/ 1005.} 1006.}

1007.M500PcdSetTmo(1);/*延时?方式0?*/ 1008.returnstatus;/*返回状态值*/ 1009.} 1010.

1011.////////////////////////////////////////////////////////////////

1012.//Writethemifarecard

1013./*写卡,下载密码到15区?1-15?的任意区的第四块?密钥块?*/

1014.////////////////////////////////////////////////////////////////

1015.charM500PiccWrite(unsignedcharaddr,unsignedchar*_data) 1016.{/*addr=卡的EEROM数据块地址?_data=写入数据的存放区首址*/ 1017.charidatastatus=MI_OK; 1018.

1019.ResetInfo(MInfo);

1020.SerBuffer[0]=PICC_WRITE; 1021.SerBuffer[1]=addr; 1022.MInfo.nBytesToSend=2;

1023./*上面为写卡命令的入口参数?写指令?块地址?发送字节数*/ 1024.status=M500PcdCmd(PCD_TRANSCEIVE,SerBuffer,&MInfo); 1025.

1026.if(status!=MI_NOTAGERR)/*如果不是出现无卡情况*/ 1027.{

1028.if(MInfo.nBitsReceived!=4)/*如果返回比特数不是4*/ 1029.{

1030.status=MI_BITCOUNTERR;/*则置比特计数错标志*/ 1031.}

1032.else/*如果返回比特数是4*/ 1033.{

1034.SerBuffer[0]&=0x0f;

1035.if((SerBuffer[0]&0x0a)==0) 1036.{

1037.status=MI_NOTAUTHERR;/*没有通过授权?有些块是禁止读写的?*/ 1038.} 1039.else 1040.{

1041.if(SerBuffer[0]==0x0a)/*如果返回数据第一个字节最后四位是A*/ 1042.{

1043.status=MI_OK;/*则写入命令执行成功*/ 1044.}

1045.else 1046.{

1047.status=MI_CODEERR;/*否则是数据校验出错*/ 1048.} 1049.} 1050.} 1051.} 1052.

1053.if(status==MI_OK)/*如果写入命令执行成功*/ 1054.{

1055.M500PcdSetTmo(3); 1056.

1057.ResetInfo(MInfo);

1058.memcpy(SerBuffer,_data,16); 1059.MInfo.nBytesToSend=16;

1060./*上面为写卡命令的入口参数?要写入的数据16字节*/

1061.status=M500PcdCmd(PCD_TRANSCEIVE,SerBuffer,&MInfo);/*开始写入*/ 1062./*要写卡?必须先送命令?再送数据*/

1063.if(status&0x80)/*如果返回状态最高位为1*/ 1064.{

1065.status=MI_NOTAGERR;/*则是无卡在此场*/ 1066.}

1067.else/*如果返回状态最高位为0*/ 1068.{

1069.if(MInfo.nBitsReceived!=4)/*如果返回比特数不是4*/ 1070.{

1071.status=MI_BITCOUNTERR;/*则置比特计数错标志*/ 1072.}

1073.else/*如果返回比特数是4*/ 1074.{

1075.SerBuffer[0]&=0x0f;

1076.if((SerBuffer[0]&0x0a)==0)/*如果返回数据第一个字节最后四位是0*/ 1077.{

1078.status=MI_WRITEERR;/*写卡失败标志*/ 1079.}

1080.else/*如果返回数据第一个字节最后四位不是0*/ 1081.{

1082.if(SerBuffer[0]==0x0a)/*如果返回数据第一个字节最后四位是A?为什么?*/ 1083.{

1084.status=MI_OK;/*则写卡成功*/ 1085.} 1086.else 1087.{

1088.status=MI_CODEERR;/*否则是数据校验出错*/ 1089.} 1090.} 1091.} 1092.}

1093.M500PcdSetTmo(1);/*延时?方式1?*/ 1094.}

1095.returnstatus;/*返回状态值*/ 1096.} 1097.

1098.///////////////////////////////////////////////////////////////////////

1099.//ResetRfCard

1100./*重新配置RF读卡器*/

1101.///////////////////////////////////////////////////////////////////////

1102.charM500PcdRfReset(unsignedcharms) 1103.{

1104.charidatastatus=MI_OK; 1105.

1106.if(ms)/*如果有重启信号1*/ 1107.{

1108.ClearBitMask(RegTxControl,0x03);/*全部清零?不再有输出*/ 1109.delay_1ms(2);

1110.SetBitMask(RegTxControl,0x03);/*让TX1/TX2脚都能输出*/ 1111.}

1112.else/*如果没有重启信号0*/ 1113.{

1114.ClearBitMask(RegTxControl,0x03);/*关闭输出*/ 1115.}

1116.returnstatus;/*返回状态值*/ 1117.} 1118.

1119.#pragmanoaregs 1120.

1121./*延时子程序集*/ 1122.

1123.///////////////////////////////////////////////////////////////////////

1124.//Delay50us

1125.///////////////////////////////////////////////////////////////////////

1126.voiddelay_50us(unsignedchar_50us) 1127.{

1128.while(_50us--) 1129.{

1130._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1131._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1132._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1133._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1134._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1135._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1136._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

1137._nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); 1138.} 1139.} 1140.

1141.///////////////////////////////////////////////////////////////////////

1142.//Delay1ms

1143.///////////////////////////////////////////////////////////////////////

1144.voiddelay_1ms(unsignedchar_1ms) 1145.{

1146.#ifndefNO_TIMER2 1147.RCAP2LH=RCAP2_1ms; 1148.T2LH=RCAP2_1ms; 1149.

1150.TR2=TRUE;

1151.while(_1ms--) 1152.{

1153.while(!TF2); 1154.TF2=FALSE; 1155.}

1156.TR2=FALSE; 1157.#else

1158.while(_1ms--) 1159.{

1160.delay_50us(20); 1161.}

1162.#endif 1163.} 1164.

1165.///////////////////////////////////////////////////////////////////////

1166.//Delay10ms

1167.///////////////////////////////////////////////////////////////////////

1168.voiddelay_10ms(unsignedint_10ms) 1169.{

1170.#ifndefNO_TIMER2 1171.RCAP2LH=RCAP2_10ms; 1172.T2LH=RCAP2_10ms; 1173.

1174.TR2=TRUE;

1175.while(_10ms--) 1176.{

1177.while(!TF2); 1178.TF2=FALSE; 1179.}

1180.TR2=FALSE; 1181.#else

1182.while(_10ms--) 1183.{

1184.delay_50us(19); 1185.if(CmdValid) 1186.return;

1187.delay_50us(20); 1188.if(CmdValid) 1189.return;

1190.delay_50us(20); 1191.if(CmdValid) 1192.return;

1193.delay_50us(20); 1194.if(CmdValid) 1195.return;

1196.delay_50us(20); 1197.if(CmdValid) 1198.return;

1199.delay_50us(20); 1200.if(CmdValid) 1201.return;

1202.delay_50us(20); 1203.if(CmdValid)


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

下一篇:质量和密度复习学案

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

马上注册会员

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