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

📄 clk_deal.lst

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 204   3                      case 6: return_value = 2;
 205   3                                      break;
 206   3                      case 7: return_value = 3;
 207   3                                      break;
 208   3                      case 9: return_value = 7;
 209   3                                      break;
 210   3                      case 11: return_value = 6;
 211   3                                       break;
 212   3                      default: return_value = 10;
 213   3                               break;
 214   3                      }
 215   2              }
 216   1              if (!GetResRdyTbl(11))
 217   1                      SetResRdyTbl(11); 
 218   1              return (return_value);
 219   1      }
 220          
 221          
 222          void report_clock_working(unsigned char clksource){
 223   1      //C13回应函数
 224   1          tx_buf[0] = '$';
 225   1              tx_buf[1] = '2';
 226   1              tx_buf[2] = '1';
 227   1              tx_buf[3] = 0x43;
 228   1              tx_buf[4] = 0x31;
 229   1              tx_buf[5] = 0x33;
 230   1              tx_buf[6] = '0';
 231   1              tx_buf[7] = '0';
 232   1              tx_buf[8] = '0';
 233   1              tx_buf[9] = '3';
 234   1              if (clksource == 10){
 235   2                      tx_buf[10] = '2';
 236   2              }
 237   1              else tx_buf[10] = '0';
 238   1              tx_buf[11] = clksource + 0x30;
 239   1              tx_buf[12] = clkmode_reg + 0x30;
 240   1              tx_buf[13] = '*';
 241   1              tx_buf_pointer = 0;     
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 5   

 242   1              while(tx_buf[tx_buf_pointer] != '*'){
 243   2                      SBUF = tx_buf[tx_buf_pointer];
 244   2                      while(tx_done == 0);
 245   2                      tx_done = 0;
 246   2                      tx_buf_pointer++;
 247   2              }
 248   1              SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
 249   1              while(tx_done == 0);
 250   1              tx_done = 0;
 251   1      }
 252          
 253          unsigned char get_clock_state(unsigned char clksource){
 254   1      //取得时钟源状态函数
 255   1      unsigned char xdata flg;
 256   1      unsigned char xdata return_value;
 257   1      
 258   1              switch (clksource) {
 259   2              case 0: flg = Reflos_reg1 & 0x80;                       //查看7820中T11即光口0线路时钟
 260   2                              if (flg == 0x80){                                       //时钟源丢失
 261   3                                      return_value = 0x00;                    //高8位表示该时钟源状态,低8位表示时钟源编号
 262   3                              }
 263   2                              else return_value = 0x10;
 264   2                              break;
 265   2              case 1: flg = Reflos_reg1 & 0x40;          //查看T12即光口1线路时钟
 266   2                              if (flg == 0x40){
 267   3                                      return_value = 0x01;
 268   3                              }
 269   2                              else return_value = 0x11;
 270   2                              break;
 271   2              case 2: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x80;
 272   2                              //flg = Reflos_reg1&0x04;            //查看T16即光口2线路时钟
 273   2                              if (flg == 0x80){
 274   3                                      return_value = 0x02;
 275   3                              }
 276   2                              else return_value = 0x12;
 277   2                              break;
 278   2              case 3: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x40;
 279   2                              //flg = Reflos_reg1&0x02;            //查看T17即光口3线路时钟
 280   2                              if (flg == 0x40){
 281   3                                      return_value = 0x03;
 282   3                              }
 283   2                              else return_value = 0x13;
 284   2                              break;
 285   2              case 7: flg = Reflos_reg2 & 0x08;                       //查看7820中T21即第二外时钟源
 286   2                              if (flg == 0x08){                                       //时钟源丢失
 287   3                                      return_value = 0x07;            //高8位表示该时钟源状态,低8位表示时钟源编号
 288   3                              }
 289   2                              else return_value = 0x17;
 290   2                              break;
 291   2              case 6: flg = Reflos_reg2 & 0x02;          //查看7820中T31即第一外时钟源
 292   2                              if (flg == 0x02){
 293   3                                      return_value = 0x06;
 294   3                              }
 295   2                              else return_value = 0x16;
 296   2                              break;
 297   2              case 8: return_value = 0x18;
 298   2                              break;
 299   2              case 9: return_value = 0x19;
 300   2                              break;
 301   2              default: return_value = 0x0A;
 302   2                               break;
 303   2              }
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 6   

 304   1              return (return_value);
 305   1      }
 306          
 307          unsigned char get_clock_stat(struct cmd_para_save *get_clock){
 308   1      //C14取得指定输入时钟源的状态
 309   1      unsigned char xdata clksource;
 310   1      unsigned char xdata return_value;
 311   1      
 312   1              clksource = get_clock -> clock_state_num;
 313   1              return_value = get_clock_state(clksource);
 314   1              if (!GetResRdyTbl(10))
 315   1                      SetResRdyTbl(10); 
 316   1              return (return_value);
 317   1      }
 318          
 319          
 320          void report_clock_stat(unsigned char clk_state){
 321   1      //C14回应函数
 322   1          tx_buf[0] = '$';
 323   1              tx_buf[1] = '2';
 324   1              tx_buf[2] = '1';
 325   1              tx_buf[3] = 0x43;
 326   1              tx_buf[4] = 0x31;
 327   1              tx_buf[5] = 0x34;
 328   1              tx_buf[6] = '0';
 329   1              tx_buf[7] = '0';
 330   1              tx_buf[8] = '0';
 331   1              tx_buf[9] = '3';
 332   1              if (clk_state == 0x0A){
 333   2                      tx_buf[10] = '2';
 334   2                      tx_buf[11] = '0';
 335   2                      tx_buf[12] = '0';
 336   2              }
 337   1              else { 
 338   2              tx_buf[10] = '0';
 339   2              tx_buf[11] = (clk_state & 0x0F) + 0x30;
 340   2              tx_buf[12] = ((clk_state >> 4) & 0x0F) +0x30;
 341   2              }
 342   1              tx_buf[13] = '*';
 343   1              tx_buf_pointer = 0;     
 344   1              while(tx_buf[tx_buf_pointer] != '*'){
 345   2                      SBUF = tx_buf[tx_buf_pointer];
 346   2                      while(tx_done == 0);
 347   2                      tx_done = 0;
 348   2                      tx_buf_pointer++;
 349   2              }
 350   1              SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
 351   1              while(tx_done == 0);
 352   1              tx_done = 0;
 353   1      }
 354          
 355          void set_clock_switch(unsigned char clksource){
 356   1      //设置时钟倒换函数
 357   1              switch (clksource){
 358   2                      case 0: S_reg = 0x81;                   //配置时钟源为光口0线路时钟
 359   2                                      clk_source = 0;
 360   2                                      break;
 361   2                      case 1: S_reg = 0x82;                   //配置时钟源为光口1线路时钟
 362   2                                      clk_source = 1;
 363   2                                      break;
 364   2                      case 2: S_reg = 0x86;                   //配置时钟源为光口2线路时钟
 365   2                                      clk_source = 2;
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 7   

 366   2                                      break;
 367   2                      case 3: S_reg = 0x87;                   //配置时钟源为光口3线路时钟
 368   2                                      clk_source = 3;
 369   2                                      break;
 370   2                      case 7: S_reg = 0x89;                                   //配置时钟源为第二外时钟
 371   2                                      clk_source = 7;
 372   2                                      break;
 373   2                      case 6: S_reg = 0x8B;                           //配置时钟源为第一外时钟源
 374   2                                      clk_source = 6;
 375   2                                      break;
 376   2                      case 8: S_reg = 0xC0;                   //配置时钟源自由振荡模式
 377   2                                      clk_source = 8;
 378   2                                      break;
 379   2                      case 9: S_reg = 0xE0;                   //配置时钟源为保持模式
 380   2                                      clk_source = 9;
 381   2                                      break;
 382   2                      default:break;
 383   2              }
 384   1      }
 385          
 386          void clk_switch(void){                                  
 387   1      //主用时钟源丢失,自动倒换函数
 388   1      unsigned char xdata temp;
 389   1              temp = get_clock_state(clkarray[0]);
 390   1              if (temp >> 4 == 1){
 391   2                      set_clock_switch(clkarray[0]);
 392   2                      clk_prio = 0;
 393   2              }
 394   1              else {
 395   2                      temp = get_clock_state(clkarray[1]);
 396   2                      if (temp >> 4 == 1){
 397   3                              set_clock_switch(clkarray[1]);
 398   3                              clk_prio = 1;
 399   3                      }
 400   2                      else {
 401   3                              temp = get_clock_state(clkarray[2]);
 402   3                              if (temp >> 4 == 1){
 403   4                                      set_clock_switch(clkarray[2]);
 404   4                                      clk_prio = 2;
 405   4                              }
 406   3                              else {
 407   4                                      temp = get_clock_state(clkarray[3]);
 408   4                                      if (temp >> 4 == 1){
 409   5                                              set_clock_switch(clkarray[3]);
 410   5                                              clk_prio = 3;
 411   5                                      }
 412   4                                      else {
 413   5                                              temp = get_clock_state(clkarray[4]);
 414   5                                              if (temp >> 4 == 1){
 415   6                                                      set_clock_switch(clkarray[4]);

⌨️ 快捷键说明

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