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

📄 path_switch.lst

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 436   3                                      }
 437   2                                      else sport = 1;
 438   2                                      break;
 439   2                      default: break;
 440   2              }
C51 COMPILER V7.50   PATH_SWITCH                                                           03/10/2006 16:35:33 PAGE 9   

 441   1              if (mode == 2){
 442   2                      return_value = 0;
 443   2                      path_switch_state[timeid - 1] = mode;                           //保存倒换模式
 444   2              }
 445   1              else if ((mode == 1) & (sboard == 0)){  //由自动状态倒换到主用状态
 446   2                      return_value = 0;
 447   2                      path_switch_state[timeid - 1] = mode;                           //保存倒换模式
 448   2              }
 449   1              else {                                                                                                  //强制倒换状态
 450   2                      bport = path_switch_array[sport][timeid - 1][0];
 451   2                      outport = path_switch_array[sport][timeid - 1][1];
 452   2                      if (bport < 4){
 453   3                              PTUN(outport,timeid - 1) = bport;
 454   3              //              return_value = path_switch_function(path_switch_array[sport][timeid - 1][0],timeid - 1,outport);
 455   3                              //调用倒换函数
 456   3              //              if (return_value == 0){                                                 //倒换成功更改当前输入表中的输入端口
 457   3                              path_switch_array[sport][timeid - 1][3] = 0;
 458   3                              path_switch_array[bport][timeid - 1][3] = 1;
 459   3                              if (outport < 4){                                                               //若是保护的是时隙,则要同时进行时隙的并发配置
 460   4                                      switch (outport){                                                       //对光口进行并发配置
 461   5                                              case 0: PTUN(1,timeid - 1) = bport;
 462   5                                                              //return_value = path_switch_function(0,timeid - 1,1);
 463   5                                                              break;
 464   5                                              case 1: PTUN(0,timeid - 1) = bport;
 465   5                                                              //return_value = path_switch_function(0,timeid - 1,0);
 466   5                                                              break;
 467   5                                              case 2: PTUN(3,timeid - 1) = bport;
 468   5                                                              //return_value = path_switch_function(0,timeid - 1,3);
 469   5                                                              break;
 470   5                                              case 3: PTUN(2,timeid - 1) = bport;
 471   5                                                              //return_value = path_switch_function(0,timeid - 1,2);
 472   5                                                              break;
 473   5                                              default:break;
 474   5                                      }
 475   4                              }
 476   3                              return_value = 0;
 477   3                              path_switch_state[timeid - 1] = mode;                                   //保存倒换模式
 478   3                      }
 479   2                      else return_value = 2;
 480   2              }
 481   1              if (!GetResRdyTbl(1))
 482   1                      SetResRdyTbl(1); 
 483   1              return (return_value);
 484   1      }
 485          
 486          
 487          
 488          unsigned char get_path_state(struct cmd_para_save *path_switch){
 489   1      //C53查询当前通道运行状态
 490   1      unsigned char xdata boardid;
 491   1      unsigned char xdata portid;
 492   1      unsigned char xdata timeid;
 493   1      unsigned char xdata mport;
 494   1      unsigned char xdata return_value;
 495   1      
 496   1              boardid = path_switch -> path_stat_swget_board;                         //输出盘号
 497   1              portid = path_switch -> path_stat_swget_port;                           //输出端口
 498   1              timeid = path_switch -> path_stat_swget_slot;                           //输出时隙
 499   1      
 500   1              mport = get_solt_working(boardid,portid,timeid);                        //得到所保护的输出时隙的输入
 501   1              switch (mport){
 502   2                      case 0: mboardid = 5;
C51 COMPILER V7.50   PATH_SWITCH                                                           03/10/2006 16:35:33 PAGE 10  

 503   2                                      mportid = 1;
 504   2                                      return_value = 0;
 505   2                                      break;
 506   2                      case 1: mboardid = 5;
 507   2                                      mportid = 2;
 508   2                                      return_value = 0;
 509   2                                      break;
 510   2                      case 2: mboardid = 4;
 511   2                                      mportid = 1;
 512   2                                      return_value = 0;
 513   2                                      break;
 514   2                      case 3: mboardid = 4;
 515   2                                      mportid = 2;
 516   2                                      return_value = 0;
 517   2                                      break;
 518   2                      default: return_value = 2;
 519   2                                       break;
 520   2              }
 521   1              if (!GetResRdyTbl(22))
 522   1                      SetResRdyTbl(22); 
 523   1              return (return_value);
 524   1      }
 525          
 526          
 527          void report_path_stat(unsigned char value,unsigned char board,unsigned port){
 528   1      //C53回应函数
 529   1              tx_buf[0] = '$';
 530   1              tx_buf[1] = '2';
 531   1              tx_buf[2] = '1';
 532   1              tx_buf[3] = 0x43;
 533   1              tx_buf[4] = 0x35;
 534   1              tx_buf[5] = 0x33;
 535   1              tx_buf[6] = '0';
 536   1              tx_buf[7] = '0';
 537   1              tx_buf[8] = '0';
 538   1              tx_buf[9] = '5';
 539   1              tx_buf[10] = value + 0x30;      
 540   1              tx_buf[11] = board + 0x30;
 541   1              if (board == 5){
 542   2                      tx_buf[12] = '1';
 543   2              }
 544   1              else tx_buf[12] = '4';
 545   1              tx_buf[13] = '0';
 546   1              tx_buf[14] = port + 0x30;
 547   1              tx_buf[15] = '*';
 548   1              tx_buf_pointer = 0;     
 549   1              while(tx_buf[tx_buf_pointer] != '*'){
 550   2                      SBUF = tx_buf[tx_buf_pointer];
 551   2                      while(tx_done == 0);
 552   2                      tx_done = 0;
 553   2                      tx_buf_pointer++;
 554   2              }
 555   1              SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
 556   1              while(tx_done == 0);
 557   1              tx_done = 0;
 558   1      
 559   1      }
 560          
 561          
 562          /*以下为自动倒换函数*/
 563          unsigned char xdata init_flg[2][4];
 564          unsigned char xdata init_recover[4] = {0,0,0,0};
C51 COMPILER V7.50   PATH_SWITCH                                                           03/10/2006 16:35:33 PAGE 11  

 565          
 566          /******************************************************************************************************/
 567          void path_switch_recover(void){
 568   1      //每秒查询是否信号恢复,进行通道倒换函数
 569   1      
 570   1      unsigned char xdata temp;
 571   1      unsigned char xdata tport;
 572   1      unsigned char xdata outport;
 573   1      unsigned char xdata value;
 574   1      unsigned char xdata *valueid;
 575   1      unsigned char xdata quotient;
 576   1      unsigned char xdata residue;
 577   1      
 578   1              if (((Ia0_a & 0xD0) | (Ia2_a & 0xE0) | (Ia3_a & 0x80)) == 0){                   //MCB A口全0
 579   2                      if (init_recover[0] == 1){
 580   3                              for (temp = 0; temp <= 62; temp++){
 581   4                                      if (path_switch_state[temp] == 2){                                                      //如果处于自动倒换状态
 582   5                                              for (tport = 1; tport <= 3; tport++){                                   //轮循查找哪个光口的备用光口是MCB光口1
 583   6                                                      if (path_switch_array[tport][temp][0] == 0){
 584   7                                                              quotient = temp >> 3;                                                   //得到该时隙所在的字节值(同timeid / 8运算)
 585   7                                                              residue = temp & 0x07;                                                  //同timeid % 8运算
 586   7                                                              residue = 7 - residue;                          //得到该时隙所在的bit位
 587   7                                                              outport = path_switch_array[tport][temp][1];
 588   7      //                                              value = path_switch_function(0,temp,outport);   //进行该时隙的通道倒换
 589   7                                                              switch(tport){
 590   8      //                                                              case 0: valueid = (quotient + 0x88A6);
 591   8      //                                                              value = ((*valueid) >> residue) & 0x01;         //如果该时隙出现AIS
 592   8      //                                                                              if (value != 0){                                //该时隙不能倒换
 593   8      //                                                                      PTUN(outport,temp) = 0;
 594   8      //                                                                                      value = 0;
 595   8      //                                                                              }
 596   8      //                                                                              else{
 597   8      //                                                                      value = 2; 
 598   8      //                                                              }

⌨️ 快捷键说明

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