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

📄 main.lst

📁 这是一个rfid读卡器程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 205   1              unsigned char i,cStatus;
 206   1              unsigned char cCheckSum = 0;
 207   1      
 208   1                      NSS=0;
 209   1                      cStatus=SPIRWByte(spiwrite);
 210   1      
 211   1                      for(i=0; i<cP[0]; i++)  // cP[0] 表示数据包的长度
 212   1                      {
 213   2                              cCheckSum ^= cP[i];
 214   2                              cStatus=SPIRWByte(cP[i]);
 215   2                      }
 216   1                      cStatus=SPIRWByte(cCheckSum);
 217   1                      NSS=1;
 218   1              return cStatus;
 219   1      }
 220          
 221          /******************* serial function ****************************************/
 222          /*****************************************************************************
 223          *send command to Master over UART
 224          *****************************************************************************/
 225          void UartSend(unsigned char *cSendBuffer)
 226          {
 227   1              unsigned char i;
 228   1              unsigned char cCheckSum;
 229   1              ES = 0;
 230   1              TI = 0;
 231   1              g_bReceCommandOk = 0;
 232   1              SBUF = 0xAA;
 233   1              while (!TI);
 234   1              TI = 0;
 235   1              SBUF = 0xBB;
 236   1              while (!TI);
 237   1              cCheckSum = 0;
 238   1              for (i=0; i<cSendBuffer[0]; i++)
 239   1              {
 240   2                      cCheckSum ^= cSendBuffer[i];
 241   2                      TI = 0;
C51 COMPILER V8.02   MAIN                                                                  12/27/2006 08:14:28 PAGE 5   

 242   2                      SBUF = cSendBuffer[i];
 243   2                      while (!TI);
 244   2                      if (cSendBuffer[i] == 0xAA)
 245   2      //if there is a "0xAA" in the data serial but not the command header,
 246   2      //add a "0x00" follow the "0xAA", CL (command length) will unchanged
 247   2                      {
 248   3                              TI = 0;
 249   3                              SBUF = 0;
 250   3                              while (!TI);
 251   3                      }
 252   2              }
 253   1              TI = 0;
 254   1              SBUF = cCheckSum;
 255   1              while (!TI);
 256   1              TI = 0;
 257   1              ES = 1;
 258   1      }
 259          /*****************************************************************************
 260          *serial interrupt routine
 261          *****************************************************************************/
 262          seri_int () interrupt 4 using 2
 263          {
 264   1              static unsigned char i;
 265   1              static unsigned char cReceivedData;
 266   1              static unsigned char cCheckSum;
 267   1              if (RI)
 268   1              {
 269   2                      cReceivedData = SBUF;
 270   2                      RI = 0;
 271   2                      if (g_bReceAA)
 272   2                      {
 273   3                              g_bReceAA = 0;
 274   3                              if (0 != cReceivedData)
 275   3                              {
 276   4                                      g_cReceNum = 0;
 277   4                              }
 278   3                      }
 279   2                      else
 280   2                      {
 281   3                              if (0xAA == cReceivedData)
 282   3                              {
 283   4                                      g_bReceAA = 1;
 284   4                              }
 285   3                              g_cReceBuf[g_cReceNum++] = cReceivedData;
 286   3      
 287   3                              if (g_cReceNum > g_cReceBuf[0])
 288   3                              {
 289   4                                      cCheckSum = 0;
 290   4                                      for (i=0; i <= g_cReceBuf[0]; i++)
 291   4                                      {
 292   5                                              cCheckSum ^= g_cReceBuf[i];
 293   5                                      }
 294   4                                      if (0 == cCheckSum)
 295   4                                      {
 296   5                                              g_bReceCommandOk = 1;
 297   5                                              ES = 0;
 298   5                                      }
 299   4                                      g_bReceAA = 0;
 300   4                                      g_cReceNum = 0;
 301   4                              }
 302   3                              if (g_cReceNum >= sizeof(g_cReceBuf))
 303   3                              {
C51 COMPILER V8.02   MAIN                                                                  12/27/2006 08:14:28 PAGE 6   

 304   4                                      g_cReceNum = 0;
 305   4                                      g_bReceAA = 0;
 306   4                              }
 307   3                      }
 308   2              }
 309   1              if (TI)
 310   1              {
 311   2                      TI = 0;
 312   2              }
 313   1      }
 314          
 315          /*
 316          uchar autocard(uchar *cardno)    // 寻卡,防冲突,选择卡    返回状态,指针参数为返回的卡系列号(4 bytes)
 317          {
 318                  uchar cStatus1;
 319                  uchar cnt,i;
 320                  uchar cp1[10];
 321          
 322                  for(cnt=0;cnt<3;cnt++)
 323                  {
 324                           cStatus1 =SPI_Write(ComSearchCard);      // 发送寻卡命令
 325                           delay_10ms(2);                                           // 延时等待模块执行命令
 326                           cStatus1 =SPI_Read(cp1);                 // 读取卡号并存入到g_cReceBuf
 327                           if(cStatus1==SUCCESS)
 328                           {
 329                              if(cp1[1]==CARD_SN)       // 读卡号成功
 330                              {
 331                                  for(i=0;i<4;i++)        // 提取4字节卡号
 332                                 {
 333                                          cardno[i]=cp1[i+2];
 334                                 }  
 335                                                 
 336                                  cnt=5;   //exit loop     
 337                                          cStatus1=0;                                                     
 338                              }
 339                            }
 340                            else cStatus1=1;
 341          
 342                  }       
 343                  
 344                  return cStatus1;
 345          }
 346            */
 347          
 348          // buzz freq
 349          
 350          unsigned int g_cBeepDiv0;
 351          unsigned char sp_freq=0xdc;
 352          void timer0(void) interrupt 1 using 3    //0.01s
 353          {
 354   1              TH0=sp_freq;
 355   1              if(g_cBeepDiv0)   //beep
 356   1              {
 357   2                      g_cBeepDiv0--;
 358   2                      BUZ=(g_cBeepDiv0&0x0010);
 359   2              }
 360   1               
 361   1      }
 362          
 363          
 364          ///////////////////////////////////////////////////////////////////////
 365          // 串口命令处理函数
C51 COMPILER V8.02   MAIN                                                                  12/27/2006 08:14:28 PAGE 7   

 366          ///////////////////////////////////////////////////////////////////////
 367          uchar uart_process(void)
 368          {
 369   1              uchar cmd;               
 370   1              uchar cStatus;
 371   1              uchar cnt;
 372   1      
 373   1              cmd = g_cReceBuf[1];
 374   1              switch(cmd)
 375   1              {  
 376   2      
 377   2                      case 0x11:        // 软件掉电模式 ,1字节数据,非0退出软件掉电模式,0x00进入软件掉电
 378   2                                      //任何一条对卡的操作命令或自动寻卡被设置后都将终止掉电模式
 379   2                              if(g_cReceBuf[2]==0x01)
 380   2                              {
 381   3                              for(cnt=0;cnt<3;cnt++)
 382   3                          {
 383   4                                  cStatus =SPI_Write(AntOn);    // 发送命令
 384   4                                  delay_10ms(2);                                                // 延时等待模块执行命令
 385   4                                  cStatus =SPI_Read(cp);                // 读取并存入到cP
 386   4                                      if((cStatus==SUCCESS)&&(cp[1]==SOFTDOWN))
 387   4                                              {
 388   5                                              SendBuffer[0]=0x02;
 389   5                                                      SendBuffer[1]=cmd;
 390   5                                                      cnt=5;
 391   5                                              }
 392   4                                      }
 393   3                                      cStatus=0;
 394   3                              }
 395   2                              else if(g_cReceBuf[2]==0)                                                         
 396   2                              {
 397   3                                  for(cnt=0;cnt<3;cnt++)
 398   3                                  {
 399   4                                          cStatus =SPI_Write(AntOff);   // 发送命令
 400   4                                          delay_10ms(2);                                                // 延时等待模块执行命令
 401   4                                          cStatus =SPI_Read(cp);                // 读取并存入到cP
 402   4                                              if((cStatus==SUCCESS)&&(cp[1]==SOFTDOWN))
 403   4                                                      {
 404   5                                                      SendBuffer[0]=0x02;
 405   5                                                              SendBuffer[1]=cmd;
 406   5                                                              cnt=5;
 407   5                                                      }
 408   4                                              }
 409   3                                      cStatus=0;
 410   3                              }                               
 411   2                              else
 412   2                              {
 413   3                                      SendBuffer[0]=0x02;
 414   3                                      SendBuffer[1]=~cmd;
 415   3                                      cStatus=1;
 416   3                              }
 417   2                          break;

⌨️ 快捷键说明

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