📄 main.lst
字号:
173 2 bflag1_0=!DIP_6; //选择波特率
174 2 bflag1_1=!DIP_5;
175 2 x=bflag1;
176 2 bflag1_0=!DIP_6; //选择波特率
177 2 bflag1_1=!DIP_5;
178 2 }while(bflag1!=x);
179 1
C51 COMPILER V7.50 MAIN 11/03/2008 11:24:32 PAGE 4
180 1
181 1
182 1 /*------------------------------------------------------------------调试用 */
183 1
184 1 bflag1=x; //正式有上面的,没有此项
185 1
186 1 /*------------------------------------------------------------------调试用 */
187 1
188 1
189 1 switch(bflag1) //与说明手册上控制位一致
190 1 {
191 2 case 0:
192 2 baud_2400();
193 2 break;
194 2 case 2:
195 2 baud_4800();
196 2 break;
197 2 case 1:
198 2 baud_9600();
199 2 break;
200 2 case 3:
201 2 baud_19200();
202 2 break;
203 2 }
204 1
205 1
206 1 }
207 void IdSelect() //球机ID选择子程序
208 {
209 1 unsigned char x;
210 1 P0_7=1; // 先给1 按从左到右的BCD方式
211 1 P1_7=1;
212 1 P1_6=1;
213 1 P1_5=1;
214 1 P1_4=1;
215 1 P1_3=1;
216 1 P1_2=1;
217 1 P1_1=1;
218 1 do
219 1 {
220 2
221 2 id_0=!P0_7; //10位拨码开关的右8 位按BCD排列
222 2 id_1=!P1_7;
223 2 id_2=!P1_6; //可选择256位
224 2 id_3=!P1_5;
225 2 id_4=!P1_4; //P0-6 P1-0两位可作它用 ,如果有相机选择可减少ID位数
226 2 id_5=!P1_3;
227 2 id_6=!P1_2;
228 2 id_7=!P1_1;
229 2 x=id;
230 2 id_0=!P0_7; //10位拨码开关的右8 位按BCD排列
231 2 id_1=!P1_7;
232 2 id_2=!P1_6; //可选择256位
233 2 id_3=!P1_5;
234 2 id_4=!P1_4; //P0-6 P1-0两位可作它用 ,如果有相机选择可减少ID位数
235 2 id_5=!P1_3;
236 2 id_6=!P1_2;
237 2 id_7=!P1_1;
238 2 }while(id!=x);
239 1
240 1
241 1
C51 COMPILER V7.50 MAIN 11/03/2008 11:24:32 PAGE 5
242 1 /*------------------------------------------------------------------调试用 */
243 1 //SBUF=x;
244 1 id=x; // 正式有上面的,没有此项
245 1
246 1 /*------------------------------------------------------------------调试用 */
247 1
248 1 }
249 void LeftRight_out(char x) //左右方向的位输出
250
251 {
252 1 bflag=x; //水平方向电机输出
253 1 P2_3=bflag_3;
254 1 P2_2=bflag_2;
255 1 P2_1=bflag_1;
256 1 P2_0=bflag_0;
257 1 }
258 void UpDown_out(char x) //上下方向的位输出
259
260 {
261 1 bflag=x; //竖直方向电机输出
262 1 P2_7=bflag_0;
263 1 P2_6=bflag_1;
264 1 P2_5=bflag_2;
265 1 P2_4=bflag_3;
266 1 }
267
268 /*----------------------------------------------------------------------------
269 水平方向电机用T0来控制
270 竖直方向用T1来控制
271 波特用T2来控制
272 ------------------------------------------------------------------------------*/
273
274 void T0_load()
275 { //水平方向
276 1 int x;
277 1 x=T0_interval;
278 1 TH0=(char)(x>>8); //复位时的时间常数
279 1 TL0=(char)x;
280 1 }
281 void T1_load()
282 {
283 1 int x;
284 1 x=T1_interval; //竖直方向
285 1 TH1=(char)(x>>8); //复位时的时间常数
286 1 TL1=(char)x;
287 1 }
288
289 void AutoTest(void) //自检程序,加电前拨第9位开关于“on”位
290 {
291 1 while(!P1_0) //自检过程中拨回“off“位进入正常运行
292 1 {
293 2 WDT_CONTR=0xff; //0xff; 启动看门狗看门狗清零
294 2 if(!cDirectHorizon)
295 2 cDirectHorizon=1;
296 2 cAutoScan=1;
297 2 T0_start();
298 2 if(!cDirectVertical)
299 2 cDirectVertical=1 ;
300 2 cAutoTestVertical=1 ;
301 2 T1_start();
302 2 }
303 1
C51 COMPILER V7.50 MAIN 11/03/2008 11:24:32 PAGE 6
304 1 cAutoScan=0;
305 1 cAutoTestVertical=0;
306 1 T1_stop();
307 1 T0_stop();
308 1 CameraStop();
309 1 /*---------------------------
310 1 因为串口数据易丢失所以在执行串口的程序前不能加别的程序,可能引起数据丢失
311 1 所以自检程序放在起始段了
312 1 ---------------------------*/
313 1
314 1 }
315 void main()
316 {
317 1
318 1
319 1 unsigned int x;
320 1 unsigned long y;
321 1 ERRor:
322 1 WDT_cls();
323 1 GlobalSet();
324 1 INT_disable();
325 1 T0_stop();
326 1 T1_stop();
327 1 T2_stop();
328 1 port_init();
329 1 INT_set();
330 1 timer_set();
331 1 SCI_set();
332 1 T0_load();
333 1 T1_load();
334 1 T2_start();
335 1 INT_enable();
336 1 BaudSelect(); //波特选择 程序波特及ID可随时选
337 1 IdSelect(); //ID选择
338 1
339 1 pKeyCode=sKeyCode; //接收码清零程序
340 1 for(x=0;x<20;x++) //预设20个字符
341 1 {
342 2 *pKeyCode =0;
343 2
344 2 ++pKeyCode ;
345 2
346 2 }
347 1 pKeyCode=sKeyCode; //重新指向代码
348 1
349 1 cProtocal= ProtocalSelect();
350 1
351 1 /*----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -