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

📄 avc1.lst

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

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

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

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

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

⌨️ 快捷键说明

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