⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 duxiexitongrc500.lst

📁 #include <stc12c2052AD.H>// 标准库的头文件 #include <intrins.h> #include <absacc.h> #d
💻 LST
📖 第 1 页 / 共 5 页
字号:
1142   1      //P14=1;  
1143   1      CardStatus=0x01;
1144   1      return  RC500_OK;
1145   1      }
1146          /////////////////////////////////////////
1147          
1148          /****************************************************************/
1149          /*名称: HL_Write */
1150          /*功能: 该函数实现高级写命令 */
1151          /*输入: buff: 待写入数据的首地址 */
1152          /* Secnr: 扇区号 */
1153          /* Block_Adr: 块地址 */
1154          /*输出:操作状态码 */
1155          /****************************************************************/
1156          /*uchar HL_Write(uchar idata *buff,uchar Block_Adr,uchar Mode)// 写卡
1157           {
1158              uchar temp; ///
1159            CardStatus=0;
1160              temp = HL_Active(Block_Adr, Mode);
1161             if(temp !=  RC500_OK)
1162             {CardStatus=0;
1163             return temp;
1164             }
1165          
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 20  

1166          temp = MIF_Write(buff,Block_Adr);
1167              if(temp !=  RC500_OK)
1168             {CardStatus=0;
1169             return temp;
1170             }
1171          CardStatus=0x01;
1172          return  RC500_OK;
1173           }
1174          
1175          */
1176          
1177          /*--------------------------------------------------------------------
1178           FUNCTION: TurnOff_Card,关卡
1179           INPUT:
1180           OUTPUT:   CardStatus
1181          --------------------------------------------------------------------*/
1182          void    TurnOff_Card(void)
1183             {   
1184   1               uchar temp;
1185   1        CardStatus=0;
1186   1           temp = MIF_Halt(); 
1187   1       if(temp !=  RC500_OK)
1188   1         {
1189   2          CardStatus=0;
1190   2         }
1191   1       else{
1192   2            CardStatus=0x01;
1193   2           }
1194   1       }
1195          /************************************************
1196          一、    通讯测试,测试单片机与模块通讯是否正常
1197          ************************************************/
1198          void Commu_test(void)
1199          {   uchar  temp ;
1200   1          uint i;
1201   1          //uchar Block_Adr=4;
1202   1          CardStatus=0; 
1203   1          NCS = FALSE;
1204   1              MFRST=1;
1205   1              for (i=0;i<0x1fff; i++)
1206   1               {
1207   2                _nop_();
1208   2               }
1209   1              MFRST=0;
1210   1              for(i=0;i<0x1fff;i++)
1211   1                {
1212   2                      _nop_();
1213   2                }
1214   1        while(Command!=0);
1215   1            RC500_Bus_Sel();
1216   1            TimerClock=0x0b;
1217   1                TimerControl=0x02;
1218   1            TimerReload=0x42;
1219   1            InterruptEn=0x7f;
1220   1            temp=InterruptEn;
1221   1            Int_Req=0x7f;
1222   1            MFOUTSelect=0x02;//调整输出功率以及电流消耗和操作距离.
1223   1            TxControl=0x5b;//TX2/1上的输出信号将传递由发送数据调制的13.56MHz能量载波
1224   1            CardStatus=0x01;
1225   1       }
1226          /************************************************
1227          一、    
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 21  

1228                            寻卡请求
1229          ************************************************/
1230          uchar xunka(void)  
1231          {  uchar temp;
1232   1      CardStatus=0; 
1233   1      MIF_Halt();                         //暂停MIFARE卡71 01
1234   1      temp = Request(RF_CMD_REQUEST_ALL);//监测ALL的卡片请求
1235   1      if(temp != RC500_OK)
1236   1      {
1237   2      CardStatus=0;
1238   2      return(RC500_REQERR);
1239   2      //for(i=0;i<6;i++)
1240   2      //sen(cuowufanhui[i]);
1241   2      }
1242   1      temp = AntiColl(); 
1243   1      
1244   1      //卡片的防冲突检测读出卡号 
1245   1      if(temp != RC500_OK)
1246   1      {CardStatus=0;
1247   2      return(RC500_ANTICOLLERR);
1248   2      } 
1249   1      else{ CardStatus=0x01;
1250   2               }
1251   1          }
1252          /////////////////////////////////////////
1253          uchar xiamima(uchar Secnr,uchar Mode)
1254          {
1255   1      uchar temp;
1256   1      CardStatus=0; 
1257   1      xunka();//2
1258   1      temp = Select_Card();               //71  40  01
1259   1      if(temp != RC500_OK)
1260   1      {
1261   2      CardStatus=0; 
1262   2      return(RC500_SELERR);
1263   2      }
1264   1      Load_keyE2_CPY((Secnr%16), Mode); //LoadKey 
1265   1      if(CardStatus)
1266   1      {
1267   2      CardStatus=0x01;
1268   2      }
1269   1      else{
1270   2      CardStatus=0;
1271   2      return(RC500_SELERR);
1272   2               }
1273   1      }
1274          ////////////////////////////////////////////////////////
1275          uchar mimarenzheng(uchar idata *UID,uchar Secnr,uchar mode)
1276           {  uchar temp;
1277   1         CardStatus=0; 
1278   1      temp=mimarenzhen(UID, Secnr, mode);
1279   1      if(temp != RC500_OK)
1280   1      {
1281   2      CardStatus=0; 
1282   2      return(RC500_SELERR);
1283   2      }
1284   1      else{ CardStatus=0x01;
1285   2               }
1286   1      
1287   1      }
1288          
1289          ///////////////////////////////////////////
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 22  

1290          uchar xiangsheng(void)
1291          {
1292   1      uchar j;
1293   1      DelayMS(100);
1294   1      P14=0;
1295   1      DelayMS(1000);        //控制小喇叭
1296   1      P14=1;
1297   1      for (j=0;j<6;j++)
1298   1      sen(gonggongxinxi[j]);
1299   1      return(CardStatus);
1300   1      }
1301          //////////////////////////////////////////////////////////////////////////////////////////
1302          void main(void)
1303             {
1304   1           uchar i,j;
1305   1               uchar shuju[30];
1306   1           //uchar CardDataBuf[16];
1307   1         PCON = 0x00;   //波特率控制,SMOD=0
1308   1         TMOD = 0x20;   // //定时器1定时方式2
1309   1         TH1  = 0xfa;   //9600Baud, 
1310   1         TL1  = 0xfa;
1311   1         SCON = 0x50;   //串口方式 1,8bit UART ,SM2=0,REN=1
1312   1         TI = 0; //发送中断标志位置零
1313   1         RI = 0; //接收中断标志位置零 
1314   1         TR1  = 1;//启动定时器 
1315   1           //TL1=0xFA;
1316   1           //TH1 = 0xFA;
1317   1           //TL0=0xff;
1318   1               //TH0=0x00;
1319   1               //TMOD=0x21;
1320   1           //SCON = 0x50; // 串口工作方式1,允许接收
1321   1           //PCON = 0x80;
1322   1           //REN = 1;
1323   1           //TI = 0; //发送中断标志位置零
1324   1           ///RI = 0; //接收中断标志位置零
1325   1           //TR1 = 1;
1326   1               //TR0=1;
1327   1           NCS = FALSE;
1328   1           P14=1; 
1329   1               ET0=1;
1330   1           ES=0;
1331   1           EA = 1;
1332   1      while(1)
1333   1                   {
1334   2                 RI=0;
1335   2      //Commu_test();
1336   2       start:     
1337   2                 for (i=0;i<30;i++)  //循环次数超过最大数据长度
1338   2                              {
1339   3                    //RI=0;
1340   3                                    while(!RI);  //当没有串口信息时等待
1341   3                            shuju[i]=SBUF;  //启动速度初值
1342   3                                        if (shuju[i]==0x81) i--;   //高手标志
1343   3                                    RI=0;
1344   3         
1345   3                                        //判断接收的数据,根据不同情况进行不同处理
1346   3                                        //如果开头不是0x3c就返回重新接收数据
1347   3                        if (shuju[0]!=0x3c)goto start;
1348   3                                                    
1349   3                          // sen(i);
1350   3                                        //如果第二个字节不是合法字符就返回重新接收数据
1351   3                                        if ( (i==1) && ( shuju[1]!=0x04  && shuju[1]!=0x08 && shuju[1]!=0x0a && shuju[1]!=0x13 && shuju[1]!
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 23  

             -=0x03 ))  {goto start;};
1352   3                                        //根据第三个字节进行不同的处理
1353   3                        if( (i>=1) && (shuju[1]==0x04 ))
1354   3                                           {
1355   4                                                 //如果第3位不是0x01  就返回重新接收数据
1356   4                              if ( (i==2) && (shuju[2]!=0x00 && shuju[2]!=0x01 )) goto start;
1357   4                                                 //如果第3位是0x00  就进行通讯测试,问RC500工作正常吗?
1358   4                               if ( (i>=2) &&(shuju[2]==0x00) )
1359   4                                                         {
1360   5                                                          //如果数据指令正确则进行通讯测试,否则重新接收数据
1361   5                                                          if ( (i==7) && ((shuju[3]==0x60) && (shuju[4]==0x00) &&  (shuju[5]==0x00) &&  (shuju[7]==0x0d)))
1362   5                                                               {
1363   6                                                                        //通讯测试返回信息
1364   6                                         Commu_test();//1
1365   6                                         for (j=0;j<5;j++)
1366   6                                         sen(tongxunceshixinxi[j]);
1367   6                                         goto start;
1368   6                                                                         //goto tongxunceshi;
1369   6                                                                       }
1370   5                                     else if (i==7) 
1371   5                                                                   {sen(0x22); goto start;};
1372   5      
1373   5                                                                       
1374   5                                 };
1375   4                                                 //如果第3位是0x01  就寻卡、关闭卡片或者读卡操作
1376   4                              if ( (i>=2) &&(shuju[2]==0x01) )
1377   4                                                         {
1378   5                                                         if ( (i==3) && ((shuju[3]!=0x70) &&  (shuju[3]!=0x66) && (shuju[3]!=0x68))) goto start;
1379   5                                                         //寻卡
1380   5                                 if ( (i>=3) &&(shuju[3]==0x70))
1381   5                                                            {
1382   6                                                                  //如果数据指令正确则进行寻卡操作,否则重新接收数据
1383   6                                                                  if ( (i==7) && (   (shuju[5]==0x00) &&  (shuju[7]==0x0d)))
1384   6                                                                       {              Commu_test();
1385   7                                                                                              xunka();//2
1386   7                                                    if (CardStatus) 
1387   7                                                                                                { // for (j=0;j<9;j++)
1388   8                                                                //sen(xunkaxinxi[j]);
1389   8                                                                                                      sendata[0]=0x3C;
1390   8                                                                                                              sendata[1]=0x05;
1391   8                                                          sendata[2]=UID[0];
1392   8                                                                                                              sendata[3]=UID[1];
1393   8                                                                                                          sendata[4]=UID[2];
1394   8                                                          sendata[5]=UID[3];
1395   8                                                          sendata[6]=0x00;
1396   8                                                          sendata[7]=0;
1397   8                                                                                                              for(j=0;j<6;j++) sendata[7]^=sendata[j];
1398   8                                                                                                              sendata[8]=0x0d;
1399   8                                                                                                              for(j=0;j<9;j++)
1400   8                                                                                                              sen(sendata[j]);
1401   8                                                         //DelayMS(10);
1402   8                                                         //P14=0;
1403   8                                                         //DelayMS(1000);        //控制小喇叭
1404   8                                                         //P14=1;
1405   8                                                         //DelayMS(10);
1406   8                                                         //P14=0;
1407   8                                                         //DelayMS(1000);        //控制小喇叭
1408   8                                                         //P14=1;
1409   8                                                                                          goto start;      
1410   8                                                                                                                                 
1411   8                                                                                                                              }
1412   7                                                                                                                 else
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 24  

1413   7                                                                                                                              for(j=0;j<5;j++)
1414   7                                                                                                                              sen(cuowufanhui[j]);
1415   7                                                                                                                              
1416   7                                                           goto start;
1417   7                                                                                                    //for (j=0;j<9;j++)
1418   7                                                                    //sen(xunkaxinxi[j]);
1419   7                                                                //goto xunka;
1420   7                                                                 // goto start;
1421   7                                                                                                  }
1422   6                                             else if (i==7) 
1423   6                                                                           { goto start;};
1424   6                                                                };
1425   5                                                         //读卡
1426   5                                 if ( (i>=3) &&(shuju[3]==0x66))
1427   5                                                           {   //if ( (i==4) && (shuju[4]!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -