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

📄 current1.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 508   2                      S1DAT=COMM;
 509   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 510   2              }
 511   1              if(S1STA==0x20)
 512   1              {
 513   2                      FF=1;
 514   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 515   2              }
 516   1              if(S1STA==0x28)
 517   1              {
 518   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 519   2                      FF=1;
 520   2              }
 521   1              if(S1STA==0x30)
 522   1              {
 523   2                      FF=1;
 524   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 525   2              }
 526   1              if(S1STA==0x38)
 527   1                      S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1
 528   1              if(S1STA==0x40)
 529   1                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 530   1              if(S1STA==0x48)
 531   1              {
 532   2                      FF=1;
 533   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 534   2              }
 535   1              if(S1STA==0x50)
 536   1              {
 537   2                      GET=S1DAT;
 538   2                      S1CON=0xC1; //STA=0   STO=0    SI=0     AA=0
 539   2              }
 540   1              if(S1STA==0x58)
 541   1              {
 542   2                      FF=1;
 543   2                      S1CON=0xD5; //STA=0   STO=1   SI=0     AA=1
 544   2              }
 545   1              ES1=1;
 546   1      }
 547          
 548          void CT0_int (void) interrupt 6                 //横摆使能输入
 549          {
 550   1              CTI0=0;
 551   1              CTCON=CTCON&0XFC;                       //禁止上升、下降
C51 COMPILER V7.06   CURRENT1                                                              07/15/2005 11:04:46 PAGE 10  

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

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

 676   3                              }
 677   2                              ad_finish=1;
 678   2                              CTCON=CTCON|0X20;
 679   2                              IEN1=IEN1|0X04;                 //允许CT2
 680   2                      }
 681   1                      if(c_adc>5&&c_adc<=10)
 682   1                      {
 683   2                                      if(c_adc==10)                   //电压——电流
 684   2                                      {
 685   3                                              i_v=0;                  //电流采样标志
 686   3                                              c_adc=0;
 687   3                                              AD1=0;
 688   3                                              AD2=0;
 689   3                                              AD3=0;
 690   3                                              AD4=0;
 691   3                                              tab3=0;
 692   3                                      }
 693   2                                      ad_finish=1;
 694   2                                      CTCON=CTCON|0X20;
 695   2                                      IEN1=IEN1|0X04;                 //允许CT2
 696   2                      }
 697   1      //      }
 698   1      }
 699          
 700          void CM1_int (void)   interrupt 12              //电流脉冲输出(峰、基值时间)
 701          {
 702   1              CMI1=0;
 703   1              c_cm1++;
 704   1              if(current_out==1&&c_cm1==n_pulse||current_out==0&&c_cm1==n_base)
 705   1              {
 706   2                      current_out=~current_out;
 707   2                      c_cm1=0;
 708   2              }
 709   1              CML1=TML2+0XE2;         //峰值时间
 710   1              if(CML1<TML2)
 711   1                      CMH1=(TMH2+1)+0X04;
 712   1              else
 713   1                      CMH1=TMH2+0X04;
 714   1      }
 715          
 716          void CM2_int (void)   interrupt 13              //关水计时
 717          {
 718   1              CMI2=0;
 719   1              c_cm2++;
 720   1              if(c_cm2==240)
 721   1              {
 722   2                      con_water=1;                    //关水
 723   2                      IEN1=IEN1&0xDF;                 //禁止CM1
 724   2                      c_cm2=0;
 725   2              }
 726   1              CML2=TML2+0x24;
 727   1              if(CML2<TML2)
 728   1                      CMH2=TMH2+1+0xF4;
 729   1              else
 730   1                      CMH2=TMH2+0xF4;
 731   1      }
 732          
 733          main()
 734          {
 735   1              unsigned char k,k1,k2;
 736   1              unsigned int temp_delt_p,temp_delt_b;
 737   1              
C51 COMPILER V7.06   CURRENT1                                                              07/15/2005 11:04:46 PAGE 13  

 738   1              current_enable=0;
 739   1              TMOD=0x22;                      //定时器1,方式2;
 740   1              TL1=0XFD;                       //波特率9600
 741   1              TH1=0XFD;
 742   1              TR1=1;                          //启动定时器
 743   1              PCON=0X00;                      //SMOD=1
 744   1              TMOD=0x23;                      //定时器0,方式3,两个8位定时器;
 745   1              TR1=0;
 746   1              TF1=0;
 747   1              S0CON=0XF8;                     //串口方式3,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
 748   1              IP0=0X98;                       //S0=1
 749   1              IP1=IP1|0X20;
 750   1              ES0=1;                          //开串口中断
 751   1              ET0=1;
 752   1              ET1=1;
 753   1              ES1=1;                          //I2C
 754   1              EAD=1;                          //AD中断允许
 755   1              EA=1;                           //中断总允许
 756   1              start_t2();
 757   1              
 758   1              urgent_stop=0;
 759   1              current_err=0;
 760   1              err_ok=0;
 761   1              err=0;
 762   1      BEGIN:  
 763   1              if(urgent_stop==1)
 764   1              {
 765   2                      urgent_stop=0;

⌨️ 快捷键说明

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