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

📄 finish.lst

📁 能完成对小车的往返
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -