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

📄 avc.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 467          void CT2_int (void) interrupt 8                 //电压采样保持脉冲
 468          {
 469   1              CTI2=0;
 470   1              CTCON=CTCON&0xCF;
 471   1              if(decrease==0)
 472   1              {
 473   2      //              IEN1=IEN1&0XFB;                 //禁止CT2
 474   2                      ad_finish=0;                    //AD转换及处理过程
 475   2                      ADCON=0X08;                     //启动AD采样
 476   2              }
 477   1      }
 478          
 479          void CT3_int (void) interrupt 9         //电流脉冲
 480          {
 481   1              CTI3=0;
 482   1              pulse_base=~pulse_base;
 483   1              CTCON=CTCON&0X3F;
 484   1      
 485   1              if(avc_ok==0)                   //开始弧长
 486   1              {
 487   2                      avc_ok=1;
 488   2                      CTCON=CTCON|0x20;       //CT2下降沿
C51 COMPILER V7.06   AVC                                                                   06/10/2005 14:33:44 PAGE 9   

 489   2                      IEN1=IEN1|0X04;         //允许CT2,采样保持脉冲
 490   2              }
 491   1              else
 492   1              {
 493   2                      if(pp.avc_type==SP)
 494   2                      {
 495   3                              if(pulse_base==0)                       //进入基值
 496   3                              {
 497   4                                      gate=0;
 498   4                                      CTCON=CTCON&0xCF;
 499   4                              }
 500   3                              else
 501   3                              {
 502   4                                      c_sample=0;
 503   4                                      CTCON=CTCON|0x20;
 504   4                              }       
 505   3                      }
 506   2                      else if(pp.avc_type==SB)
 507   2                      {
 508   3                              if(pulse_base==1)
 509   3                              {
 510   4                                      gate=0;
 511   4                                      CTCON=CTCON&0xCF;
 512   4                              }
 513   3                              else
 514   3                              {
 515   4                                      c_sample=0;
 516   4                                      CTCON=CTCON|0x20;
 517   4                              }
 518   3                      }
 519   2                      else
 520   2                      {
 521   3                              gate=0;
 522   3                              CTCON=CTCON&0xCC;
 523   3                              AD1=0;
 524   3                              AD2=0;
 525   3                              AD3=0;
 526   3                              AD4=0;
 527   3                              AD5=0;
 528   3                              new_circle=1;
 529   3                              if(pulse_base==1)
 530   3                              {
 531   4                                      vc5=vc1;
 532   4                                      vc6=vc2;
 533   4                              }
 534   3                              else
 535   3                              {
 536   4                                      vc5=vc3;
 537   4                                      vc6=vc4;
 538   4                              }
 539   3                              CTCON=CTCON|0x20;
 540   3                      }
 541   2              }
 542   1              
 543   1              
 544   1              if(pulse_base==1)
 545   1                      CTCON=CTCON|0X80;       //CT3下降沿
 546   1              else
 547   1                      CTCON=CTCON|0X40;       //CT3上升沿
 548   1      }
 549          
 550          void ADC_int (void) interrupt 10
C51 COMPILER V7.06   AVC                                                                   06/10/2005 14:33:44 PAGE 10  

 551          {
 552   1              ADCON=ADCON&0xEF;                       //清ADC中断标志
 553   1              c_sample++;                                                     //2005-3-3
 554   1              adh=ADCH;
 555   1              adl=ADCON&0xC0;
 556   1              adh=adh<<2;
 557   1              adl=adl>>6;
 558   1              ad=adh+adl;
 559   1              da=ad;
 560   1              AD5=(da*5000)/0x3FF;
 561   1              if(new_circle==1)
 562   1              {
 563   2                      new_circle=0;
 564   2                      AD1=AD5;
 565   2                      AD2=AD5;
 566   2                      AD3=AD5;
 567   2                      AD4=AD5;
 568   2              }
 569   1              else
 570   1              {
 571   2                      AD5=(AD5+AD1+AD2+AD3+AD4)/5;
 572   2                      AD1=AD2;
 573   2                      AD2=AD3;
 574   2                      AD3=AD4;
 575   2                      AD4=AD5;
 576   2              }
 577   1              AD5=AD5*6/100;                          //AD5*30/5
 578   1      
 579   1              if(c_sample%5==0&&(AD5>vc5||AD5<vc6))
 580   1              {
 581   2                      c_sample=0;                     //2005-3-3
 582   2                      if(AD5>vc5)
 583   2                              avc_dir=0;
 584   2                      if(AD5<vc6)
 585   2                              avc_dir=1;                      //弧长方向——上
 586   2                      avc_enable=0;
 587   2                      gate=1;
 588   2                      CTCON=CTCON|0x02;
 589   2                      IEN1=IEN1|0X01;                 //允许CT0,弧长调整长度
 590   2              }
 591   1              else
 592   1              {
 593   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)))
 594   2                      {
 595   3                              CTCON=CTCON|0x20;
 596   3      //                      IEN1=IEN1|0X04;         //允许CT2
 597   3                      }
 598   2              }
 599   1              ad_finish=1;                            //AD转换及处理完成
 600   1      }
 601          
 602          main()
 603          {
 604   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 605   1              TL1=0XFD;                               //波特率9600
 606   1              TH1=0XFD;
 607   1              TR1=1;                                  //启动定时器
 608   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 609   1              TR1=0;
 610   1              TF1=0;
 611   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
C51 COMPILER V7.06   AVC                                                                   06/10/2005 14:33:44 PAGE 11  

 612   1              IP1=0X01;                               //CT0高优先级
 613   1              IP0=0X98;                               //S0=1,T1=1
 614   1              EX0=1;
 615   1              ES0=1;                                  //开串口中断
 616   1              ET1=1;
 617   1              EAD=1;                                  //AD中断允许
 618   1              EA=1;                                   //中断总允许
 619   1              start_t2();
 620   1              
 621   1              externel_voltage=0;
 622   1              COM=0XB6;
 623   1              COUNT2=0x00;
 624   1              COUNT2=0x00;
 625   1              AD1=0;
 626   1              AD2=0;
 627   1              AD3=0;
 628   1              AD4=0;
 629   1              AD5=0;
 630   1              U51=0;
 631   1              
 632   1      BEGIN:  CTCON=0X00;
 633   1              IEN1=0x00;
 634   1              stop=1;
 635   1              avc_err=0;
 636   1              EX0=1;
 637   1              urgent_stop=0;
 638   1              COM=0x36;
 639   1              COUNT0=0x00;
 640   1              COUNT0=0x00;
 641   1              COM=0X76;
 642   1              COUNT1=0x00;
 643   1              COUNT1=0x00;
 644   1              gate=0;                 //关门控
 645   1              avc_enable=1;
 646   1              avc_dir=1;      
 647   1              work=0;
 648   1              called=0;
 649   1              start=0;
 650   1              pgj=0;
 651   1              sector=0;
 652   1              in_sector=0;
 653   1              start_avc=0;
 654   1              avc_ok=0;
 655   1              new_circle=1;
 656   1              c_sample=0;
 657   1              ad_finish=1;                    //AD转换及处理完成标志
 658   1              pulse_base=0;                   //峰、基值标志 0-基值、1-峰值
 659   1              stop_avc=0;                                     
 660   1              decrease=0;
 661   1              lift=0;
 662   1              ask_lift_ok=0;
 663   1              lift_ok=0;
 664   1              lift_complete=0;
 665   1              to_begin=0;
 666   1              
 667   1              need_para=0;
 668   1              POINTER0=0;
 669   1              SSUM=0;
 670   1              S_ANSW=0;
 671   1              POINTER1=0;
 672   1              RSUM=0;
 673   1              ans=0;
C51 COMPILER V7.06   AVC                                                                   06/10/2005 14:33:44 PAGE 12  

 674   1      //      R_ANSW=0;
 675   1              send=0;
 676   1              resend=0;
 677   1              r_byte_nums=4;
 678   1              demand=0;
 679   1                      
 680   1              avc=0;
 681   1              avc_up=0;
 682   1              avc_down=0;
 683   1              motor_stop=0;
 684   1              avc_err=0;                                      //弧长脉冲计数
 685   1              
 686   1              
 687   1              PWMP=12;                                        //采样保持脉冲,2K                                      
 688   1              PWM0=127;       
 689   1              COM=0X36;                                       //弧长点动速度,1K
 690   1              COUNT0=8000%256;
 691   1              COUNT0=8000/256;                                //弧长采样脉冲,1K
 692   1              CML0=TML2+0X20;
 693   1              if(CML0<TML2)
 694   1                      CMH0=TMH2+1+0X4E;
 695   1              else
 696   1                      CMH0=TMH2+0X4E;                         //20ms
 697   1      
 698   1              while(start==0)                                 //等待过程中,接受点名和参数
 699   1              {
 700   2                      if(called==1)
 701   2                      {
 702   3                              ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);

⌨️ 快捷键说明

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