📄 driver0425.lst
字号:
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 + -