📄 finish.lst
字号:
298 {
299 1 uchar i;
300 1
301 1 uchar count = 0; //计算脉冲宽度是否满足条件
302 1
303 1 for (i=0; i<10; i++)
C51 COMPILER V7.06 FINISH 06/18/2005 14:53:21 PAGE 6
304 1 {
305 2 if (p11 == 0)
306 2 {
307 3 count++;
308 3
309 3 SomeNOP(70);
310 3 }
311 2 }
312 1
313 1 if (count>4)
314 1 {
315 2 return 1;
316 2 }
317 1 else return 0;
318 1 }
319
320 /*============================================================================
321 主函数
322 ==============================================================================*/
323 void main(void)
324 {
325 1 InitialLED(); //将数码管全部熄灭
326 1
327 1 TMOD = 0X51; //定时器的工作方式
328 1
329 1 ET0 = 1; //开定时器0
330 1
331 1 TR0 = 1;
332 1
333 1 ET1 = 1; //开定时器1
334 1
335 1 TR1 = 1;
336 1
337 1 TH1 = 0XFF; //计数器1的计数初值
338 1
339 1 TL1 = 0XFF;
340 1
341 1 TH0 = 0X3C; //计数器0的计数初值
342 1
343 1 TL0 = 0XB0;
344 1
345 1 EX0 = 1; //外部中断0打开
346 1
347 1 IT0 = 1; //外部中断0采用下降沿触发方式
348 1
349 1 EX1 = 1; //外部中断1打开
350 1
351 1 IT1 = 1; //外部中断1采用下降沿触发方式
352 1
353 1 PX1 = 1; //外部中断1的优先级最高
354 1
355 1 EA = 1; //总中断打开
356 1
357 1 while (g_PulseCount < 3) //到达缓冲区前快速前进
358 1 {
359 2 FastForward();
360 2 }
361 1
362 1 SlowForward(); //到了缓冲区慢速前进
363 1
364 1 while (g_PulseCount < 6) //出了缓冲区快速前进
365 1 {
C51 COMPILER V7.06 FINISH 06/18/2005 14:53:21 PAGE 7
366 2 FastForward();
367 2 }
368 1
369 1 while (g_Time010sFLAG != 10) //到了终点停留10秒
370 1 {
371 2 Stop();
372 2
373 2 if (g_PulseCount > 6)
374 2 {
375 3 break;
376 3 }
377 2 }
378 1
379 1 while (g_PulseCount < 9) //到达缓冲区前快速后退
380 1 {
381 2 FastReverse();
382 2 }
383 1
384 1 SlowReverse(); //到达缓冲区慢速后退
385 1
386 1 while (g_PulseCount < 12)
387 1 {
388 2 FastReverse();
389 2 }
390 1
391 1 Stop(); //到起跑线处停止
392 1
393 1 ET0 = 0;
394 1
395 1
396 1 while (1)
397 1 {
398 2 ;
399 2 }
400 1 }
401
402 /**************************************************************************
403 函 数 名:Extern0Interrupt()
404 调用函数:无
405 参 数:无
406 返 回 值:无
407 函数功能:外部中断0
408 ***************************************************************************/
409
410 void Extern0Interrupt(void) interrupt 0
411 {
412 1 EX0 = 0;
413 1
414 1 EA = 0;
415 1
416 1 if (DetectPort1()) //如果脉冲宽度满足要求
417 1 {
418 2 g_TirePulseCount++;
419 2 }
420 1 // Show(g_TirePulseCount, 4); //显示脉冲个数,最后将去掉这句
421 1
422 1 EX0 = 1;
423 1
424 1 EA = 1;
425 1
426 1
427 1 }
C51 COMPILER V7.06 FINISH 06/18/2005 14:53:21 PAGE 8
428
429 /**************************************************************************
430 函 数 名:Time0Interrupt()
431 调用函数:无
432 参 数:无
433 返 回 值:无
434 函数功能:定时中断0
435 ***************************************************************************/
436
437 void Time0Inerrupt(void) interrupt 1
438 {
439 1 static uchar count; //用于记数
440 1
441 1 uchar low_second; //秒的低位
442 1
443 1 uchar high_second; //秒的高位
444 1
445 1 uchar minute; //分
446 1
447 1 ET0 = 0;
448 1
449 1 EA = 0;
450 1
451 1 count++;
452 1
453 1 if (count == 10)
454 1 {
455 2 *HC574_2 = 0XF6; //半秒钟时显示两点
456 2 }
457 1
458 1 if (count == 20) //到一秒时
459 1
460 1 {
461 2 count = 0;
462 2
463 2 low_second++;
464 2
465 2 if (g_PulseCount == 3 | g_PulseCount == 9) //如果到了缓冲区8秒定时器就开始计时
466 2 {
467 3 g_Time08sFLAG++;
468 3 }
469 2
470 2 if (g_PulseCount == 4 | g_PulseCount == 10) //如果出了缓冲区就停止计时并将计数器标志清零
471 2 {
472 3 g_Time08sFLAG = 0;
473 3 }
474 2
475 2 if (g_PulseCount == 6) //如果到了终点线则10秒计时器开始计时
476 2 {
477 3 g_Time010sFLAG++;
478 3 }
479 2
480 2 if (low_second == 10) //秒低位满十
481 2 {
482 3 low_second = 0;
483 3
484 3 high_second++;
485 3
486 3 if (high_second == 6) //秒高位满六
487 3 {
488 4 high_second = 0;
489 4
C51 COMPILER V7.06 FINISH 06/18/2005 14:53:21 PAGE 9
490 4 minute++;
491 4
492 4 if (minute == 10) //计满十分钟
493 4 {
494 5 minute = 0;
495 5 }/*if*/
496 4 }/*if*/
497 3 }/*if*/
498 2
499 2 Show(low_second, 0); //显示秒低位
500 2
501 2 Show(high_second, 1); //显示秒高位
502 2
503 2 Show(minute, 3); //显示分
504 2
505 2 *HC574_2 = 0XFF; //将半秒送出的两点清除
506 2
507 2 }/*if*/
508 1
509 1 TH0 = 0x3c; //初值重载
510 1 TL0 = 0xb0; //初值重载
511 1
512 1 ET0 = 1;
513 1
514 1 EA = 1;
515 1 }/*Time0Interrupt()*/
516
517 /**************************************************************************
518 函 数 名:Extern1Interrupt()
519 调用函数:无
520 参 数:无
521 返 回 值:无
522 函数功能:外部中断1
523 ***************************************************************************/
524
525 void Extern1Interrupt(void) interrupt 2
526 {
527 1 EX1 = 0;
528 1
529 1 EA = 0;
530 1
531 1 p12 = 0; //检测到挡板就转向
532 1
533 1 p13 = 1;
534 1
535 1 g_Time010sFLAG++;
536 1
537 1 Show(g_Time010sFLAG, 7);
538 1
539 1 SomeNOP(5000);
540 1
541 1 p12 = 1;
542 1
543 1 p13 = 1;
544 1
545 1 EX1 = 1;
546 1
547 1 EA = 1;
548 1 }
549
550 /**************************************************************************
551 函 数 名:Time1Interrupt()
C51 COMPILER V7.06 FINISH 06/18/2005 14:53:21 PAGE 10
552 调用函数:无
553 参 数:无
554 返 回 值:无
555 函数功能:计数中断1
556 ***************************************************************************/
557
558 void Time1Interrupt(void) interrupt 3
559 {
560 1 ET1 = 0;
561 1
562 1 EA = 0;
563 1
564 1 if (DetectPort0()) //如果脉冲宽度满足要求
565 1 {
566 2 g_PulseCount++; //脉冲个数加一
567 2 }
568 1
569 1 // Show(g_PulseCount, 4); //显示脉冲个数
570 1
571 1 TH1 = 0XFF; //初值重载
572 1
573 1 TL1 = 0XFF; //初值重载
574 1
575 1 ET1 = 1;
576 1
577 1 EA = 1;
578 1 }
579
580
581
582
583
584
585
586
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1059 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 54
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -