📄 keil00.lst
字号:
526 5 break;
527 5 } /*清牌*/
528 4 }
529 3 //if(xbit)
530 3 // {TX[2]='M';
531 3 // TX[4]=0x27; /*取牌报告*/
532 3 // Transmit();
533 3 //
534 3 }
535 2 break;
536 2 }
537 1 OPTOV=1; //+
538 1 AllCard=AllCardbak;
539 1 RemnantCard=RemnantCardbak;
540 1 }
541 /***********************************/
542 void ShaoCar(void) /*少牌处理*/
543 {
544 1 OPTOV=0;
545 1 Delay50ms();
546 1 TX[2]='M';
547 1 TX[4]=0x28; /*少牌报警*/
548 1 Transmit();
549 1 while(Back_OPTO) /*等待放牌*/
550 1 {
551 2 _nop_();
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 10
552 2 if(Command==0x04)
553 2 {
554 3 ClrBit=1;
555 3 break;
556 3 }
557 2 }
558 1 ShaoCardBit=0;
559 1 TX[2]='M';
560 1 TX[4]=0x29; /*补牌报告*/
561 1 Transmit();
562 1 OutCard(); /*发牌*/
563 1 }
564 /***************************************
565 * 变量BoxNO是将要接牌的牌盒编号
566 * 变量azimuth是当前的方位数
567 * 定位可靠处理:预留2度的长度低速定位
568 ****************************************/
569 void Turn(void)
570 {
571 1 unsigned int y,Pulse; /*Pulse---脉冲变量*/
572 1 unsigned char i,b,x,z;
573 1 TX[2]='M';
574 1 TX[4]=0x40; /*转动报告*/
575 1 //ransmit();
576 1
577 1 EA=0;
578 1 DIR=0; /*顺时针转动*/
579 1 Step=0;
580 1 A3986_EN=0;
581 1 ConVref=1; /*释放电机*/
582 1 Delay50ms();
583 1
584 1 i=BoxNO; /*BoxNO---将要接牌的牌盒编号*/
585 1 if(i==Place) goto outa;
586 1 else if(i>Place) i=i-Place; /*转动量的处理*/
587 1 else i=i+4-Place; /*Place--位置变量*/
588 1
589 1 if(i==1) {Pulse=930;} //960---90'
590 1 else if(i==2) {Pulse=2530;} //2560---180'
591 1 else if(i==3) {Pulse=4130;} //4160---270'
592 1 else goto outa;
593 1
594 1 z=124; //z=120;
595 1 for(i=0;i<20;i++) /*启动加速(18度)*/
596 1 {
597 2 for(b=0;b<32;b++) /*每1.8度变速一次*/
598 2 {
599 3 for(x=0;x<z;x++)
600 3 {
601 4 _nop_();
602 4 }
603 3 Step=!Step;
604 3 }
605 2 z=z-5;
606 2 } /*变速量*/
607 1
608 1 for(y=0;y<(Pulse-32);y++) /*快速转动*/
609 1 {
610 2 for(x=0;x<z;x++) //
611 2 {_nop_();} //
612 2 Step=1; //
613 2 for(x=0;x<z;x++) //
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 11
614 2 {_nop_();} //
615 2 Step=0;
616 2 } //
617 1
618 1 for(i=0;i<15;i++) /*for(i=0;i<20;i++)停止减速(18度)*/
619 1 {
620 2 for(b=0;b<32;b++) /*每1.8度变速一次*/
621 2 {
622 3 for(x=0;x<z;x++)
623 3 {_nop_();}
624 3 Step=!Step;
625 3 }
626 2 z=z+5;
627 2 } /*变速量*/
628 1
629 1 switch(BoxNO)
630 1 {
631 2 case 1: i=0x7f; break; /*当前接牌盒编号判断*/
632 2 case 2: i=0xef; break; //
633 2 case 3: i=0xbf; break; //
634 2 case 4: i=0xdf; break; //
635 2 default: break;
636 2 }
637 1 while(azimuth!=i) /*低速定位*/
638 1 {
639 2 for(x=0;x<255;x++)
640 2 {
641 3 _nop_();
642 3 _nop_();
643 3 } //-
644 2 Step=!Step;
645 2 } //
646 1
647 1 outa:
648 1 Delay50ms();
649 1 Place=BoxNO;
650 1 ConVref=0; /*锁定电机*/
651 1 EA=1;
652 1
653 1 TX[2]='M';
654 1 TX[4]=0x41; /*停转报告*/
655 1 Transmit();
656 1 }
657 /********************************************************/
658 /*-----发牌程序--------------*/
659 /********************************************************/
660 void OutCard(void)
661 {
662 1 unsigned char Ydata,Card; /*有无牌检测次数和发牌数变量*/
663 1 unsigned char Blockdata; /*卡牌时间计数变量*/
664 1 bit NoCardBIT; /*牌盒无牌标志位*/
665 1 bit CardBIT,OkBIT; /*计数器有牌和发牌完成标志位*/
666 1 bit BlockCardBIT; /*卡牌标志位*/
667 1
668 1 Card=0;
669 1 NoCardBIT=0;
670 1 CardBIT=0; /*变量清零*/
671 1 OkBIT=0;
672 1 Blockdata=0;
673 1 BlockCardBIT=0;
674 1
675 1 while(1)
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 12
676 1 {
677 2 OPTOV=0; /*开传感器电源*/
678 2 Delay50ms();
679 2 if(!Back_OPTO)
680 2 {
681 3 NoCardBIT=0;
682 3 } /*牌盒有牌时清无牌标志位*/
683 2
684 2 if(Back_OPTO) /*牌盒有无牌检测*/
685 2 {
686 3 if(Ydata>20) /*检测20次*/
687 3 {
688 4 Ydata=0;
689 4 if(!Count_OPTO) /*计数器无牌*/
690 4 {
691 5 Back_motor=1; /*牌盒马达全停*/
692 5 Front_motor=1;
693 5 if(Card<Card_data)
694 5 {
695 6 ShaoCardBit=1;
696 6 } /*置少牌标志*/
697 5 OkBIT=1;
698 5 NoCardBIT=1;} /*置牌盒无牌标志*/
699 4 }
700 3 else
701 3 Ydata++; /*检测次数加1*/
702 3 }
703 2
704 2 if(Card>=Card_data) /*牌盒发牌完成?*/
705 2 {
706 3 Front_motor=1;
707 3 Back_motor=1; /*牌盒马达全停*/
708 3 OkBIT=1;
709 3 } /*置完成标志位*/
710 2
711 2 if(OkBIT)
712 2 {
713 3 OkBIT=0;
714 3 break;
715 3 }
716 2
717 2 if(!NoCardBIT)
718 2 {
719 3 if(!OkBIT) /*有牌则启动牌盒发牌*/
720 3 {
721 4 Back_motor=0;
722 4 Front_motor=0;
723 4 }
724 3 }
725 2
726 2 if(!CardBIT)
727 2 {
728 3 if(Count_OPTO) /*计数器有牌*/
729 3 {
730 4 Back_motor=1;
731 4 _nop_(); //Delay50ms();
732 4 if(Count_OPTO)
733 4 {
734 5 Ydata=0;
735 5 CardBIT=1; /*置有牌标志*/
736 5 }
737 4 }
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 13
738 3 }
739 2 else
740 2 {
741 3 if(CardBIT)
742 3 {
743 4 if(!Count_OPTO)
744 4 {
745 5 Ydata=0;
746 5 Blockdata=0;
747 5 Card++; /*牌过计数器后加1*/
748 5 CardBIT=0;
749 5 }
750 4 }
751 3 }
752 2
753 2 Blockdata++; /*卡牌计数变量加1*/
754 2 if(Blockdata>=0xfe)
755 2 {
756 3 BlockCardBIT=1; /*置卡牌标志*/
757 3 break;
758 3 }
759 2 }
760 1 OPTOV=1; /*关传感器电源*/
761 1
762 1 if(BlockCardBIT) /*卡牌标志有效为卡牌*/
763 1 {
764 2 Back_motor=1;
765 2 Front_motor=1; /*卡牌时所有马达停*/
766 2 TX[2]='M';
767 2 TX[4]=0x25; /*发送卡牌信息*/
768 2 TX[5]=1; /*A卡牌*/
769 2 Transmit();
770 2 }
771 1 else
772 1 {
773 2 if(ShaoCardBit) /*少牌置标志*/
774 2 {
775 3 Card_data=Card_data-Card;
776 3 }
777 2 }
778 1 }
779 /***********************************
780 ******* 任务发出及反馈 ***********
781 ***********************************/
782 void TXok(void)
783 {
784 1 unsigned char x,a,b,c;
785 1 x=0;
786 1 a=TX[2];
787 1 b=TX[4];
788 1 c=TX[5]; //BboxErr=0;
789 1 while(1)
790 1 {
791 2 Delay50ms();Delay50ms();
792 2 if(Command==0x21) /*确认收到命令*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -