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

📄 current3.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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   CURRENT3                                                              08/02/2005 11:16:30 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      
 351   1      }
 352          
 353          void T0_INT (void) interrupt 1
 354          {       
 355   1              c_t0++;
 356   1      /*
 357   1              if(ahf_ok==1)
 358   1              {
 359   1                      if(c_t0==c_ahf_p||c_t0==c_ahf_b)
 360   1                      {
 361   1                              if(current_out==1)
 362   1                              {
 363   1                                      if(ahf_p_b==1&&c_t0==c_ahf_p)
 364   1                                      {
 365   1      //                                      TR0=0;
C51 COMPILER V7.06   CURRENT3                                                              08/02/2005 11:16:30 PAGE 7   

 366   1                                              ahf_p_b=0;
 367   1                                              IM8=IMML;
 368   1                                              IM4=IMMH;
 369   1                                              UPD=0X00;
 370   1                                              TR0=1;
 371   1                                      }
 372   1                                      else if(ahf_p_b==0&&c_t0==c_ahf_b)
 373   1                                      {
 374   1      //                                      TR0=0;
 375   1                                              ahf_p_b=1;
 376   1                                              IM8=IML;
 377   1                                              IM4=IMH;
 378   1                                              UPD=0X00;
 379   1                                              TR0=1;
 380   1                                      }
 381   1                              }
 382   1                              else if(current_out==0)
 383   1                              {
 384   1                                      if(ahf_p_b==1&&c_t0==c_ahf_p)
 385   1                                      {
 386   1      //                                      TR0=0;
 387   1                                              ahf_p_b=0;
 388   1                                              IB8=IBBL;
 389   1                                              IB4=IBBH;
 390   1                                              UPD=0X00;
 391   1                                              TR0=1;
 392   1                                      }
 393   1                                      else if(ahf_p_b==0&&c_t0==c_ahf_b)
 394   1                                      {
 395   1      //                                      TR0=0;
 396   1                                              ahf_p_b=1;
 397   1                                              IB8=IBL;
 398   1                                              IB4=IBH;
 399   1                                              UPD=0X00;
 400   1                                              TR0=1;
 401   1                                      }
 402   1                              }
 403   1                              c_t0=0;
 404   1                      }
 405   1              }
 406   1      */
 407   1      }
 408          
 409          void EX1_INT(void) interrupt 2          //错误检测
 410          {
 411   1              unsigned char get_err;
 412   1              EX1=0;
 413   1              
 414   1              get_err=P5;
 415   1              get_err=get_err&0x08;
 416   1              if(get_err==0)
 417   1                      err=4;
 418   1              else
 419   1              {
 420   2                      get_err=P5;
 421   2                      get_err=get_err&0x10;
 422   2                      if(get_err==0)
 423   2                              err=5;
 424   2                      else
 425   2                      {
 426   3                              get_err=P5;
 427   3                              get_err=get_err&0x20;
C51 COMPILER V7.06   CURRENT3                                                              08/02/2005 11:16:30 PAGE 8   

 428   3                              if(get_err==0)
 429   3                                      err=6;
 430   3                              else
 431   3                              {
 432   4                                      get_err=P5;
 433   4                                      get_err=get_err&0x30;
 434   4                                      if(get_err==0)
 435   4                                              err=8;
 436   4                                      else
 437   4                                      {
 438   5                                              get_err=P5;
 439   5                                              get_err=get_err&0x40;
 440   5                                              if(get_err==0)
 441   5                                                      err=7;
 442   5                                      }
 443   4                              }
 444   3                      }
 445   2              }       
 446   1              if(err!=0)
 447   1              {
 448   2                      current_err=1;
 449   2                      stop=0;
 450   2              }
 451   1              else
 452   1                      EX1=1;
 453   1      }
 454          
 455          void T1_INT (void) interrupt 3
 456          {
 457   1              c_t1++;
 458   1              if(send==1)
 459   1              {
 460   2                      if(c_t1==7)
 461   2                      {
 462   3                              S0BUF=sbuffer[POINTER0];
 463   3                              c_t1=0;
 464   3                      }
 465   2              }
 466   1              else
 467   1              {
 468   2                      if(c_t1==100)
 469   2                      {
 470   3                              TR1=0;
 471   3                              overtime=1;
 472   3                      }
 473   2              }
 474   1      }
 475          
 476          void TR_INT (void) interrupt 4                                  //串行口中断
 477          {
 478   1              EA=0;                                                   //关中断
 479   1              if(TI==1)                                               //发送完成
 480   1              {
 481   2                      TI=0;
 482   2                      POINTER0++;                                     //发送缓冲指针加1
 483   2                      if(POINTER0<s_byte_nums-1)
 484   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 485   2                      else
 486   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 487   2                      if(POINTER0==s_byte_nums)
 488   2                              REN=1;
 489   2              }
C51 COMPILER V7.06   CURRENT3                                                              08/02/2005 11:16:30 PAGE 9   

 490   1      
 491   1              if(RI==1)                                               //接收完成
 492   1              {
 493   2                      RI=0;
 494   2                      POINTER1++;                             //接收缓冲指针加1
 495   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 496   2                      if(rbuffer[0]==M_current||rbuffer[0]==M_ALL||rbuffer[0]==M_current_RW)
 497   2                      {
 498   3                              SM2=0;
 499   3                              if(POINTER1==2)                         //获取字节个数
 500   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 501   3                              if(POINTER1<r_byte_nums)
 502   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 503   3                              else
 504   3                              {
 505   4                                      SM2=1;
 506   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 507   4                                      {
 508   5                                              if(ans==0)
 509   5                                              {
 510   6                                                      POINTER1=0;
 511   6                                                      RSUM=0;
 512   6                                              }
 513   5                                              S_ANSW=OK;
 514   5                                              data_type();
 515   5                                      }
 516   4                                      else
 517   4                                      {
 518   5                                              S_ANSW=FAIL;
 519   5                                              if(resend==0)
 520   5                                                      resend=1;
 521   5                                      }

⌨️ 快捷键说明

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