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

📄 main.lst

📁 AT89C51 I2C接口通信程序例程.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -