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

📄 current2.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 520   2              }
 521   1              if(S1STA==0x38)
 522   1                      S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1
 523   1              if(S1STA==0x40)
 524   1                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 525   1              if(S1STA==0x48)
 526   1              {
 527   2                      FF=1;
 528   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 529   2              }
 530   1              if(S1STA==0x50)
 531   1              {
 532   2                      GET=S1DAT;
 533   2                      S1CON=0xC1; //STA=0   STO=0    SI=0     AA=0
 534   2              }
 535   1              if(S1STA==0x58)
 536   1              {
 537   2                      FF=1;
 538   2                      S1CON=0xD5; //STA=0   STO=1   SI=0     AA=1
 539   2              }
 540   1              ES1=1;
 541   1      }
 542          
 543          void CT0_int (void) interrupt 6                 //横摆使能输入
 544          {
 545   1              CTI0=0;
 546   1              CTCON=CTCON&0XFC;                       //禁止上升、下降
 547   1              if(edge==0)
 548   1              {
 549   2                      current_out=1;                                  //峰值
 550   2                      IEN1=IEN1&0XDF;                         //禁止CM1,停峰、基时间
 551   2                      if(ahf_ok==1)
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 10  

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

 614   2                      ad_i=10000*AD5/4920;
 615   2                      if(ad_i<50)                                     //电流小于5.0A
 616   2                              tab2++;
 617   2                      if(c_adc==1)
 618   2                      {
 619   3                              AD1=ad_i;
 620   3                              AD2=ad_i;
 621   3                              AD3=ad_i;
 622   3                              AD4=ad_i;
 623   3                      }
 624   2                      else
 625   2                      {
 626   3                              ad_i=(ad_i+AD1+AD2+AD3+AD4)/5;
 627   3                              AD1=AD2;
 628   3                              AD2=AD3;
 629   3                              AD3=AD4;
 630   3                              AD4=ad_i;
 631   3                      }
 632   2              }
 633   1              else                                                    //电压采样
 634   1              {
 635   2      
 636   2                      ad_v=1000*AD5/4920;
 637   2                      if(ad_v<25)
 638   2                              tab3++;
 639   2                      if(c_adc==6)
 640   2                      {
 641   3                              AD1=ad_v;
 642   3                              AD2=ad_v;
 643   3                              AD3=ad_v;
 644   3                              AD4=ad_v;
 645   3                      }
 646   2                      else
 647   2                      {
 648   3                              ad_v=(ad_v+AD1+AD2+AD3+AD4)/5;
 649   3                              AD1=AD2;
 650   3                              AD2=AD3;
 651   3                              AD3=AD4;
 652   3                              AD4=ad_v;
 653   3                      }                               //电压小于2.5V
 654   2              }
 655   1              if(c_adc<=5)                                    //电流采样
 656   1              {
 657   2                      if(c_adc==5)                            //电流——电压
 658   2                      {
 659   3                              i_v=1;                          //电压采样标志
 660   3                              AD1=0;
 661   3                              AD2=0;
 662   3                              AD3=0;
 663   3                              AD4=0;
 664   3                              tab2=0;
 665   3                      }
 666   2                      ad_finish=1;
 667   2                      CTCON=CTCON|0X20;
 668   2                      IEN1=IEN1|0X04;                 //允许CT2
 669   2              }
 670   1              if(c_adc>5&&c_adc<=10)
 671   1              {
 672   2                      if(c_adc==10)                   //电压——电流
 673   2                      {
 674   3                              i_v=0;                  //电流采样标志
 675   3                              c_adc=0;
C51 COMPILER V7.06   CURRENT2                                                              10/19/2005 14:43:02 PAGE 12  

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

 738   1              else
 739   1                      CMH1=TMH2+0X04;
 740   1      }
 741          
 742          void CM2_int (void)   interrupt 13              //关水计时
 743          {
 744   1              CMI2=0;
 745   1              c_cm2++;
 746   1              if(c_cm2==240)
 747   1              {
 748   2                      con_water=1;                    //关水
 749   2                      IEN1=IEN1&0xDF;                 //禁止CM1
 750   2                      c_cm2=0;
 751   2              }
 752   1              CML2=TML2+0x24;
 753   1              if(CML2<TML2)
 754   1                      CMH2=TMH2+1+0xF4;
 755   1              else
 756   1                      CMH2=TMH2+0xF4;
 757   1      }
 758          
 759          main()
 760          {
 761   1              unsigned char k,k1,k2;
 762   1              unsigned int temp_delt_p,temp_delt_b;
 763   1              
 764   1              current_enable=0;
 765   1              TMOD=0x22;                      //定时器1,方式2;
 766   1              TL1=0XFD;                       //波特率9600
 767   1              TH1=0XFD;
 768   1              TR1=1;                          //启动定时器
 769   1              PCON=0X00;                      //SMOD=1
 770   1              TMOD=0x23;                      //定时器0,方式3,两个8位定时器;
 771   1              TR1=0;
 772   1              TF1=0;
 773   1              S0CON=0XF8;                     //串口方式3,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
 774   1              IP0=0X98;                       //S0=1
 775   1              IP1=IP1|0X20;
 776   1              ES0=1;                          //开串口中断
 777   1              ET0=1;
 778   1              ET1=1;
 779   1              ES1=1;                          //I2C
 780   1              EAD=1;                          //AD中断允许
 781   1              EA=1;                           //中断总允许
 782   1              start_t2();
 783   1              

⌨️ 快捷键说明

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