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

📄 current_1027.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 522   1              {
 523   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 524   2                      FF=1;
 525   2              }
 526   1              if(S1STA==0x30)
 527   1              {
 528   2                      FF=1;
 529   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 530   2              }
 531   1              if(S1STA==0x38)
 532   1                      S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1
 533   1              if(S1STA==0x40)
 534   1                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 535   1              if(S1STA==0x48)
 536   1              {
 537   2                      FF=1;
 538   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 539   2              }
 540   1              if(S1STA==0x50)
 541   1              {
 542   2                      GET=S1DAT;
 543   2                      S1CON=0xC1; //STA=0   STO=0    SI=0     AA=0
 544   2              }
 545   1              if(S1STA==0x58)
 546   1              {
 547   2                      FF=1;
 548   2                      S1CON=0xD5; //STA=0   STO=1   SI=0     AA=1
 549   2              }
 550   1              ES1=1;
 551   1      }
C51 COMPILER V7.06   CURRENT_1027                                                          01/13/2006 15:18:05 PAGE 10  

 552          
 553          void CT0_int (void) interrupt 6                 //横摆使能输入
 554          {
 555   1              CTI0=0;
 556   1              CTCON=CTCON&0XFC;                       //禁止上升、下降
 557   1              if(edge==0)
 558   1              {
 559   2                      current_out=1;                                  //峰值
 560   2                      IEN1=IEN1&0XDF;                         //禁止CM1,停峰、基时间
 561   2                      if(ahf_ok==1)
 562   2                      {
 563   3                              IM8=IML_ahf;
 564   3                              IM4=IMH_ahf;
 565   3                              IB8=IMML_ahf;
 566   3                              IB4=IMMH_ahf;
 567   3                              UPD=0X00;
 568   3                      }
 569   2                      else
 570   2                      {
 571   3                              IM8=IML;
 572   3                              IM4=IMH;
 573   3                              IB8=IML;
 574   3                              IB4=IMH;
 575   3                              UPD=0X00;
 576   3                      }
 577   2                      edge=1;
 578   2                      CTCON=CTCON|0X01;                       //CT0上升沿
 579   2              }
 580   1              else
 581   1              {
 582   2                      edge=0;
 583   2                      current_out=0;          
 584   2                      CTCON=CTCON|0X02;                       //CT0下降沿
 585   2                      CML1=TML2+0XE2;         //峰值时间
 586   2                      if(CML1<TML2)
 587   2                              CMH1=(TMH2+1)+0X04;
 588   2                      else
 589   2                              CMH1=TMH2+0X04;
 590   2                      c_cm1=0;
 591   2                      IEN1=IEN1|0X20;                         //允许CM1,峰、基时间
 592   2              }
 593   1      }
 594                  
 595          void CT2_int (void) interrupt 8                 //采样保持脉冲
 596          {
 597   1              CTI2=0;
 598   1              if(current_out==1&&ad_finish==1)
 599   1              {
 600   2                      ad_finish=0;                    //采样进行标志
 601   2                      if(i_v==0)
 602   2                              ADCON=0x09;             //启动电流采样
 603   2                      else
 604   2                              ADCON=0X08;             //启动电压采样
 605   2              }
 606   1      }
 607          
 608          void ADC_int (void) interrupt 10                //AD采样中断
 609          {
 610   1              ADCON=ADCON&0xEF;                       //清ADC中断标志
 611   1              CTCON=CTCON&0XCF;
 612   1              IEN1=IEN1&0XFB;                         //禁止CT2
 613   1              c_adc++;
C51 COMPILER V7.06   CURRENT_1027                                                          01/13/2006 15:18:05 PAGE 11  

 614   1              adh=ADCH;
 615   1              adl=ADCON&0xC0;
 616   1              adh=adh<<2;
 617   1              adl=adl>>6;
 618   1              ad=adh+adl;
 619   1              da=ad;
 620   1              AD5=(da*5000)/0x3FF;
 621   1      
 622   1              if(i_v==0)                                              //电流采样
 623   1              {
 624   2                      ad_i=10000*AD5/4920;
 625   2                      if(ad_i<50)                                     //电流小于5.0A
 626   2                              tab2++;
 627   2                      if(c_adc==1)
 628   2                      {
 629   3                              AD1=ad_i;
 630   3                              AD2=ad_i;
 631   3                              AD3=ad_i;
 632   3                              AD4=ad_i;
 633   3                      }
 634   2                      else
 635   2                      {
 636   3                              ad_i=(ad_i+AD1+AD2+AD3+AD4)/5;
 637   3                              AD1=AD2;
 638   3                              AD2=AD3;
 639   3                              AD3=AD4;
 640   3                              AD4=ad_i;
 641   3                      }
 642   2              }
 643   1              else                                                    //电压采样
 644   1              {
 645   2      
 646   2                      ad_v=1000*AD5/4920;
 647   2                      if(ad_v<25)
 648   2                              tab3++;
 649   2                      if(c_adc==6)
 650   2                      {
 651   3                              AD1=ad_v;
 652   3                              AD2=ad_v;
 653   3                              AD3=ad_v;
 654   3                              AD4=ad_v;
 655   3                      }
 656   2                      else
 657   2                      {
 658   3                              ad_v=(ad_v+AD1+AD2+AD3+AD4)/5;
 659   3                              AD1=AD2;
 660   3                              AD2=AD3;
 661   3                              AD3=AD4;
 662   3                              AD4=ad_v;
 663   3                      }                               //电压小于2.5V
 664   2              }
 665   1              if(c_adc<=5)                                    //电流采样
 666   1              {
 667   2                      if(c_adc==5)                            //电流——电压
 668   2                      {
 669   3                              i_v=1;                          //电压采样标志
 670   3                              AD1=0;
 671   3                              AD2=0;
 672   3                              AD3=0;
 673   3                              AD4=0;
 674   3                              tab2=0;
 675   3                      }
C51 COMPILER V7.06   CURRENT_1027                                                          01/13/2006 15:18:05 PAGE 12  

 676   2                      ad_finish=1;
 677   2                      CTCON=CTCON|0X20;
 678   2                      IEN1=IEN1|0X04;                 //允许CT2
 679   2              }
 680   1              if(c_adc>5&&c_adc<=10)
 681   1              {
 682   2                      if(c_adc==10)                   //电压——电流
 683   2                      {
 684   3                              i_v=0;                  //电流采样标志
 685   3                              c_adc=0;
 686   3                              AD1=0;
 687   3                              AD2=0;
 688   3                              AD3=0;
 689   3                              AD4=0;
 690   3                              tab3=0;
 691   3                      }
 692   2                      ad_finish=1;
 693   2                      CTCON=CTCON|0X20;
 694   2                      IEN1=IEN1|0X04;                 //允许CT2
 695   2              }
 696   1      }
 697          
 698          void CM1_int (void)   interrupt 12              //电流脉冲输出(峰、基值时间)
 699          {
 700   1              CMI1=0;
 701   1              c_cm1++;
 702   1              if(current_out==1&&c_cm1==n_pulse||current_out==0&&c_cm1==n_base)
 703   1              {
 704   2                      if(decrease==1||ahf_ok==0)
 705   2                      {
 706   3                              if(current_out==1)
 707   3                              {
 708   4                                      IM8=IBL;
 709   4                                      IM4=IBH;
 710   4                                      IB8=IBL;
 711   4                                      IB4=IBH;
 712   4                                      UPD=0X00;
 713   4                              }
 714   3                              else
 715   3                              {
 716   4                                      IM8=IML;
 717   4                                      IM4=IMH;
 718   4                                      IB8=IML;
 719   4                                      IB4=IMH;
 720   4                                      UPD=0X00;
 721   4                              }
 722   3                      }
 723   2                      else
 724   2                      {
 725   3                              if(current_out==1)
 726   3                              {
 727   4                                      IM8=IBL_ahf;
 728   4                                      IM4=IBH_ahf;
 729   4                                      IB8=IBBL_ahf;
 730   4                                      IB4=IBBH_ahf;
 731   4                                      UPD=0X00;
 732   4                              }
 733   3                              else
 734   3                              {
 735   4                                      IM8=IML_ahf;
 736   4                                      IM4=IMH_ahf;
 737   4                                      IB8=IMML_ahf;
C51 COMPILER V7.06   CURRENT_1027                                                          01/13/2006 15:18:05 PAGE 13  

 738   4                                      IB4=IMMH_ahf;
 739   4                                      UPD=0X00;
 740   4                              }
 741   3                      }
 742   2                      current_out=~current_out;
 743   2                      c_cm1=0;        
 744   2              }
 745   1              CML1=TML2+0XE2;         //峰值时间
 746   1              if(CML1<TML2)
 747   1                      CMH1=(TMH2+1)+0X04;
 748   1              else
 749   1                      CMH1=TMH2+0X04;
 750   1      }
 751          
 752          void CM2_int (void)   interrupt 13              //关水计时
 753          {
 754   1              CMI2=0;
 755   1              IEN1=IEN1&0XBF;                 //CM2
 756   1              if(gas_stop==1)
 757   1              {
 758   2                      c_cm21++;
 759   2                      if(c_cm21==20)
 760   2                      {
 761   3                              con_gas1=1;
 762   3                              gas_stop=0;
 763   3                              c_cm21=0;
 764   3                      }
 765   2              }
 766   1              if(con_water!=1)
 767   1              {
 768   2                      c_cm2++;
 769   2                      if(c_cm2==240)
 770   2                      {
 771   3                              con_water=1;                    //关水
 772   3                              IEN1=IEN1&0xDF;                 //禁止CM1
 773   3                              c_cm2=0;
 774   3                      }
 775   2              }
 776   1              
 777   1              if(gas_stop==1||con_water!=1)
 778   1              {
 779   2                      CML2=TML2+0x24;
 780   2                      if(CML2<TML2)
 781   2                              CMH2=TMH2+1+0xF4;
 782   2                      else
 783   2                              CMH2=TMH2+0xF4;
 784   2                      IEN1=IEN1|0X40;                 //CM2
 785   2              }
 786   1                      

⌨️ 快捷键说明

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