📄 main.lst
字号:
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 + -