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

📄 driver0425.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 955   1              EA=1;                                   //中断总允许
 956   1              start_t2();
 957   1      
 958   1              P1_5=0;                                 //关发送使能
 959   1              PWMP=20;                                //弧长脉冲,1K
 960   1              PWM0=0;
 961   1              PWM1=0;
 962   1      
 963   1      BEGIN:  CTCON=0X00;
 964   1              IEN1=0x00;
 965   1              P4_1=0;                                 //out1、out2门控信号
 966   1              P4_2=1;                                 //关横摆使能
 967   1              P4_3=1;                                         //横摆方向,左
 968   1              P4_6=1;                                         //横摆使能输出
 969   1              P4_5=1;                                         //弧长方向
 970   1              P4_4=1;
 971   1              work=0;
 972   1              start=0;
 973   1              called=0;
 974   1              ergent_stop=0;
 975   1              need_para=0;
 976   1              pgj=0;
 977   1              POINTER0=0;
 978   1              SSUM=0;
 979   1              S_ANSW=0;
 980   1              POINTER1=0;
 981   1              RSUM=0;
 982   1              ans=0;
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 17  

 983   1      //      R_ANSW=0;
 984   1              send=0;
 985   1              resend=0;
 986   1              byte_nums=4;
 987   1              AD1=0;
 988   1              AD2=0;
 989   1              AD3=0;
 990   1              AD4=0;
 991   1              AD5=0;
 992   1              U51=0;
 993   1              c_sample=0;
 994   1              ad_finish=1;                                    //AD转换及处理完成标志
 995   1              pulse_base=1;                                   //峰、基值标志 0-基值、1-峰值
 996   1              sector=0;
 997   1              stop_osc=0;                                     //进入区间标志
 998   1              in_sector=0;                                            //关弧长使能                                            //8574门控信号
 999   1              motor_stop=0;
1000   1              osc=0;
1001   1              osc_l=0;
1002   1              osc_r=0;
1003   1              osc_ok=0;                                       //启动横摆标志
1004   1              osc_change=0;
1005   1              judge_ok=0;
1006   1              new_circle=1;
1007   1              sample_avc=0;                                   //采样or弧长标志0-采样 1-弧长
1008   1              start_avc=0;
1009   1              avc=0;
1010   1              avc_up=0;
1011   1              avc_down=0;
1012   1              avc_ok=0;
1013   1              stop_avc=0;                                     //启动弧长标志
1014   1              c_avc=0;                                        //弧长脉冲计数
1015   1              c_t0=0;
1016   1              c_t42=0;
1017   1              center_excursion=0;                             //横摆中心偏移标志(DC41)
1018   1              first_center=1;
1019   1              start_osc=0;
1020   1              osc_add=0;                                      //摆宽增加次数
1021   1              osc_dec=0;                                      //摆宽减小次数
1022   1              osc_adjudge=0;
1023   1              last_out1=0;
1024   1              t_edge=1;                                       //0-左边缘 1-右边缘
1025   1              decrease=0;
1026   1              decreased=0;                                    //衰减标志
1027   1              decrease_ok=0;
1028   1              temp_c=0;
1029   1              share=0;
1030   1              lift=0;
1031   1              c_lift=0;
1032   1              lift_complete=0;
1033   1              ask_lift_ok=0;
1034   1              lift_ok=0;
1035   1              demand=0;
1036   1              to_begin=0;
1037   1              edge_start=0;
1038   1              receive_p_out=0;
1039   1              receive_p_in=0;
1040   1      
1041   1      //      cross_type();                                   //检测十字滑架型号
1042   1      
1043   1              COM=0X36;
1044   1              COUNT0=0XA0;
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 18  

1045   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
1046   1      
1047   1              CML0=TML2+0X20;
1048   1              if(CML0<TML2)
1049   1                      CMH0=TMH2+1+0X4E;
1050   1              else
1051   1                      CMH0=TMH2+0X4E;                         //20ms
1052   1      
1053   1              while(start==0)                                 //等待过程中,接受点名和参数
1054   1              {
1055   2                      if(called==1)
1056   2                      {
1057   3                              ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
1058   3                              byte_nums=get_byte_nums(infor);
1059   3                              TR_noans();
1060   3                              called=0;
1061   3                      }
1062   2      
1063   2                      if(receive_p_out==1)
1064   2                      {
1065   3                              point=&pp.k4;
1066   3                              for(p_sec=0;p_sec<25;p_sec++)
1067   3                                      *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
1068   3                              pp.t17=rbuffer[52]*256+rbuffer[53];
1069   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
1070   3                              byte_nums=4;
1071   3                              TR_noans();
1072   3                              demand=0;
1073   3                              receive_p_out=0;
1074   3                      }
1075   2      
1076   2                      if(receive_p_in==1)
1077   2                      {
1078   3                              point=&pp.x[nonce_sec][0];
1079   3                              for(p_sec=0;p_sec<10;p_sec++)
1080   3                                      *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
1081   3      
1082   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
1083   3                              byte_nums=4;
1084   3                              TR_noans();
1085   3                              demand=0;
1086   3                              receive_p_in=0;
1087   3                      }
1088   2      
1089   2                      if(osc_l==1)
1090   2                      {
1091   3                              P4_1=1;                 //开8254门控信号
1092   3                              P4_3=1;                 //左
1093   3                              P4_2=0;                 //使能
1094   3                              osc_l=0;
1095   3                      }
1096   2                      if(osc_r==1)
1097   2                      {
1098   3                              P4_1=1;                 //开8254门控信号
1099   3                              P4_3=0;                 //右
1100   3                              P4_2=0;                 //使能
1101   3                              osc_r=0;
1102   3                      }
1103   2                      if(avc_up==1)
1104   2                      {
1105   3                              PWM0=127;
1106   3                              P4_5=1;         //方向——上
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 19  

1107   3                              P4_4=0;         //使能
1108   3                              avc_up=0;
1109   3                      }
1110   2                      if(avc_down==1)
1111   2                      {
1112   3                              PWM0=127;
1113   3                              P4_5=0;         //方向——下
1114   3                              P4_4=0;
1115   3                              avc_down=0;
1116   3                      }
1117   2                      if(motor_stop==1)
1118   2                      {
1119   3                              P4_1=0;                 //关8254门控信号
1120   3                              P4_2=1;                 //关横摆使能
1121   3                              PWM0=0;
1122   3                              P4_4=1;                 //关弧长使能
1123   3                              motor_stop=0;
1124   3                      }
1125   2                      if(ergent_stop==1)
1126   2                              goto BEGIN;
1127   2              }
1128   1      
1129   1              const0=pp.a41*60+pp.v41*(pp.t42_l+pp.t42_r)/2;
1130   1              const1=(unsigned long)(pp.v41)*(unsigned long)(pp.t17);
1131   1              out0=2400000/pp.v41;                            //横摆脉冲, 时钟4M,4*60*0.01*1000000
1132   1              out1=10*pp.a41;                                 //横摆半宽脉冲,时钟1K,(A41/10)/(v41/60)*1000
1133   1              out2=2*out1;                                    //横摆整宽脉冲
1134   1      
1135   1              c_t42_l=pp.t42_l*5;                             //pp.t42_l/10*1000/50
1136   1              c_t42_r=pp.t42_r*5;
1137   1              get_vc();
1138   1              if(pp.k5==ON)
1139   1                      get_SENS();
1140   1              else
1141   1                      SENS=5;
1142   1      
1143   1              work=3;                                         //关8254门控信号
1144   1              if(pp.k1==DC)
1145   1              {
1146   2                      pp.avc_type=SP;
1147   2                      pulse_base=1;
1148   2              }
1149   1              COM=0X36;
1150   1              COUNT0=out0%256;
1151   1              COUNT0=out0/256;
1152   1              COM=0X76;
1153   1              COUNT1=out1%256;
1154   1              COUNT1=out1/256;                                //半个摆宽
1155   1              COM=0XB6;
1156   1              COUNT2=out1%256;
1157   1              COUNT2=out1/256;                                //整个摆宽
1158   1              do
1159   1              {
1160   2                      if(start_avc==1)                        //开始弧长
1161   2                      {
1162   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
1163   3                              byte_nums=4;
1164   3                              TR_noans();
1165   3      
1166   3                              c_sample=0;
1167   3                              CTCON=CTCON&0X3F;
1168   3                              if(pp.k1==PDC)
C51 COMPILER V7.06   DRIVER0425                                                            06/03/2005 15:08:33 PAGE 20  

1169   3                              {
1170   4                                      if(pp.avc_type==SP||pp.avc_type==SPB)
1171   4                                      {
1172   5                                              pulse_base=0;
1173   5                                              CTCON=CTCON|0X40;       //CT3上升沿
1174   5                                      }
1175   4                                      else
1176   4                                      {
1177   5                                              pulse_base=1;
1178   5                                              CTCON=CTCON|0X80;       //CT3下降沿
1179   5                                      }
1180   4                                      IEN1=IEN1|0X08;                 //允许CT3
1181   4                              }
1182   3                              if(pp.k1==DC)
1183   3                              {
1184   4                                      avc_ok=1;
1185   4                                      PWMP=12;                //23-1k  12-2k
1186   4                                      PWM0=0;
1187   4                                      PWM1=127;
1188   4                                      CTCON=CTCON|0x20;       //CT2下降沿
1189   4                                      IEN1=IEN1|0X04;         //允许CT2,采样保持脉冲
1190   4                              }
1191   3      
1192 

⌨️ 快捷键说明

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