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

📄 main.lst

📁 此程序为twell8806驱动程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 481          //                       .TL2 <- RCAP2L
 482          //                      TL2 is incremented every machine cycle
 483          //                      Every machine cycle is 12*Tosc(11.0592MHz)
 484          //
 485          //                      Every machine cycle = 1.085us
 486          //                      Interrupt interval  
 487          //                              1) REMO_RC5 
 488          //                                      221.34us  ( 1.085*204 )         // (256-52) (0x10000-0xff34)
C51 COMPILER V7.50   MAIN                                                                  08/20/2007 10:23:30 PAGE 9   

 489          //
 490          //                                      data length: 14bit (2sync bits, 1 control bit, 11 data bits) 24,889ms
 491          //
 492          //                                                              +----+
 493          //                                      1 is coded:      |    |
 494          //                                                                       +----+   
 495          //                                                                T    T
 496          //
 497          //                                                                       +----+
 498          //                                      0 is coded: |    |
 499          //                                                  +----+        
 500          //                                                                T    T                                        T = 889us
 501          //
 502          //                                      *) DongYang
 503          //                                              209.62  ( 1.085*193 )   // (256-63) (0x10000-0xff3f)
 504          //-----------------------------------------------------------------------------
 505          //                              2) REMO_NEC
 506          //                                      187.714us ( 1.085*173 )     // (256-83) (0x10000-0xff53)
 507          //                                                      
 508          //****************************************************************************/
 509          INTERRUPT(5, timer2_int)
 510          {
 511   1              TF2 = 0;                                        // clear overflow
 512   1      
 513   1              tm01++;
 514   1      
 515   1              #ifdef REMO_RC5
 516   1              {
 517   2                      BYTE    i;
 518   2      
 519   2                      i = tm01 & 0x07;
 520   2                      if( i>=1 && i<=2 )
 521   2                              RemoPhase1 = P3_2;
 522   2                      else if( i>=5 && i<=6 )
 523   2                              RemoPhase2 = P3_2;
 524   2                      else
 525   2                              ;
 526   2                      if( i==0 ) {    //every 8 tm01
 527   3                              if( RemoPhase1==RemoPhase2 ) {  // error
 528   4                                      ClearRemoTimer();                       
 529   4                                      EnableRemoconInt();
 530   4                                      return;
 531   4                              }
 532   3                              if( tm01<=(8*8) ) {                             // start control system
 533   4                                      RemoSystemCode <<=1;
 534   4                                      if( RemoPhase1==1 && RemoPhase2==0 )
 535   4                                              RemoSystemCode |=1;
 536   4                              }
 537   3                              else {                                                  // data
 538   4                                      RemoDataCode <<=1;
 539   4                                      if( RemoPhase1==1 && RemoPhase2==0 )
 540   4                                              RemoDataCode |=1;
 541   4                              }
 542   3                      }
 543   2                      if( tm01 > (8*14) ) {
 544   3                              RemoDataReady++;        //LJY051502 RemoDataReady = 1;                          // new key
 545   3                              ClearRemoTimer();                               
 546   3                              //RemoOver = 0;
 547   3                      }
 548   2              }
 549   1      
 550   1              #elif defined REMO_NEC
C51 COMPILER V7.50   MAIN                                                                  08/20/2007 10:23:30 PAGE 10  

                      
                      {
                              if( RemoDataReady ) return;
              
                              switch( RemoStep ) {
              
                              case 0:
                                      if( P3_2==0 ) {
                                              RemoLcnt++;
                                              if( RemoLcnt==0xff ) goto RemoError;
                                      }
                                      else {
                                              RemoHcnt = 0;
                                              RemoStep++;
                                      }
                                      break;
              
                              case 1:
                                      if( P3_2==1 ) {
                                              RemoHcnt++;
                                              if( RemoHcnt==0xff ) goto RemoError;
                                      }
                                      else {
                                              if( RemoLcnt>=15*3 && RemoLcnt<=17*3 ) {
                                                      
                                                      if( RemoHcnt>=3*3 && RemoHcnt<=5*3 ) {
                                                              RemoStep = 3;
                                                              RemoDataReady = 2;
                                                              break;
                                                      }
                                                      else if( RemoHcnt>=7*3 && RemoHcnt<=9*3 ) {
                                                              RemoStep++;
                                                              RemoPhase = 0;
                                                              RemoLcnt = 0;
                                                              RemoNum  = 0;
                                                              RemoBit  = 0;
                                                              break;
                                                      }
                                              }
                                              else goto RemoError;
                                      }
                                      break;
              
                              case 2:
                                      if( RemoPhase==0 ) {
                                              if( P3_2==0 )                                   // Phase=0  Input=0
                                                      RemoLcnt++;
                                              else {                                                  // Phase=0  Input=1
                                                      RemoPhase = 1;
                                                      RemoHcnt = 0;
                                              }
                                      }
                                      else {                                                          
                                              if( P3_2==1 )                                   // Phase=1  Input=1
                                                      RemoHcnt++;
                                              else {                                                  // Phase=1  Input=0
                                                      RemoPhase = 0;
                                                      if( RemoLcnt>=1 && RemoLcnt<=5 ) {
                                                              if( RemoHcnt<=2*3 )                     // bit 0
                                                                      RemoData[RemoNum] <<= 1;
                                                              else if( RemoHcnt<=4*3 ) {              // bit 1
                                                                      RemoData[RemoNum] <<= 1;
C51 COMPILER V7.50   MAIN                                                                  08/20/2007 10:23:30 PAGE 11  

                                                                      RemoData[RemoNum]++;
                                                              }
                                                              else goto RemoError;
              
                                                              if( ++RemoBit>=8 ) {
                                                                      RemoBit = 0;
                                                                      if( ++RemoNum>=4 ) {
                                                                              RemoDataReady = 1;
                                                                              RemoStep++;
                                                                      }
                                                              }
                                                              RemoLcnt = 0;
              
                                                      }
                                                      else goto RemoError;
                                              }
                                      }
                                      break;
              
                              case 3:
                                      break;
                              
                              }
                              return;
              
              RemoError:
                              ClearRemoTimer();                               //TimerFor208us();
                              EnableRemoconInt();
                      }
              
                      #endif  // REMO_NEC
 644   1      }
 645          
 646          void delay(BYTE cnt)
 647          {
 648   1              WORD ttic01;
 649   1      
 650   1              ttic01 =  ( tic01 + cnt ) % 100;
 651   1              do {
 652   2                      ;
 653   2              } while( tic01 != ttic01 );
 654   1      }
 655          //=============================================================================
 656          //              Time
 657          //=============================================================================
 658          #define _24H_SECS                       86400L                  // 24*60*60
 659          WORD GetTime_ms(void)
 660          {
 661   1              WORD tms;
 662   1      
 663   1              tms = tic01;
 664   1              tms += ( SystemClock % 60 ) * 100;
 665   1              return tms;     // in ms
 666   1      }
 667          /*
 668          #ifdef SUPPORT_TV
 669          BYTE OKWakeupTime(void)
 670          {
 671                  if( GetTime_H() == ( WakeupTime >>8 ) && 
 672                          GetTime_M() == ( WakeupTime & 0xff ) )  
 673                          return 1;
 674                  return 0;
C51 COMPILER V7.50   MAIN                                                                  08/20/2007 10:23:30 PAGE 12  

 675          }
 676          #endif  //SUPPORT_TV
 677          */
 678          BYTE GetTime_H(void)
 679          {
 680   1              return ( SystemClock / 60 / 60 ) % 24 ;
 681   1      }
 682          
 683          BYTE GetTime_M(void)
 684          {
 685   1              return ( SystemClock / 60  ) % 60 ;
 686   1      }
 687          
 688          BYTE GetSleepTimer(void)
 689          {
 690   1              WORD val;
 691   1      
 692   1              val = SleepTimer;
 693   1              if( val )       {       // already set, display rest of time
 694   2                      val = ( SleepTime >> 8 ) * 60 + ( SleepTime & 0xff );
 695   2                      val -= ( GetTime_H() * 60 + GetTime_M() );
 696   2              }
 697   1              return (BYTE)val;
 698   1      }
 699          
 700          void SetSleepTimer(BYTE stime)
 701          {
 702   1              SleepTimer = stime;
 703   1              if( SleepTimer==0 )
 704   1                      SleepTime = 0xffff;
 705   1              else {
 706   2                      SleepTime = GetTime_H() + ( GetTime_M() + SleepTimer ) / 60;
 707   2                      SleepTime = ( SleepTime << 8 ) | ( ( GetTime_M() + SleepTimer ) % 60 );
 708   2              }
 709   1      
 710   1              #ifdef DEBUG_TIME
                      dPrintf("\r\n++(SetSleepTimer) SleepTime:0x%x__", (WORD)SleepTime);
                      #endif
 713   1      }
 714          
 715          BYTE OKSleepTime(void)
 716          {
 717   1              if( GetTime_H() == ( SleepTime >>8 ) && 
 718   1                      GetTime_M() == ( SleepTime & 0xff ) )   {
 719   2                      SleepTimer=0;
 720   2                      SleepTime = 0xffff;
 721   2                      return 1;
 722   2              }
 723   1              return 0;
 724   1      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -