📄 main.lst
字号:
472 2 temp = RcvBUF[4];
473 2
474 2 CurConfig.MotoRunCycle = temp;
475 2
476 2 NVM_WriteB(NVM_CONTROL,NVM_MOTOCYCLE_ADDR,temp);
477 2
478 2 break;
479 2
480 2 case IRLED_CFGM : //如果是修改红外灯亮度
481 2
482 2 temp = RcvBUF[4];
483 2
484 2 CurConfig.IRLEDLight = temp;
485 2
486 2 NVM_WriteB(NVM_CONTROL,NVM_IRLEDLIGHT_ADDR,temp);
487 2
488 2 break;
489 2 case MOTO_RUNALLTIME : //如果是电机一直运行指令
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 9
490 2
491 2 System_MotoRun(0);
492 2
493 2 break;
494 2
495 2 case MOTO_STOPALLTIME : //如果是电机强制停止指令
496 2
497 2 System_MotoStop();
498 2
499 2 break;
500 2
501 2 case MOTO_ALTERSTATE : //如果是电机状态指令
502 2
503 2 POSFlag = 1;
504 2
505 2 break;
506 2
507 2 default :
508 2
509 2 break;
510 2 }
511 1 }
512
513 //***********************************************************************
514 //串行口发送一个字符串函数
515 //参数说明:str -- 待发送的字符串首地址
516 // len -- 待发送的字符串长度,最大为250
517 bit UART_SendStr(uchar *str,uchar len)
518 {
519 1 uchar index;
520 1 if( len>BUFFER_LENGTH ) return(0); //如果数据长度大于缓冲区长度
521 1 UARTCTRL = 1; //SN75176处于发送状态
522 1 Delay_nms(1); //延时,提高可靠性
523 1 ES = 0; //关闭串口中断
524 1 for(index = 0;index<len;index++)
525 1 {
526 2 SBUF = *(str+index);
527 2 while(TI == 0);
528 2 TI = 0;
529 2 }
530 1 ES = 1; //打开串口中断
531 1 Delay_nms(1); //延时,提高可靠性
532 1 UARTCTRL = 0; //重置75176于接收状态
533 1 }
534
535 //***********************************************************************
536 //nms定时子程序
537 void Delay_nms(uint n)
538 {
539 1 uchar i;
540 1 while(n--)
541 1 {
542 2 for(i=0;i<99;i++) {;}
543 2 }
544 1 }
545
546 /*******************************中断服务程序****************************/
547
548 //***********************************************************************
549 //外部中断0服务子程序
550 void XINT0(void) interrupt 0 using 2
551 {
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 10
552 1 POS_TimeOut = 1; //标识位置抗干扰侦测
553 1 TH0 = 0x00; //定时中断
554 1 T1Counter = 0;
555 1 EX0 = 0;
556 1 TR1 = 1;
557 1 }
558
559 //***********************************************************************
560 //定时器0中断服务子程序,触发时间为278微秒
561 void Timer0(void) interrupt 1 using 1
562 {
563 1 bit Sample;
564 1
565 1 TL0 = 0x00;
566 1 T0Counter++;
567 1 if(T0Counter == 4) //每1.1ms
568 1 {
569 2 if(T0Flag1 == 0)
570 2 {
571 3 Sample = MANUALR;
572 3 if(Sample == 0)
573 3 {
574 4 T0Counter1++;
575 4 if(T0Counter1>27)
576 4 {
577 5 T0Flag1 = 1;
578 5 T0Counter1 = 0;
579 5 }
580 4 }
581 3 else T0Counter1 = 0;
582 3 }
583 2
584 2 if(T0Flag1 == 2)
585 2 {
586 3 Sample = MANUALR;
587 3 if(Sample == 1)
588 3 {
589 4 T0Counter1++;
590 4 if(T0Counter1>27)
591 4 {
592 5 T0Flag1 = 3;
593 5 T0Counter1 = 0;
594 5 }
595 4 }
596 3 else T0Counter1 = 0;
597 3 }
598 2
599 2 if(T0Flag2 == 0)
600 2 {
601 3 Sample = MANUALL;
602 3 if(Sample == 0)
603 3 {
604 4 T0Counter2++;
605 4 if(T0Counter2>27)
606 4 {
607 5 T0Flag2 = 1;
608 5 T0Counter2 = 0;
609 5 }
610 4 }
611 3 else T0Counter2 = 0;
612 3 }
613 2
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 11
614 2 if(T0Flag2 == 2)
615 2 {
616 3 Sample = MANUALL;
617 3 if(Sample == 1)
618 3 {
619 4 T0Counter2++;
620 4 if(T0Counter2>27)
621 4 {
622 5 T0Flag2 = 3;
623 5 T0Counter2 = 0;
624 5 }
625 4 }
626 3 else T0Counter2 = 0;
627 3 }
628 2
629 2 T0Counter = 0;
630 2 }
631 1 }
632
633 //***********************************************************************
634 //外部中断1服务子程序
635 void XINT1(void) interrupt 2 using 2
636 {
637 1 SIG_TimeOut = 1; //标识位置抗干扰侦测
638 1 TH0 = 0x00; //定时中断
639 1 T1Counter = 0;
640 1 EX1 = 0;
641 1 TR1 = 1;
642 1 }
643
644 //***********************************************************************
645 //定时器1中断服务子程序,触发时间为278微秒
646 void Timer1(void) interrupt 3 using 1
647 {
648 1 TH0 = 0x00;
649 1 T1Counter++;
650 1 if(T1Counter == 36)
651 1 {
652 2 T1Counter = 0;
653 2 TR1 = 0;
654 2 if(POS_TimeOut == 1) //如果是到位检测延时触发
655 2 {
656 3 if(PINT0 == 0) POSFlag = 1;
657 3 POS_TimeOut = 0;
658 3 EX0 = 1;
659 3 }
660 2 if(SIG_TimeOut == 1) //如果是到位检测延时触发
661 2 {
662 3 if(PINT1 == 0) SIGFlag = 1;
663 3 SIG_TimeOut = 0;
664 3 EX1 = 1;
665 3 }
666 2 }
667 1 }
668
669 //***********************************************************************
670 //串行口接收函数,采用中断实现
671 void UART(void) interrupt 4 using 2
672 {
673 1 uchar temp;
674 1 if(RI&(!UARTFlag))
675 1 {
C51 COMPILER V7.04 MAIN 12/26/2007 09:33:09 PAGE 12
676 2 temp = SBUF;
677 2 RI = 0;
678 2 if(rlength == 0)
679 2 {
680 3 if(temp == UART_MESGFLAG)
681 3 {
682 4 RcvBUF[rlength] = temp;
683 4 rlength ++;
684 4 checksum = temp;
685 4 }
686 3 else
687 3 {
688 4 rlength = 0;
689 4 }
690 3 }
691 2 else if(rlength == 5)
692 2 {
693 3 RcvBUF[rlength] = temp;
694 3 if(((checksum^temp)==0))
695 3 UARTFlag = 1;
696 3 rlength = 0;
697 3 checksum = 0;
698 3 }
699 2 else
700 2 {
701 3 RcvBUF[rlength] = temp;
702 3 checksum += temp;
703 3 rlength ++;
704 3 }
705 2 }
706 1 if(TI)
707 1 {
708 2 TI = 0;
709 2 }
710 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -