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

📄 main.lst

📁 SPI接口读写模块c程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 196   2                 for (cCnt=0; cCnt<cP[0]; cCnt++)
 197   2                 {
 198   3                      cP[cCnt] = SPIRWByte(0xFF);
 199   3                      cCheckSum ^= cP[cCnt];
 200   3                      if(cP[0]>32)
 201   3                      {
 202   4                         NSS=1;
 203   4                         return  FAILURE;
 204   4                      }
 205   3                 }
 206   2                 cP[cCnt] = SPIRWByte(0xFF);
 207   2      
 208   2                 NSS=1;
 209   2                 if (cCheckSum == cP[cCnt])
 210   2                 {
 211   3                    return SUCCESS;
 212   3      
 213   3                 }
 214   2              }
 215   1              return FAILURE;
 216   1      }
 217          
 218          /***** 写SPI总线数据 *********/
 219          unsigned char SPI_Write(unsigned char *cP)
 220          {
 221   1              unsigned char i,cStatus;
 222   1              unsigned char cCheckSum = 0;
 223   1      
 224   1                      NSS=0;
 225   1                      cStatus=SPIRWByte(spiwrite);
 226   1      
 227   1                      for(i=0; i<cP[0]; i++)  // cP[0] 表示数据包的长度
 228   1                      {
 229   2                              cCheckSum ^= cP[i];
 230   2                              cStatus=SPIRWByte(cP[i]);
 231   2                      }
 232   1                      cStatus=SPIRWByte(cCheckSum);
 233   1                      NSS=1;
 234   1              return cStatus;
 235   1      }
 236          
 237          /******************* serial function ****************************************/
 238          /*****************************************************************************
 239          *send command to Master over UART
 240          *****************************************************************************/
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 5   

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

 303   3                              if (g_cReceNum > g_cReceBuf[0])
 304   3                              {
 305   4                                      cCheckSum = 0;
 306   4                                      for (i=0; i <= g_cReceBuf[0]; i++)
 307   4                                      {
 308   5                                              cCheckSum ^= g_cReceBuf[i];
 309   5                                      }
 310   4                                      if (0 == cCheckSum)
 311   4                                      {
 312   5                                              g_bReceCommandOk = 1;
 313   5                                              ES = 0;
 314   5                                      }
 315   4                                      g_bReceAA = 0;
 316   4                                      g_cReceNum = 0;
 317   4                              }
 318   3                              if (g_cReceNum >= sizeof(g_cReceBuf))
 319   3                              {
 320   4                                      g_cReceNum = 0;
 321   4                                      g_bReceAA = 0;
 322   4                              }
 323   3                      }
 324   2              }
 325   1              if (TI)
 326   1              {
 327   2                      TI = 0;
 328   2              }
 329   1      }
 330          
 331          
 332          ///////////////////////////////////////////////////////////////////////
 333          // 串口命令处理函数
 334          ///////////////////////////////////////////////////////////////////////
 335          uchar uart_process(void)
 336          {
 337   1              uchar cmd;               
 338   1              uchar cStatus;
 339   1              uchar temp;
 340   1              
 341   1              cmd = g_cReceBuf[1];
 342   1              switch(cmd)
 343   1              {  
 344   2      
 345   2                      case 0x01:         // 读设备型号 8字节
 346   2                               cStatus =SPI_Write(g_cReceBuf);          // 发送命令
 347   2                                  delay_1ms(2);                                                 // 延时等待模块执行命令
 348   2                                  cStatus =SPI_Read(cp);                // 读取并存入到cP
 349   2                                      if((cStatus==SUCCESS)&&(cp[1]==PCD_PN)) 
 350   2                                      {              
 351   3                                              g_cReceBuf[0]=0x0a;
 352   3                                                      g_cReceBuf[1]=cmd;
 353   3                                                      memcpy(&g_cReceBuf[2],&cp[2],8);        
 354   3                                      
 355   3                                      }
 356   2                                                      
 357   2                                  else
 358   2                                  {
 359   3                                                      g_cReceBuf[0]=0x02;
 360   3                                                      g_cReceBuf[1]=~cmd;
 361   3                                                              cStatus=1;
 362   3                                      }
 363   2                              break;
 364   2                  case 0x02:     // 读设备序列号 4字节
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 7   

 365   2                       cStatus =SPI_Write(g_cReceBuf);          // 发送命令
 366   2                                  delay_1ms(2);                                                 // 延时等待模块执行命令
 367   2                                  cStatus =SPI_Read(cp);                // 读取并存入到cP
 368   2                                      if((cStatus==SUCCESS)&&(cp[1]==PCD_SN)) 
 369   2                                      {              
 370   3                                              g_cReceBuf[0]=6;
 371   3                                                      g_cReceBuf[1]=cmd;
 372   3                                                      memcpy(&g_cReceBuf[2],&cp[2],4);        
 373   3                                      
 374   3                                      }
 375   2                                                      
 376   2                                  else
 377   2                                  {
 378   3                                                      g_cReceBuf[0]=0x02;
 379   3                                                      g_cReceBuf[1]=~cmd;
 380   3                                                              cStatus=1;
 381   3                                      }
 382   2      
 383   2                              break;
 384   2      
 385   2                              
 386   2                      case 0x10:         // 读PCD固件版本号 4字节
 387   2                           cStatus =SPI_Write(g_cReceBuf);      // 发送命令
 388   2                                  delay_1ms(2);                                                 // 延时等待模块执行命令
 389   2                                  cStatus =SPI_Read(cp);                // 读取并存入到cP
 390   2                                      if((cStatus==SUCCESS)&&(cp[1]==FW_REL)) 
 391   2                                      {              
 392   3                                              g_cReceBuf[0]=6;
 393   3                                                      g_cReceBuf[1]=cmd;
 394   3                                                      memcpy(&g_cReceBuf[2],&cp[2],4);        
 395   3                                      
 396   3                                      }
 397   2                                                      
 398   2                                  else
 399   2                                  {
 400   3                                                      g_cReceBuf[0]=0x02;

⌨️ 快捷键说明

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