📄 main.lst
字号:
233 1 CLUTHCTL = 1;
234 1 MODESIG = 0; //用于模式控制的信号输入
235 1 for(index = 0;index<BUFFER_LENGTH;index++)
236 1 { //初始化串行口缓冲区
237 2 RcvBUF[index] = 0;
238 2 TrxBUF[index] = 0;
239 2 }
240 1 }
241
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 5
242 //***********************************************************************
243 //电机、离合器状态初始化函数
244 //State : FR ** ** ** ** ** MR ML
245 void System_SetMoto(void)
246 {
247 1 uchar Temp = CurConfig.MotoState;
248 1 if(Temp&MOTO_MOVL) //如果ML=1,离合器1吸合
249 1 {
250 2 EA = 0;
251 2 CLUTH = 0; //离合器1吸合
252 2 CLUTHCTL = 0; //打开离合器屏蔽端口
253 2 EA = 1;
254 2 }
255 1 else if(Temp&MOTO_MOVR) //如果MR=1,离合器2吸合
256 1 {
257 2 EA = 0;
258 2 CLUTH = 1; //离合器2吸合
259 2 CLUTHCTL = 0; //打开离合器屏蔽端口
260 2 EA = 1;
261 2 }
262 1 else
263 1 {
264 2 ////添加系统出错代码
265 2 }
266 1 }
267
268
269 //***********************************************************************
270 //系统电机运行函数
271 void System_MotoRun(uint time)
272 {
273 1 uchar Temp = CurConfig.MotoState;
274 1 if(Temp&MOTO_MOVL) //如果ML=1,电机1吸合
275 1 {
276 2 EA = 0;
277 2 MOTO = 0; //电机1吸合
278 2 MOTOCTL = 0; //打开电机屏蔽端口
279 2 LEDL = 0;
280 2 EA = 1;
281 2 if(time == 0)
282 2 return ; //时间为零则一直走纸
283 2 else
284 2 Delay_nms(time);//延时100ms
285 2 EA = 0;
286 2 MOTOCTL = 1; //关闭电机屏蔽端口
287 2 LEDL = 1;
288 2 EA = 1;
289 2 }
290 1 else if(Temp&MOTO_MOVR) //如果MR=1,电机2吸合
291 1 {
292 2 EA = 0;
293 2 MOTO = 1; //电机2吸合
294 2 MOTOCTL = 0; //打开电机屏蔽端口
295 2 LEDR = 0;
296 2 EA = 1;
297 2 if(time == 0)
298 2 return ; //时间为零则一直走纸
299 2 else
300 2 Delay_nms(time);//延时100ms
301 2 EA = 0;
302 2 MOTOCTL = 1; //关闭电机屏蔽端口
303 2 LEDR = 1;
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 6
304 2 EA = 1;
305 2 }
306 1 else
307 1 {
308 2 //添加系统出错代码
309 2 }
310 1 }
311
312 //***********************************************************************
313 //系统电机停止函数
314 void System_MotoStop(void)
315 {
316 1 EA = 0;
317 1 MOTOCTL = 1; //关闭电机屏蔽端口
318 1 LEDL = 1;
319 1 LEDR = 1;
320 1 EA = 1;
321 1 }
322
323 //***********************************************************************
324 //电机、离合器状态切换函数
325 //State : FR ** ** ** ** ** MR ML
326 void System_ExchangeMoto(void)
327 {
328 1 uchar Temp = CurConfig.MotoState;
329 1 if(Temp&MOTO_MOVL) //如果ML=1,电机2吸合
330 1 {
331 2 EA = 0;
332 2 CLUTH = 1; //离合器2吸合
333 2 CLUTHCTL = 0; //打开离合器屏蔽端口
334 2 EA = 1;
335 2
336 2 Temp = MOTO_MOVR; //更新电机状态
337 2 }
338 1 else if(Temp&MOTO_MOVR) //如果MR=1,电机1吸合
339 1 {
340 2 EA = 0;
341 2 CLUTH = 0; //离合器1吸合
342 2 CLUTHCTL = 0; //打开离合器屏蔽端口
343 2 EA = 1;
344 2
345 2 Temp = MOTO_MOVL; //更新电机状态
346 2 }
347 1 else
348 1 {
349 2 //添加系统出错代码
350 2 }
351 1
352 1 CurConfig.MotoState = Temp;
353 1 }
354
355 //***********************************************************************
356 //系统反馈当前信息函数,包括:走纸到位信息,射击有效信息,系统初始化成功信息。
357 //
358 void System_SendCommand(uint comid)
359 {
360 1 uchar check = 0,index;
361 1
362 1 TrxBUF[0] = UART_MESGFLAG; //起始字节
363 1
364 1 TrxBUF[2] = (uchar)(comid&0xFF); //指令码2
365 1
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 7
366 1 TrxBUF[1] = (uchar)((comid>>8)&0xFF); //指令码1
367 1
368 1 TrxBUF[3] = 0x00; //数据码1
369 1
370 1 switch(comid)
371 1 {
372 2 case MOTO_CFGRFB : //如果是电机配置信息读取数据
373 2
374 2 TrxBUF[4] = CurConfig.MotoRunCycle;
375 2
376 2 break;
377 2
378 2 case IRLED_CFGRFB : //如果是红外灯配置信息读取数据
379 2
380 2 TrxBUF[4] = CurConfig.IRLEDLight;
381 2
382 2 break;
383 2
384 2 case MOTO_STATERFB ://如果是电机状态信息读取数据
385 2
386 2 TrxBUF[4] = CurConfig.MotoState;
387 2
388 2 break;
389 2
390 2 default : //其他为0x00
391 2
392 2 TrxBUF[4] = 0x00;
393 2
394 2 break;
395 2 }
396 1
397 1 for(index = 0;index<BUFFER_LENGTH-1;index++)
398 1
399 1 check += TrxBUF[index];
400 1
401 1 TrxBUF[BUFFER_LENGTH-1] = check;
402 1
403 1 UART_SendStr(TrxBUF,BUFFER_LENGTH);
404 1 }
405
406 //***********************************************************************
407 //系统解析当前信息函数
408 void System_ParseCommand(void)
409 {
410 1 uint comid;
411 1 uchar temp;
412 1
413 1 comid = (uint)RcvBUF[2];
414 1 comid += (((uint)RcvBUF[1])<<8);
415 1
416 1 switch(comid)
417 1 {
418 2 case MOTO_RUN : //如果是电机运行
419 2
420 2 System_MotoRun((uint)CurConfig.MotoRunCycle);
421 2
422 2 System_SendCommand(MOTO_STOP);
423 2
424 2 break;
425 2
426 2 case MOTO_STATER : //如果是读取电机当前状态
427 2
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 8
428 2 System_SendCommand(MOTO_STATERFB);
429 2
430 2 break;
431 2
432 2 case MOTO_CFGR : //读取电机单步运行时间
433 2
434 2 System_SendCommand(MOTO_CFGRFB);
435 2
436 2 break;
437 2
438 2 case IRLED_CFGR : //如果是读取红外灯亮度
439 2
440 2 System_SendCommand(IRLED_CFGRFB);
441 2
442 2 break;
443 2
444 2 case IRLED_ON : //如果是红外灯打开控制码
445 2
446 2 LEDCTL1 = 0;
447 2
448 2 break;
449 2
450 2 case IRLED_OFF : //如果是红外灯关闭控制码
451 2
452 2 LEDCTL1 = 1;
453 2
454 2 break;
455 2
456 2 case NVM_RESET : //如果是EEPROM复位控制码
457 2
458 2 CurConfig.MotoState = DEFAULT_MOTOSTATE; //初始化电机状态
459 2
460 2 CurConfig.MotoRunCycle = DEFAULT_MOTOCYCLE; //电机缺省单步运行时间100ms
461 2
462 2 CurConfig.IRLEDLight = DEFAULT_IRLEDLIGHT; //红外灯缺省亮度
463 2
464 2 NVM_WriteStr(NVM_CONTROL,NVM_MOTOSTATE_ADDR,(uchar *)(&CurConfig),3);
465 2
466 2 System_SetMoto();
467 2
468 2 break;
469 2
470 2 case MOTO_CFGM : //如果是修改电机单步执行时间
471 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -