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

📄 current2.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 256          {
 257   1              switch(rbuffer[1])
 258   1              {
 259   2                      case command:   com_type();break;
 260   2      
 261   2                      case answer:    R_ANSW=rbuffer[1];break;
 262   2      
 263   2                      case infor:     {
 264   3                                              switch(rbuffer[2])
 265   3                                              {
 266   4                                                      case com_sector:        {
 267   5                                                                                      nonce_sec=rbuffer[3];
 268   5                                                                                      in_sector=1;
 269   5                                                                                      new_sec=1;
 270   5                                                                              }break;
 271   4                                                      case com_weld_simu:     YOUHU=rbuffer[3];break;
 272   4                                                      case com_delt_switch:   delt_state=rbuffer[3];break;
 273   4                                                      default:                break;
 274   4                                              }
 275   3                                      }break;
 276   2      
 277   2                      case p_out_sec: receive_p_out=1;break;
 278   2      
 279   2                      case p_in_sec:  {
 280   3                                              nonce_sec=rbuffer[2];
 281   3                                              receive_p_in=1;
 282   3                                      }break;
 283   2                      default:        break;
 284   2              }
 285   1      }
 286          
 287          void answer_judge()
 288          {
 289   1              unsigned char c_err;
 290   1              c_err=0;
 291   1      resend: if(R_ANSW!=OK)
 292   1              {
 293   2                      c_err++;
 294   2                      if(c_err<3)
 295   2                      {
 296   3                              TR_ans();
 297   3                              goto resend;
 298   3                      }
 299   2                      else
 300   2                      {
 301   3                              err=2;
 302   3      //                      err_operate();
 303   3                      }
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 6   

 304   2              }
 305   1              else
 306   1                      R_ANSW=0;
 307   1      
 308   1      }
 309          
 310          void start_t2()
 311          {
 312   1              TM2CON=0x8D;    //16位溢出,分频系数8,f/12
 313   1              EA=1;
 314   1              TM2IR=0;
 315   1      }
 316          
 317          void EX0_INT (void) interrupt 0                 //急停
 318          {
 319   1              EX0=0;
 320   1              send_enable=1;
 321   1              if(YOUHU)
 322   1              {
 323   2                      current_enable=0;               //关电源使能
 324   2                      con_hf=1;                       //关高频使能
 325   2              }
 326   1              
 327   1              while(err_ok==0)
 328   1              {
 329   2                      if(called==1)
 330   2                      {
 331   3                              if(current_err==0)
 332   3                              {
 333   4                                      ini_sbuf(M_main,answer,OK,0,0,0,0);
 334   4                                      s_byte_nums=4;
 335   4                                      TR_noans();
 336   4                              }
 337   3                              else
 338   3                              {
 339   4                                      ini_sbuf(M_main,err_infor,M_current,err,0,0,0);
 340   4                                      s_byte_nums=5;
 341   4                                      TR_noans();
 342   4                                      current_err=0;
 343   4                                      err=0;
 344   4                                      stop=1;
 345   4                              }
 346   3                              called=0;
 347   3                      }
 348   2              }
 349   1              urgent_stop=1;
 350   1              c_cm2=0;
 351   1              IEN1=IEN1|0x40;
 352   1      
 353   1      }
 354          
 355          void T0_INT (void) interrupt 1
 356          {       
 357   1              c_t0++;
 358   1      
 359   1      }
 360          
 361          void EX1_INT(void) interrupt 2          //错误检测
 362          {
 363   1              unsigned char get_err;
 364   1              EX1=0;
 365   1              
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 7   

 366   1              get_err=P5;
 367   1              get_err=get_err&0x08;
 368   1              if(get_err==0)
 369   1                      err=4;
 370   1              else
 371   1              {
 372   2                      get_err=P5;
 373   2                      get_err=get_err&0x10;
 374   2                      if(get_err==0)
 375   2                              err=5;
 376   2                      else
 377   2                      {
 378   3                              get_err=P5;
 379   3                              get_err=get_err&0x20;
 380   3                              if(get_err==0)
 381   3                                      err=6;
 382   3                              else
 383   3                              {
 384   4                                      get_err=P5;
 385   4                                      get_err=get_err&0x30;
 386   4                                      if(get_err==0)
 387   4                                              err=8;
 388   4                                      else
 389   4                                      {
 390   5                                              get_err=P5;
 391   5                                              get_err=get_err&0x40;
 392   5                                              if(get_err==0)
 393   5                                                      err=7;
 394   5                                      }
 395   4                              }
 396   3                      }
 397   2              }       
 398   1              if(err!=0)
 399   1              {
 400   2                      current_err=1;
 401   2                      stop=0;
 402   2              }
 403   1              else
 404   1                      EX1=1;
 405   1      }
 406          
 407          void T1_INT (void) interrupt 3
 408          {
 409   1              c_t1++;
 410   1              if(send==1)
 411   1              {
 412   2                      if(c_t1==7)
 413   2                      {
 414   3                              S0BUF=sbuffer[POINTER0];
 415   3                              c_t1=0;
 416   3                      }
 417   2              }
 418   1              else
 419   1              {
 420   2                      if(c_t1==100)
 421   2                      {
 422   3                              TR1=0;
 423   3                              overtime=1;
 424   3                      }
 425   2              }
 426   1      }
 427          
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 8   

 428          void TR_INT (void) interrupt 4                                  //串行口中断
 429          {
 430   1              EA=0;                                                   //关中断
 431   1              if(TI==1)                                               //发送完成
 432   1              {
 433   2                      TI=0;
 434   2                      POINTER0++;                                     //发送缓冲指针加1
 435   2                      if(POINTER0<s_byte_nums-1)
 436   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 437   2                      else
 438   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 439   2                      if(POINTER0==s_byte_nums)
 440   2                              REN=1;
 441   2              }
 442   1      
 443   1              if(RI==1)                                               //接收完成
 444   1              {
 445   2                      RI=0;
 446   2                      POINTER1++;                             //接收缓冲指针加1
 447   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 448   2                      if(rbuffer[0]==M_current||rbuffer[0]==M_ALL||rbuffer[0]==M_current_RW)
 449   2                      {
 450   3                              SM2=0;
 451   3                              if(POINTER1==2)                         //获取字节个数
 452   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 453   3                              if(POINTER1<r_byte_nums)
 454   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 455   3                              else
 456   3                              {
 457   4                                      SM2=1;
 458   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 459   4                                      {
 460   5                                              if(ans==0)
 461   5                                              {
 462   6                                                      POINTER1=0;
 463   6                                                      RSUM=0;
 464   6                                              }
 465   5                                              S_ANSW=OK;
 466   5                                              data_type();
 467   5                                      }
 468   4                                      else
 469   4                                      {
 470   5                                              S_ANSW=FAIL;
 471   5                                              if(resend==0)
 472   5                                                      resend=1;
 473   5                                      }
 474   4                                      r_byte_nums=4;
 475   4                              }
 476   3                      }
 477   2                      else
 478   2                              POINTER1=0;
 479   2              }
 480   1              EA=1;                                       //开中断
 481   1      }
 482          
 483          void S1_int (void) interrupt 5      //I2C
 484          {
 485   1              ES1=0;
 486   1              if(S1STA==0x00)
 487   1              {
 488   2                      FF=1;
 489   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 9   

 490   2              }
 491   1              if(S1STA==0x08)
 492   1              {
 493   2                      S1DAT=SLA;
 494   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 495   2              }
 496   1              if(S1STA==0x10)
 497   1              {
 498   2                      S1DAT=SLA;
 499   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 500   2              }
 501   1              if(S1STA==0x18)
 502   1              {
 503   2                      S1DAT=COMM;
 504   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 505   2              }
 506   1              if(S1STA==0x20)
 507   1              {
 508   2                      FF=1;
 509   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 510   2              }
 511   1              if(S1STA==0x28)
 512   1              {
 513   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 514   2                      FF=1;
 515   2              }
 516   1              if(S1STA==0x30)
 517   1              {
 518   2                      FF=1;
 519   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1

⌨️ 快捷键说明

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