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

📄 pid.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.06   PID                                                                   09/08/2005 15:02:37 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PID
OBJECT MODULE PLACED IN E:\NEWMAC~1\050808\DC\PID.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\NEWMAC~1\050808\DC\PID.C DB SB OE

stmt level    source

   1          #include <dc.h>
   2          
   3          #define r_Kp 1
   4          #define r_Ki 1
   5          #define r_Kd 1
   6          sbit stop=P3^5;
   7          sbit wire_dir=P4^7;
   8          sbit wire_enable=P4^6;
   9          sbit rot_dir=P4^4;
  10          sbit rot_enable=P4^5;
  11          sbit send_enable=P3^4;
  12          sbit limit=P4^3;
  13          sbit wire_over_i=P1^2;
  14          xdata unsigned char rbuffer[55],sbuffer[6];
  15          xdata unsigned char     COMM,SLA,FF,GET,POINTER0,SSUM,POINTER1,RSUM,c_t1,s_byte_nums,r_byte_nums,pulse_num,
  16                          err,WIRE,S_ANSW,nonce_sec,work,p_sec,K21,K3,K31,tooth_num,
  17                          temp_pulse_num,pulse_num1,temp_pulse_num1,delt_state,rot_slope_delt,wire_slope_delt,
  18                          r_sample_num,wire_sample_num,temp_rot_num[6];
  19          xdata int       rot_difference,rot_last_difference,rot_last_last_difference,rot_actual_difference,
  20                          rot_P,rot_I,rot_D;
  21          unsigned int    *point,rot_vp,temp_rot_vp,rot_vb,temp_rot_vb,wire_vp,temp_wire_vp,wire_vb,
  22                          temp_wire_vb,n_cm0,c_cm0,n_cm1,c_cm1,FINISH,temp_FINISH,delt_rot,delt_wire,motor_v;
  23          unsigned int    r,rot_num,new_rot_num,wire_pid_num,average_r_num,academic_num;
  24          unsigned long   const1;
  25          float           temp_data0,const0,temp_data00;
  26          bit     send,overtime,start,decrease,urgent_stop,rot_front,rot_reverse,wire_add,
  27                  wire_dec,rot_ok,wire_ok,in_sector,receive_p_out,receive_p_in,demand,need_para,
  28                  rot_stop,rot_stop_ok,called,p_b,new_sector,start_rot,start_wire,stop_wire,r_slope_ok,
  29                  w_slope_ok,retract,return_ok,retract_ok,motor_stop,auto_return,resend,ans,
  30                  to_begin,noans_ok,ask_return_ok,k_r_p_add,k_r_b_add,k_r_p_dec,k_r_b_dec,k22,k33,k44;
  31          bit     kk,rw_err,err_ok,rot_pid_ok,wire_pid_ok;
  32          
  33          void start_t2()
  34          {
  35   1              TM2CON=0x85;    //16位溢出,分频系数2,f/12
  36   1              EA=1;
  37   1              TM2IR=0;
  38   1      }
  39          
  40          void ini_sbuf(unsigned char a,b,c,d,e,f)
  41          {
  42   1              sbuffer[0]=a;
  43   1              sbuffer[1]=b;
  44   1              sbuffer[2]=c;
  45   1              sbuffer[3]=d;
  46   1              sbuffer[4]=e;
  47   1              sbuffer[5]=f;
  48   1      }
  49          
  50          unsigned char get_byte_nums(unsigned char type)
  51          {
  52   1              unsigned char numbers;
  53   1              switch(type)
  54   1              {
  55   2                      case    infor_sec:
C51 COMPILER V7.06   PID                                                                   09/08/2005 15:02:37 PAGE 2   

  56   2                      case    command:
  57   2                      case    program:
  58   2                      case    answer:         numbers=4;
  59   2                                              break;
  60   2                      case    err_infor:
  61   2                      case    parameter1:     numbers=5;
  62   2                                              break;
  63   2                      case    parameter:
  64   2                      case    infor:          numbers=6;
  65   2                                              break;
  66   2                      case    parameter2:     numbers=7;
  67   2                                              break;
  68   2                      case    call_result:    numbers=8;
  69   2                                              break;
  70   2                      case    p_out_sec:      numbers=55;
  71   2                                              break;
  72   2                      case    p_in_sec:       numbers=24;
  73   2                                              break;
  74   2                      case    edit_sec:       numbers=64;
  75   2                                              break;
  76   2                      default:                break;
  77   2              }
  78   1              return numbers;
  79   1      }
  80          
  81          void TR_noans()
  82          {
  83   1              noans_ok=0;
  84   1              POINTER0=0;
  85   1              SSUM=0;
  86   1              send=1;
  87   1              c_t1=0;
  88   1              send_enable=1;                          //开发送使能
  89   1              TR1=1;
  90   1              while(POINTER0<s_byte_nums);
  91   1              TR1=0;
  92   1              send_enable=0;                          //关发送使能
  93   1              noans_ok=1;
  94   1      }
  95          
  96          void delay(unsigned char num)
  97          {
  98   1              unsigned char i,ii;
  99   1              for(i=0;i<num;i++)
 100   1              {
 101   2                      for(ii=0;ii<255;ii++);
 102   2              }
 103   1      }
 104          
 105          void TR_ans()
 106          {
 107   1              ans=1;
 108   1              REN=0;
 109   1              POINTER1=0;
 110   1              RSUM=0;
 111   1              TB8=1;
 112   1              POINTER0=0;
 113   1              SSUM=0;
 114   1              send=1;
 115   1              c_t1=0;
 116   1              send_enable=1;                          //开发送使能
 117   1              TR1=1;
C51 COMPILER V7.06   PID                                                                   09/08/2005 15:02:37 PAGE 3   

 118   1              while(POINTER0<s_byte_nums);
 119   1              TR1=0;
 120   1              send_enable=0;                          //关发送使能
 121   1      
 122   1              REN=1;
 123   1              send=0;
 124   1              c_t1=0;
 125   1      //      TR1=1;
 126   1              while(POINTER1<r_byte_nums&&overtime==0);
 127   1              TR1=0;
 128   1              if(overtime==1)
 129   1              {
 130   2                      err=2;                          //通信出错
 131   2                      overtime=0;
 132   2              }
 133   1              ans=0;
 134   1      }
 135          
 136          void com_type()
 137          {
 138   1              switch(rbuffer[2])
 139   1              {
 140   2                      case com_calling:       called=1;break;
 141   2                      case com_demand:        {
 142   3                                                      if(demand==0)
 143   3                                                              demand=1;
 144   3                                              }break;
 145   2                      case com_need_para:     need_para=1;break;
 146   2                      case com_start:         start=1;break;
 147   2                      case com_rot_front:     {                               //正转
 148   3                                                      if(rot_front==0)
 149   3                                                              rot_front=1;
 150   3                                              }break;
 151   2                      case com_rot_reverse:   {                               //反转
 152   3                                                      if(rot_reverse==0)
 153   3                                                              rot_reverse=1;
 154   3                                              }break;
 155   2                      case com_wire_add:      {                               //送丝
 156   3                                                      if(work==0)
 157   3                                                              wire_add=1;
 158   3                                                      else if(work==3)
 159   3                                                      {
 160   4                                                              if(wire_add==0&&WIRE==ON&&pp.k3==ON)
 161   4                                                                      wire_add=1;
 162   4                                                      }
 163   3                                              }break;
 164   2                      case com_wire_dec:      {                               //抽丝
 165   3                                                      if(work==0)
 166   3                                                              wire_dec=1;
 167   3                                                      else if(work==3)
 168   3                                                      {
 169   4                                                              if(wire_dec==0&&WIRE==ON&&pp.k3==ON)
 170   4                                                                      wire_dec=1;
 171   4                                                      }
 172   3                                              }break;
 173   2                      case com_motor_stop:    {                               //停止点动
 174   3                                                      if(motor_stop==0)
 175   3                                                              motor_stop=1;
 176   3                                              }break;
 177   2                      case com_pre_melt_ok:   start_rot=1;break;
 178   2                      case com_decrease:      decrease=1;break;
 179   2                      case com_decrease_ok:   rot_stop=1;break;
C51 COMPILER V7.06   PID                                                                   09/08/2005 15:02:37 PAGE 4   

 180   2                      case com_wire:          start_wire=1;break;
 181   2                      case com_stopW:         stop_wire=1;break;
 182   2                      case com_return:        auto_return=1;break;
 183   2                      case com_return_ok:     return_ok=1;break;
 184   2                      case com_goto_begin:    to_begin=1;break;
 185   2                      case com_err_ok:        err_ok=1;break;
 186   2                      default:                 break;
 187   2              }
 188   1      }
 189          
 190          void data_type()                                                //对接收到的数据分辨类型
 191          {
 192   1                      switch(rbuffer[1])
 193   1                      {
 194   2                              case command:   com_type();break;
 195   2                              case infor:     {
 196   3                                                      switch(rbuffer[2])
 197   3                                                      {
 198   4                                                              case com_sector:        {
 199   5                                                                                              nonce_sec=rbuffer[3];
 200   5                                                                                              in_sector=1;
 201   5                                                                                              new_sector=1;
 202   5                                                                                      }break;
 203   4                                                              case com_wire_on_off:   WIRE=rbuffer[3];break;//送丝开关
 204   4                                                              case com_delt_switch:   delt_state=rbuffer[3];break;
 205   4                                                              default:                break;
 206   4                                                      }
 207   3                                              }break;
 208   2                              case p_out_sec: receive_p_out=1;break;
 209   2                              case p_in_sec:  {
 210   3                                                      nonce_sec=rbuffer[2];
 211   3                                                      receive_p_in=1;
 212   3                                              }break;
 213   2                              case parameter1:FINISH=rbuffer[2]*256+rbuffer[3];break;
 214   2                              default:        break;
 215   2                      }
 216   1      }
 217          
 218          void get_v_r()
 219          {
 220   1              switch(pp.rn/256)
 221   1              {
 222   2                      case 1: {
 223   3                                      motor_v=6600;

⌨️ 快捷键说明

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