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

2018-11-29 16:23

1204.return;

1205.delay_50us(20); 1206.if(CmdValid) 1207.return;

1208.delay_50us(20); 1209.if(CmdValid) 1210.return;

1211.delay_50us(19); 1212.if(CmdValid) 1213.return; 1214.}

1215.#endif 1216.} 1217.

1218.///////////////////////////////////////////////////////////////////////

1219./*RC500中断处理总程序*/

1220.///////////////////////////////////////////////////////////////////////

1221.voidRC500ISR(void)interrupt0using1 1222.{

1223.staticunsignedcharidatairqBits; 1224.staticunsignedcharidatairqMask; 1225.staticunsignedcharidatanbytes; 1226.staticunsignedcharidatacnt; 1227.

1228.IE0=0;/*用的是INT0脚*/ 1229.WriteRawIO(0,0x80);

1230.if(MpIsrInfo&&MpIsrOut) 1231.{

1232.while(ReadRawIO(RegPrimaryStatus)&0x08)/*第四位表示是否有中断请求?03H?*/ 1233.{

1234.irqMask=ReadRawIO(RegInterruptEn);/*IRQMASK=中断使能寄存器内容?06H?*/

1235.irqBits=ReadRawIO(RegInterruptRq)&irqMask;/*IRQBITS=中断使能+中断请求寄存器内容?07H?*/

1236.MpIsrInfo->irqSource|=irqBits;

1237.if(irqBits&0x01)/*如果缓冲器FIFO未满成立*/ 1238.{

1239.nbytes=64-ReadRawIO(RegFIFOLength);

1240.if((MpIsrInfo->nBytesToSend-MpIsrInfo->nBytesSent)=nbytes) 1241.{

1242.nbytes=MpIsrInfo->nBytesToSend-MpIsrInfo->nBytesSent;

1243.WriteRawIO(RegInterruptEn,0x01); 1244.}

1245.for(cnt=0;cntnbytes;cnt++) 1246.{

1247.WriteRawIO(RegFIFOData,MpIsrOut[MpIsrInfo->nBytesSent]); 1248.MpIsrInfo->nBytesSent++; 1249.}

1250.WriteRawIO(RegInterruptRq,0x01); 1251.}

1252.if(irqBits&0x10)/*如果有发送中断请求*/ 1253.{

1254.WriteRawIO(RegInterruptRq,0x10);/*则置发送中断请求*/

1255.WriteRawIO(RegInterruptEn,0x82);/*缓冲区FIFO满中断使能*/ 1256.if(MpIsrInfo->cmd==PICC_ANTICOLL1) 1257.{

1258.WriteIO(RegChannelRedundancy,0x02); 1259.WriteRawIO(0,0x80); 1260.} 1261.}

1262.if(irqBits&0x0E)/*如果有接收中断请求?*/ 1263.{

1264.nbytes=ReadRawIO(RegFIFOLength); 1265.for(cnt=0;cntnbytes;cnt++) 1266.{

1267.MpIsrOut[MpIsrInfo->nBytesReceived]=ReadRawIO(RegFIFOData); 1268.MpIsrInfo->nBytesReceived++; 1269.}

1270.WriteRawIO(RegInterruptRq,0x0A&irqBits); 1271.}

1272.if(irqBits&0x04)/*如果有IDLE中断请求*/ 1273.{

1274.WriteRawIO(RegInterruptEn,0x20);/*则置计时器中断使能和请求*/ 1275.WriteRawIO(RegInterruptRq,0x20); 1276.irqBits&=~0x20;

1277.MpIsrInfo->irqSource&=~0x20;

1278.WriteRawIO(RegInterruptRq,0x04); 1279.}

1280.if(irqBits&0x20)/*如果有计时器中断请求*/ 1281.{

1282.WriteRawIO(RegInterruptRq,0x20);

1283.MpIsrInfo->status=MI_NOTAGERR;/*则表明无卡在此场中*/ 1284.} 1285.} 1286.}

1287.} 1288.

1289.///////////////////////////////////////////////////////////////////////

1290./*RS232异步串行通信接收和发送中断子程序*/

1291.///////////////////////////////////////////////////////////////////////

1292.voidisr_UART(void)interrupt4using1 1293.{

1294.unsignedcharlen,i; 1295.unsignedintj=0; 1296.

1297.if(RI) 1298.{

1299.len=SBUF;/*LEN为数据个数*/ 1300.RI=0;

1301.for(i=0;i

1303.while(!RI) 1304.{ 1305.j++;

1306.if(j>1000) 1307.{

1308.break; 1309.} 1310.}

1311.if(j<1000) 1312.{

1313.RevBuffer[i]=SBUF;/*接收来自上位机PC的数据*/ 1314.RI=0; 1315.j=0; 1316.} 1317.else 1318.{

1319.break; 1320.} 1321.}

1322.if(i==len) 1323.{

1324.REN=0;

1325.CmdValid=1; 1326.} 1327.}

1328.elseif(!RI&&TI)

1329.{

1330.TI=0;

1331.len=RevBuffer[0];/*LEN为数据个数*/ 1332.for(i=0;i

1334.SBUF=RevBuffer[i];/*发送单片机里的已知数据*/ 1335.while(!TI); 1336.TI=0; 1337.}

1338.REN=1; 1339.} 1340.} 1341.

1342.///////////////////////////////////////////////////////////////////////

1343./*MFRC500软硬件配置总程序*/

1344.///////////////////////////////////////////////////////////////////////

1345.charMfConfig(void) 1346.{

1347.charstatus=MI_OK; 1348.

1349.M500PcdConfig();/*配置RC500读写器的引脚?重启时序*/ 1350.M500PcdMfOutSelect(2);/*?*/ 1351.returnstatus; 1352.} 1353.

1354.///////////////////////////////////////////////////////////////////////

1355./*系统初始化---单片机和RC500芯片*/

1356.///////////////////////////////////////////////////////////////////////

1357.voidinit(void) 1358.{

1359.RC500RST=0;

1360.ET2=0;//禁止定时器2中断

1361.T2CON=0x04;//启动定时器2(tr2=1) 1362.PCON=0x80;

1363.SCON=0x70;//8位uart,波特率可变

1364.TMOD=0x21;//TMOD=0x21;两个定时器均为自动重载方式 1365.

1366.TH1=BAUD_9600; 1367.TL1=TH1;

1368.TR1=TRUE;//串行口波特率发生器---定时器1

1369.

1370.TH0=0x60;//定时器0初始化 1371.TL0=0x60; 1372.TR0=0; 1373.

1374.ET0=0;//定时器0中断禁止---用作一般定时器 1375.ET1=0;//定时器1中断禁止---用作波特率发生器 1376.EA=1;//总中断允许

1377.EX0=1;//外部中断0允许----rc500的irq 1378.IT0=1;//外部中断0触发类型--下降沿触发 1379.TR2=0;//关闭定时器2(tr2=1) 1380.ES=TRUE;//串行口中断允许 1381.CmdValid=0; 1382.

1383.SPEAKER=1;

1384.delay_10ms(30); 1385.SPEAKER=0;

1386.delay_10ms(30); 1387.SPEAKER=1; 1388.

1389.reset_7289();

1390.MfConfig();/*调用RC500软硬件配置总程序*/ 1391.} 1392.

1393.///////////////////////////////////////////////////////////////////////

1394.//IC卡处理函数

1395.///////////////////////////////////////////////////////////////////////

1396.voidcmd_execution(void) 1397.{

1398.unsignedcharcmd; 1399.unsignedcharstatus; 1400.

1401.cmd=RevBuffer[0];/*来自上位机的命令存于REVBUFFER[0]*/ 1402.switch(cmd) 1403.{

1404.case1:/*终止卡的操作*/ 1405.status=M500PiccHalt(); 1406.

1407.RevBuffer[0]=1;

1408.RevBuffer[1]=status;/*返回给上位机的内容*/ 1409.break;

1410.case2://Request,Anticoll,Select,returnCardType(2bytes)+CardSeri


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

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

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

马上注册会员

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