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

📄 main.lst

📁 参考周立功的basic模式的CAN通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
 290          // Other info  : 
 291          //--------------------------------------------------------------------------
 292          static void uPSD_uart0_isr (void) interrupt SIO_VECTOR using 2
 293          {
 294   1      /*------------------------------------------------
 295   1        comm1 Received data interrupt.
 296   1      ------------------------------------------------*/ 
 297   1          if ( RI != 0 )
 298   1          {
 299   2              RI = 0;
 300   2           
 301   2              Comm1Recv [nComm1Recv_End].Buff[(Comm1Recv [nComm1Recv_End].Len)++] = SBUF;
 302   2              if ( Comm1Recv [nComm1Recv_End].Len >= MAX_RECV_BUFF )
 303   2              {
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 6   

 304   3                  Comm1Recv [nComm1Recv_End].Len = 0;
 305   3              }
 306   2      
 307   2              Comm1Recv_Flag = RECV_ONEBYTE;            
 308   2          }
 309   1          
 310   1      /*------------------------------------------------
 311   1        comm1 Transmitted data interrupt.
 312   1      ------------------------------------------------*/
 313   1         
 314   1          if ( TI != 0 )
 315   1          {
 316   2              TI = 0;
 317   2              if ( nComm1Send_Idx < Comm1Send.Len )
 318   2              {
 319   3                  SBUF = Comm1Send.Buff [ nComm1Send_Idx ];
 320   3                  nComm1Send_Idx++;
 321   3              }
 322   2                      else
 323   2                      {
 324   3                          if ( Comm1Send.Buff[0] != 0x00 )
 325   3                              {
 326   4                              Comm1State = WAITING;
 327   4                              }
 328   3                      }
 329   2          }
 330   1      }
 331          //--------------------------------------------------------------------------
 332          // Function    : main
 333          // Input  Para : void
 334          // Output Para : void
 335          // Retun Val   : void
 336          // Description : main function 
 337          // Call        : InitCPU, My7132Init, CRC, 
 338          // call By     : Null
 339          // DateTime    : 2005-7-30
 340          // Author      : liuweiming@gmail.com
 341          // Other info  : 
 342          //--------------------------------------------------------------------------
 343          void main(void)
 344          {
 345   1          unsigned short usCRC = 0xffff;
 346   1              unsigned short usLen = 0;
 347   1              unsigned char  status;
 348   1          unsigned char  i;
 349   1      
 350   1              unsigned char  sndidx = 0;
 351   1              unsigned char  rcvidx = 0;
 352   1              unsigned char  erridx = 0;
 353   1      
 354   1          WDKEY = 0x55; 
 355   1              EA = 0;
 356   1          delay(100);
 357   1      
 358   1              status = Sja_1000_Init();
 359   1              delay(100);
 360   1          InitCPU();
 361   1              My7132Init( ADDR_7132_ZERO );
 362   1      
 363   1              flag_init = 0x00; //initialize Sja1000
 364   1      
 365   1          PSD3200_reg.CONTROL_A   = 0xff;
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 7   

 366   1          PSD3200_reg.DIRECTION_A = 0xff;
 367   1      
 368   1              pComm1RecvCtrl = (struct tagRecvCtrl*)(p7132 + COMM1_RECV_CTRL);
 369   1              pComm2RecvCtrl = (struct tagRecvCtrl*)(p7132 + COMM2_RECV_CTRL);
 370   1              pComm1SendCtrl = (struct tagSendCtrl*)(p7132 + COMM1_SEND_CTRL);
 371   1          pComm2SendCtrl = (struct tagSendCtrl*)(p7132 + COMM2_SEND_CTRL);
 372   1      
 373   1              EA = 1;
 374   1      
 375   1              Comm1Send.Len =  8;
 376   1          Comm1Send.Buff[0] = 'C';
 377   1          Comm1Send.Buff[1] = 'A';
 378   1          Comm1Send.Buff[2] = 'N';
 379   1          Comm1Send.Buff[3] = status;
 380   1              Comm1Send.Buff[4] = 'I';
 381   1          Comm1Send.Buff[5] = 'N';
 382   1          Comm1Send.Buff[6] = 'I';
 383   1          Comm1Send.Buff[7] = 'T';
 384   1        
 385   1          nComm1Send_Idx = 0;
 386   1          TI = 1;
 387   1      
 388   1          while ( 1 )
 389   1          {
 390   2              P1_5 = 0;
 391   2              P1_5 = 1;
 392   2      
 393   2              //Comm1Recv FLAG
 394   2              switch ( Comm1Recv_Flag )
 395   2                  {
 396   3                  case RECV_READY:
 397   3                      break;
 398   3                  case RECV_ONEBYTE:
 399   3                      nComm1Recv_Cnt = 0;
 400   3                      Comm1Recv_Flag = RECV_COUNT;
 401   3                      break;
 402   3                  case RECV_COUNT:
 403   3                      break;
 404   3                  case RECV_TIMEOUT:
 405   3                  default:
 406   3                      nComm1Recv_Cnt = 0;
 407   3                      Comm1Recv_Flag = RECV_READY;
 408   3                      break;
 409   3                  }
 410   2              //Comm2Recv FLAG
 411   2              switch ( Comm2Recv_Flag )
 412   2                  {
 413   3                  case RECV_READY:
 414   3                      break;
 415   3                  case RECV_ONEBYTE:
 416   3                      nComm2Recv_Cnt = 0;
 417   3                      Comm2Recv_Flag = RECV_COUNT;
 418   3                      break;
 419   3                  case RECV_COUNT:
 420   3                      break;
 421   3                  case RECV_TIMEOUT:
 422   3                  default:
 423   3                      nComm2Recv_Cnt = 0;
 424   3                      Comm2Recv_Flag = RECV_READY;
 425   3                      break;
 426   3                  }
 427   2              
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 8   

 428   2              if ( nTest_Cnt >= MAX_TEST_CNT )
 429   2                      {
 430   3                      nTest_Cnt = 0;             
 431   3                              sndidx++;
 432   3      
 433   3                              Comm1Send.Buff[0] = 'S';
 434   3                  Comm1Send.Buff[1] = 'E';
 435   3                  Comm1Send.Buff[2] = 'N';
 436   3                      
 437   3                              while( REG_Status & 0x08 == 1);  //正在接收
 438   3                  while( REG_Status & 0x04 == 0);  //上次发送是否完成
 439   3                              while( REG_Status & 0x02 == 0);  //缓冲区是否锁定
 440   3      
 441   3                              REG_TxFramInfo = 0x86;
 442   3                              REG_TxBuffer1  = 0xaa;
 443   3                              REG_TxBuffer2  = 0xbb;
 444   3                              REG_TxBuffer3  = 0xcc;
 445   3                              REG_TxBuffer4  = 0xdd;
 446   3                              REG_TxBuffer5  = '1';
 447   3                              REG_TxBuffer6  = '2';
 448   3                              REG_TxBuffer7  = '3';
 449   3                              REG_TxBuffer8  = '4';
 450   3                              REG_TxBuffer9  = '5';
 451   3                              REG_TxBuffer10 = '6';
 452   3                              //REG_TxBuffer11 = '7';
 453   3                              //REG_TxBuffer12 = '8';
 454   3      
 455   3                              REG_Command = 0x01;
 456   3      
 457   3                              Comm1Send.Buff[3] = sndidx;
 458   3                      Comm1Send.Buff[4] = 'D';
 459   3      
 460   3                              Comm1Send.Len  = 5;
 461   3                              nComm1Send_Idx = 0;
 462   3                  TI = 1;
 463   3                  }
 464   2             
 465   2              if ( nComm1Recv_Bgn != nComm1Recv_End )
 466   2              {
 467   3                  Comm1Send.Len = Comm1Recv[nComm1Recv_Bgn].Len + 3;
 468   3                  Comm1Send.Buff[0] = nComm1Recv_Bgn;
 469   3                  Comm1Send.Buff[1] = nComm1Recv_End;
 470   3                  Comm1Send.Buff[2] = Comm1Send.Len;
 471   3      
 472   3                  memcpy((Comm1Send.Buff+3), Comm1Recv[nComm1Recv_Bgn].Buff, Comm1Recv[nComm1Recv_Bgn].Len);
 473   3                  //Comm1Recv[nComm1Recv_Bgn].Len = 0;
 474   3      
 475   3                  nComm1Recv_Bgn++;
 476   3                  if (nComm1Recv_Bgn >= MAX_RECV_SUIT )
 477   3                  {
 478   4                     nComm1Recv_Bgn = 0;
 479   4                  }
 480   3                  
 481   3                  nComm1Send_Idx = 0;
 482   3                  TI = 1;
 483   3              }
 484   2      
 485   2              if ( nComm2Recv_Bgn != nComm2Recv_End )
 486   2              {            
 487   3                  Comm2Send.Len = Comm2Recv[nComm2Recv_Bgn].Len + 3;
 488   3                  Comm2Send.Buff[0] = nComm2Recv_Bgn;
 489   3                  Comm2Send.Buff[1] = nComm2Recv_End;
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 9   

 490   3                  Comm2Send.Buff[2] = Comm2Send.Len;
 491   3      
 492   3                  memcpy((Comm2Send.Buff+3), Comm2Recv[nComm2Recv_Bgn].Buff, Comm2Recv[nComm2Recv_Bgn].Len);
 493   3                  //Comm2Recv[nComm2Recv_Bgn].Len = 0;
 494   3      
 495   3                  nComm2Recv_Bgn++;
 496   3                  if (nComm2Recv_Bgn >= MAX_RECV_SUIT )
 497   3                  {
 498   4                      nComm2Recv_Bgn = 0;
 499   4                  }
 500   3                                      
 501   3                  nComm2Send_Idx = 0;
 502   3                  SCON2 |= 0x02;              //TI2 = 1;
 503   3              }
 504   2      
 505   2                      if ( rcv_flag )                                                         //if there is receive interrupt
 506   2                      {
 507   3                              rcv_flag = 0;
 508   3                              rcvidx++;
 509   3      
 510   3                              if ( ( REG_Status & 0x01) == 0 )             //判断报文是否有效
 511   3                  {
 512   4                     rcv_len = 0;
 513   4                  }
 514   3      
 515   3                              Comm1Send.Buff[0] = 'R';
 516   3                  Comm1Send.Buff[1] = 'C';
 517   3                  Comm1Send.Buff[2] = 'V';
 518   3                      Comm1Send.Buff[3] = rcvidx;
 519   3      
 520   3                  rcv_data[0] = REG_RxFramInfo;
 521   3                  rcv_data[1] = REG_RxBuffer1;
 522   3                  rcv_data[2] = REG_RxBuffer2;
 523   3                  rcv_data[3] = REG_RxBuffer3;
 524   3                  rcv_data[4] = REG_RxBuffer4;
 525   3                  rcv_data[5] = REG_RxBuffer5;
 526   3                  rcv_data[6] = REG_RxBuffer6;
 527   3                  rcv_data[7] = REG_RxBuffer7;
 528   3                  rcv_data[8] = REG_RxBuffer8;
 529   3                  rcv_data[9] = REG_RxBuffer9;
 530   3                  rcv_data[10] = REG_RxBuffer10;
 531   3                  rcv_data[11] = REG_RxBuffer11;
 532   3                  rcv_data[12] = REG_RxBuffer12;
 533   3      
 534   3                              REG_Command = 0x04;
 535   3      
 536   3                              Comm1Send.Len =  (rcv_data[0] & 0x0f) + 9;
 537   3      
 538   3                          for (i=0; i< (rcv_data[0] & 0x0f) + 5; i++)
 539   3                              {
 540   4                      Comm1Send.Buff[4+i] = rcv_data[i];
 541   4                              }
 542   3        
 543   3                  nComm1Send_Idx = 0;
 544   3                  TI = 1;
 545   3                      }
 546   2                      
 547   2                      if ( err_flag )
 548   2                      {
 549   3                              err_flag = 0;
 550   3                              REG_Interrupt = REG_Interrupt & 0x00;
 551   3      
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 10  

 552   3                              erridx++;
 553   3      
 554   3                              Comm1Send.Len =  7;
 555   3                  Comm1Send.Buff[0] = 'C';
 556   3                  Comm1Send.Buff[1] = 'A';
 557   3                  Comm1Send.Buff[2] = 'N';
 558   3                              Comm1Send.Buff[3] = erridx;
 559   3                      Comm1Send.Buff[4] = 'E';
 560   3                  Comm1Send.Buff[5] = 'R';
 561   3                  Comm1Send.Buff[6] = 'R';
 562   3                
 563   3                  nComm1Send_Idx = 0;
 564   3                  TI = 1;
 565   3      
 566   3                              Sja_1000_Init();
 567   3                      }
 568   2          }
 569   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2148    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =  15937       8
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     41    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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