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

📄 driver0425.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 716   3                              if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
 717   3                              {
 718   4                                              out1=out1+pp.dc41*10;
 719   4                                              judge_ok=1;
 720   4                                              center_excursion=0;
 721   4                              }
 722   3                      }
 723   2                      else if(judge_ok==1)
 724   2                      {
 725   3                              out1=out1-pp.dc41*10;
 726   3                              judge_ok=0;
 727   3                      }
 728   2                      out2=2*out1;
 729   2                      COM=0X76;
 730   2                      COUNT1=out1%256;
 731   2                      COUNT1=out1/256;
 732   2                      COM=0XB6;
 733   2                      COUNT2=out2%256;
 734   2                      COUNT2=out2/256;
 735   2                      P4_2=0;                         //开横摆使能
 736   2                      IEN1=IEN1|0X10;                 //允许CM0,边缘停留时间
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 13  

 737   2              }
 738   1              
 739   1      }
 740          
 741          void CT2_int (void) interrupt 8                 //电压采样保持脉冲/弧长脉冲
 742          {
 743   1              CTI2=0;
 744   1              if(decrease==0)
 745   1              {
 746   2                      if(sample_avc==0)                       //采样
 747   2                      {
 748   3                              CTCON=CTCON&0xCF;
 749   3                              IEN1=IEN1&0XFB;                 //禁止CT2
 750   3                              ad_finish=0;                    //AD转换及处理过程
 751   3                              ADCON=0X08;                     //启动AD采样
 752   3                      }
 753   2                      else
 754   2                      {
 755   3                              c_avc++;
 756   3                              if(SENS>10&&c_avc==3)
 757   3                                      PWMP=v51;
 758   3                              if(c_avc==SENS)                 //灵敏度
 759   3                              {
 760   4                                      PWM0=0;                 //关弧长脉冲
 761   4                                      CTCON=CTCON&0xCF;
 762   4                                      IEN1=IEN1&0XFB;         //禁止CT2
 763   4                                      if(pp.k5==ON)
 764   4                                      {
 765   5                                              sample_avc=0;
 766   5                                              if(pp.k1==DC||pp.k1==PDC&&(pp.avc_type==SP&&pulse_base==1||pp.avc_type==SPB||pp.avc_type==SB&&pulse_b
             -ase==0))
 767   5                                              {
 768   6                                                      PWMP=12;
 769   6                                                      PWM1=127;
 770   6                                                      CTCON=CTCON|0x20;
 771   6                                                      IEN1=IEN1|0X04;         //允许CT2
 772   6                                              }
 773   5                                      }
 774   4                              }
 775   3                      }
 776   2              }
 777   1              else                            //衰减过程
 778   1              {
 779   2                      if(lift==1)
 780   2                      {
 781   3                              c_avc++;
 782   3                              if(c_avc==c_lift)       //焊枪提升结束
 783   3                              {
 784   4                                      P4_4=1;                 //关弧长使能
 785   4                                      PWM0=0;                 //关弧长脉冲
 786   4                                      IEN1=IEN1&0XFB;         //禁止CT2
 787   4                                      c_avc=0;                //清弧长脉冲个数
 788   4                                      lift_complete=1;
 789   4                              }
 790   3                      }
 791   2              }
 792   1      }
 793          
 794          void CT3_int (void) interrupt 9         //电流脉冲
 795          {
 796   1              CTI3=0;
 797   1              pulse_base=~pulse_base;
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 14  

 798   1              CTCON=CTCON&0X3F;
 799   1              if(pulse_base==1)                       //峰值
 800   1              {
 801   2                      if(pp.avc_type==SPB||pp.avc_type==SB)
 802   2                              CTCON=CTCON|0X80;       //CT3下降沿
 803   2              }
 804   1              else                                    //基值
 805   1              {
 806   2                      if(pp.avc_type==SP||pp.avc_type==SPB)
 807   2                              CTCON=CTCON|0X40;       //CT3上升沿
 808   2              }
 809   1      
 810   1              if(pp.avc_type==SPB)
 811   1              {
 812   2                      PWM0=0;
 813   2                      IEN1=IEN1&0XFB;         //禁止CT2
 814   2                      c_avc=0;
 815   2                      sample_avc=0;
 816   2      
 817   2                      new_circle=1;
 818   2                      if(pulse_base==1)
 819   2                      {
 820   3                              vc5=vc1;
 821   3                              vc6=vc2;
 822   3                      }
 823   2                      else
 824   2                      {
 825   3                              vc5=vc3;
 826   3                              vc6=vc4;
 827   3                      }
 828   2              }
 829   1              if(avc_ok==0)                   //开始弧长
 830   1              {
 831   2                      avc_ok=1;
 832   2                      PWMP=12;                //23-1k  12-2k
 833   2                      PWM0=0;
 834   2                      PWM1=127;
 835   2                      CTCON=CTCON|0x20;       //CT2下降沿
 836   2                      IEN1=IEN1|0X04;         //允许CT2,采样保持脉冲
 837   2              }
 838   1      }
 839          
 840          void ADC_int (void) interrupt 10
 841          {
 842   1              ADCON=ADCON&0xEF;                       //清ADC中断标志
 843   1              c_sample++;                                                     //2005-3-3
 844   1              adh=ADCH;
 845   1              adl=ADCON&0xC0;
 846   1              adh=adh<<2;
 847   1              adl=adl>>6;
 848   1              ad=adh+adl;
 849   1              da=ad;
 850   1              AD5=(da*5000)/0x3FF;
 851   1              if(new_circle==1)
 852   1              {
 853   2                      new_circle=0;
 854   2                      AD1=AD5;
 855   2                      AD2=AD5;
 856   2                      AD3=AD5;
 857   2                      AD4=AD5;
 858   2              }
 859   1              else
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 15  

 860   1              {
 861   2                      AD5=(AD5+AD1+AD2+AD3+AD4)/5;
 862   2                      AD1=AD2;
 863   2                      AD2=AD3;
 864   2                      AD3=AD4;
 865   2                      AD4=AD5;
 866   2              }
 867   1              AD5=AD5*6/100;                          //AD5*30/5
 868   1      
 869   1              if(c_sample%5==0)
 870   1              {
 871   2                      PWM1=0;
 872   2                      c_sample=0;                             //2005-3-3
 873   2                      sample_avc=1;                   //等待弧长调整
 874   2      //              CTCON=CTCON&0X3F;
 875   2                      CTCON=CTCON|0X10;       //CT2上升沿
 876   2                      PWMP=start_v51;
 877   2                      PWM0=127;
 878   2                      if(AD5>vc5)
 879   2                              P4_5=0;
 880   2                      if(AD5<vc6)
 881   2                              P4_5=1;                 //弧长方向——上
 882   2                      c_avc=0;
 883   2                      P4_4=0;
 884   2                      IEN1=IEN1|0X04;         //允许CT2,弧长脉冲
 885   2              }
 886   1              else
 887   1              {
 888   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)))
 889   2                      {
 890   3                              PWMP=12;
 891   3                              PWM1=127;
 892   3                              CTCON=CTCON|0x20;
 893   3                              IEN1=IEN1|0X04;         //允许CT2
 894   3                      }
 895   2              }
 896   1              ad_finish=1;                            //AD转换及处理完成
 897   1      }
 898          
 899          void CM0_int (void) interrupt 11                //边缘停留时间
 900          {
 901   1              CMI0=0;
 902   1              c_t42++;
 903   1              if(decreased==0)
 904   1              {
 905   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 906   2                      {
 907   3                              IEN1=IEN1&0XEF;         //禁止CM0
 908   3                              CTCON=CTCON|0x02;
 909   3                              IEN1=IEN1|0X01;
 910   3                              P4_1=1;
 911   3                              TR0=1;
 912   3                              P4_6=~P4_6;             //边缘停留时间结束
 913   3                              c_t42=0;
 914   3                      }
 915   2              }
 916   1      
 917   1              else
 918   1              {
 919   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 920   2                      {
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 16  

 921   3                              IEN1=IEN1&0XEF;                 //禁止CM0
 922   3                              CTCON=CTCON|0x02;
 923   3                              IEN1=IEN1|0X01;
 924   3                              P4_1=1;
 925   3                              P4_6=~P4_6;                             //边缘停留时间结束
 926   3                              c_t42=0;
 927   3                      }
 928   2              }
 929   1      
 930   1              CML0=TML2+0X20;
 931   1              if(CML0<TML2)
 932   1                      CMH0=TMH2+1+0X4E;
 933   1              else
 934   1                      CMH0=TMH2+0X4E;
 935   1      }
 936          
 937          main()
 938          {
 939   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 940   1              TL1=0XFD;                               //波特率19200
 941   1              TH1=0XFD;
 942   1              TR1=1;                                  //启动定时器
 943   1              PCON=0X00;                              //SMOD=1
 944   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 945   1              TR1=0;
 946   1              TF1=0;
 947   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 948   1              IP1=0X03;                               //CT0、CT1高优先级
 949   1              IP0=0X98;                               //S0=1,T1=1
 950   1              ES0=1;                                  //开串口中断
 951   1              ET0=1;
 952   1              ET1=1;
 953   1              EAD=1;                                  //AD中断允许
 954   1              ES1=1;                                  //I2C

⌨️ 快捷键说明

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