⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keil00.lst

📁 提供包括硬件、软件在内的高效、低成本的完整嵌入式开发平台及解决方案。典型产品为以386EX CPU为核心的嵌入式网络模块系列
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -