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

📄 avc2.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 234   2                                                      avc_down=1;break;
 235   2                      case com_stop_avc:      stop_avc=1;break;
 236   2                      case com_pgj:           pgj=1;break;
 237   2                      case com_lift:          lift=1;break;
 238   2                      case com_goto_begin:    to_begin=1;break;
 239   2                      case com_need_para:     if(need_para==0)
 240   2                                                      need_para=1;break;
 241   2                      case com_ask_lift_ok:   ask_lift_ok=1;break;
C51 COMPILER V7.06   AVC2                                                                  06/29/2005 10:04:08 PAGE 5   

 242   2                      case com_lift_ok:       lift_ok=1;break;
 243   2                      case com_err_ok:        err_ok=1;break;
 244   2                      default:                 break;
 245   2              }
 246   1      }
 247          
 248          void data_type()                                                //对接收到的数据分辨类型
 249          {
 250   1              switch(rbuffer[1])
 251   1              {
 252   2                      case command:   com_type();break;
 253   2      //              case answer:    R_ANSW=rbuffer[1];break;
 254   2                      case infor:     if(rbuffer[2]==com_sector)
 255   2                                      {
 256   3                                              in_sector=1;
 257   3                                              new_sector=1;
 258   3                                              nonce_sec=rbuffer[3];
 259   3                                      }break;
 260   2                      case p_out_sec: receive_p_out=1;break;
 261   2      
 262   2                      case p_in_sec:  {
 263   3                                              nonce_sec=rbuffer[2];
 264   3                                              receive_p_in=1;
 265   3                                      }break;
 266   2                      default:        break;
 267   2              }
 268   1      }
 269          
 270          
 271          void EX0_INT (void) interrupt 0                 //急停
 272          {
 273   1              EX0=0;
 274   1              message_enable=1;                               //关发送使能
 275   1              gate=0;
 276   1              externel_voltage=0;
 277   1              AD1=0;
 278   1              AD2=0;
 279   1              AD3=0;
 280   1              AD4=0;
 281   1              AD5=0;
 282   1              U51=0;
 283   1              while(err_ok==0)
 284   1              {
 285   2                      if(called==1)
 286   2                      {
 287   3                              if(avc_err==0)
 288   3                              {
 289   4                                      ini_sbuf(M_main,answer,OK,0,0,0);
 290   4                                      s_byte_nums=4;
 291   4                                      TR_noans();
 292   4                              }
 293   3                              else
 294   3                              {
 295   4                                      ini_sbuf(M_main,err_infor,M_AVC,err,0,0);
 296   4                                      s_byte_nums=5;
 297   4                                      TR_noans();
 298   4                                      avc_err=0;
 299   4                                      err=0;
 300   4                                      stop=1;
 301   4                              }
 302   3                              called=0;
 303   3                      }
C51 COMPILER V7.06   AVC2                                                                  06/29/2005 10:04:08 PAGE 6   

 304   2              }
 305   1              urgent_stop=1;
 306   1      }
 307          
 308          void EX1_INT (void) interrupt 2
 309          {
 310   1              unsigned char get_err;
 311   1              EX1=0;
 312   1              get_err=P5;
 313   1              get_err=get_err&0x04;
 314   1              if(get_err==0)
 315   1                      err=15;
 316   1              else
 317   1              {
 318   2                      get_err=P5;
 319   2                      get_err=get_err&0x08;
 320   2                      if(get_err==0)
 321   2                              err=16;
 322   2                      else
 323   2                      {
 324   3                              get_err=P5;
 325   3                              get_err=get_err&0x10;
 326   3                              if(get_err==0)
 327   3                                      err=17;
 328   3                              else
 329   3                              {
 330   4                                      get_err=P5;
 331   4                                      get_err=get_err&0x80;
 332   4                                      if(get_err==0)
 333   4                                              err=18;
 334   4                              }
 335   3                      }
 336   2              }
 337   1              if(err!=0)
 338   1              {
 339   2                      avc_err=1;
 340   2                      stop=0;
 341   2              }
 342   1              else
 343   1                      EX1=1;
 344   1      }
 345          void T1_INT (void) interrupt 3
 346          {
 347   1              c_t1++;
 348   1              if(send==1)
 349   1              {
 350   2                      if(c_t1==7)
 351   2                      {
 352   3                              S0BUF=sbuffer[POINTER0];
 353   3                              c_t1=0;
 354   3                      }
 355   2              }
 356   1              else
 357   1              {
 358   2                      if(c_t1==100)
 359   2                      {
 360   3                              TR1=0;
 361   3                              overtime=1;
 362   3                      }
 363   2              }
 364   1      }
 365          
C51 COMPILER V7.06   AVC2                                                                  06/29/2005 10:04:08 PAGE 7   

 366          void TR_INT (void) interrupt 4                                  //串行口中断
 367          {                                                       //关中断
 368   1              if(TI==1)                                               //发送完成
 369   1              {
 370   2                      TI=0;
 371   2                      POINTER0++;
 372   2                      if(POINTER0<s_byte_nums-1)
 373   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 374   2                      else
 375   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 376   2                      if(POINTER0==s_byte_nums)
 377   2                              REN=1;
 378   2              }
 379   1      
 380   1              if(RI==1)                                               //接收完成
 381   1              {
 382   2                      RI=0;
 383   2                      POINTER1++;                     //接收缓冲指针加1
 384   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 385   2                      if(rbuffer[0]==M_AVC||rbuffer[0]==M_ALL||rbuffer[0]==M_AVC_P)
 386   2                      {
 387   3                              SM2=0;
 388   3                              if(POINTER1==2)
 389   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 390   3                              if(POINTER1<r_byte_nums)
 391   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 392   3                              else
 393   3                              {
 394   4                                      SM2=1;
 395   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 396   4                                      {
 397   5                                              if(ans==0)
 398   5                                              {
 399   6                                                      POINTER1=0;
 400   6                                                      RSUM=0;
 401   6                                              }
 402   5                                              S_ANSW=OK;
 403   5                                              data_type();
 404   5                                      }
 405   4                                      else
 406   4                                      {
 407   5                                              S_ANSW=FAIL;
 408   5                                              if(resend==0)
 409   5                                                      resend=1;
 410   5                                      }
 411   4                              }
 412   3      
 413   3                      }
 414   2                      else
 415   2                              POINTER1=0;
 416   2              }                                       //开中断
 417   1      }
 418          
 419          void CT0_int (void) interrupt 6
 420          {
 421   1              CTI0=0;
 422   1              CTCON=CTCON&0xFC;
 423   1              gate=0;
 424   1              if(decrease==0&&pp.k5==ON)
 425   1              {
 426   2                      if(pp.k1==DC||(pp.k1==PDC&&pp.avc_type==SP&&pulse_base==1))//(pp.avc_type==SP&&pulse_base==1||pp.avc_typ
             -e==SPB||pp.avc_type==SB&&pulse_base==0)))
C51 COMPILER V7.06   AVC2                                                                  06/29/2005 10:04:08 PAGE 8   

 427   2                              CTCON=CTCON|0x20;
 428   2              }
 429   1              if(decrease==1&&lift==1)                //衰减过程
 430   1              {
 431   2                      avc_enable=1;                   //关弧长使能
 432   2                      IEN1=IEN1&0XFE;                 //禁止CT0
 433   2                      lift_complete=1;
 434   2              }
 435   1      }
 436          
 437          void CT2_int (void) interrupt 8                 //电压采样保持脉冲
 438          {
 439   1              CTI2=0;
 440   1              CTCON=CTCON&0xCF;
 441   1              if(decrease==0)
 442   1              {
 443   2      //              IEN1=IEN1&0XFB;                 //禁止CT2
 444   2                      ad_finish=0;                    //AD转换及处理过程
 445   2                      ADCON=0X08;                     //启动AD采样
 446   2              }
 447   1      }
 448          
 449          void CT3_int (void) interrupt 9         //电流脉冲
 450          {
 451   1              CTI3=0;
 452   1              pulse_base=~pulse_base;
 453   1              CTCON=CTCON&0X3F;
 454   1      
 455   1              if(avc_ok==0)                   //开始弧长
 456   1              {
 457   2                      if(pp.avc_type==SB)
 458   2                              temp_avc=temp_u51_b;
 459   2                      else
 460   2                              temp_avc=temp_u51_p;
 461   2                      avc_ok=1;
 462   2                      CTCON=CTCON|0x20;       //CT2下降沿
 463   2                      IEN1=IEN1|0X04;         //允许CT2,采样保持脉冲
 464   2              }
 465   1              else
 466   1              {
 467   2                      if(pp.avc_type==SP)
 468   2                      {
 469   3                              if(pulse_base==0)                       //进入基值
 470   3                              {
 471   4                                      gate=0;
 472   4                                      CTCON=CTCON&0xCF;

⌨️ 快捷键说明

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