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

📄 ir_rc5.lst

📁 MSTARXX.rar
💻 LST
字号:
C51 COMPILER V8.18   IR_RC5                                                                09/29/2009 23:44:50 PAGE 1   


C51 COMPILER V8.18, COMPILATION OF MODULE IR_RC5
OBJECT MODULE PLACED IN ..\..\1out\Ir_rc5.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\msFunc\Ir_rc5.c OPTIMIZE(SIZE) BROWSE INCDIR(..\..\inc;..\..\mslib;..
                    -\..\Device;..\..\kernal;..\..\msFunc;..\..\pc;..\..\tv) DEFINE(Multi_language) DEBUG OBJECTEXTEND PRINT(..\..\1out\Ir_rc
                    -5.lst) OBJECT(..\..\1out\Ir_rc5.obj)

line level    source

   1          /******************************************************************************
   2           Copyright (c) 2004 MStar Semiconductor, Inc.
   3           All rights reserved.
   4          
   5           [Module Name]: Ir.c
   6           [Date]:        04-Feb-2004
   7           [Comment]:
   8             Remote control subroutines.
   9           [Reversion History]:
  10          *******************************************************************************/
  11          #ifdef IR_RC5
              
              #define _IR_C_
              // Common
              #include  "types.h"
              
              #include "board.h"
              // System
              
              #include <intrins.h>
              
              #include "global.h"
              #include "ir.h"
              
              //************************************************************************
              #define IR_CYCLE_TIME           40// ms(total ir cycle time)
              
              #define ISR_TIMER2_800US     800
              #define ISR_TIMER2_400US     400
              #define ISR_TIMER2_800US2     760
              #define ISR_TIMER2_400US2     360
              
              #define TIMER2_800US_COUNTER            (65536-(MCU_XTAL_CLK_MHZ*ISR_TIMER2_800US2+6)/12)  // +6 for
              #define TIMER2_400US_COUNTER            (65536-(MCU_XTAL_CLK_MHZ*ISR_TIMER2_400US2+6)/12)  // +6 for
              #if( ENABLE_MCU_USE_INTERNAL_CLOCK )
              #define NEW_TIMER2_800US_COUNTER        (65536-(NEW_MCU_XTAL_CLK_MHZ*ISR_TIMER2_800US+6)/12)  // +6 for
              #define NEW_TIMER2_400US_COUNTER        (65536-(NEW_MCU_XTAL_CLK_MHZ*ISR_TIMER2_400US+6)/12)  // +6 for
              #endif
              
              #define IR_ADDRESS_MASK     0x1F
              #define IR_ADDRESS_CODE     0x00
              #define IR_PIN_LEVEL    P3_3
              
              //////////////////////////////////////////////////////////////////////////////////////////////////
              //////////////////////////////////////////////////////////////////////////////////////////////////
              void irDetectTimer0( void )
              {
                  if(--g_wIrTimer == 0)
                  {
                      if(g_bIrRepeatStatus)
                          g_bIrCommand = 1;
                  }
                  if(--g_wIrCycleTimer == 0)
C51 COMPILER V8.18   IR_RC5                                                                09/29/2009 23:44:50 PAGE 2   

                  {
                      IrReceiveEnd();
                  }
                  //--- IR press 0-9 key ending timer for TUNER Channel---
                  if ( g_bIrNumKeyStart || g_bIr100Key ) // IR key start
                  {
                      g_wIrNumKeyTimer--;
                      if ( g_wIrNumKeyTimer == 0 ) // time out
                      {
                          if ( _testbit_( g_bIr100Key ) )
                              g_ucIrNumKey = ( g_ucIrNumKey * 10 ) + 100;
              
                          g_bIrNumKeyStart = 0;
                          g_bIrKeyNumEnd = 1;
                      }
                  }
              }
              
              void irDecodeRepaeat(WORD wRepeatTime)
              {
                  g_wIrTimer = wRepeatTime;
                  g_bIrCommand = 0;
                  g_bIrRepeatStatus = 1;
              }
              
              void irDecodeEnd( void )
              {
                  g_wIrTimer = IR_REPEAT_START_TIME;
                  g_bIrCommand = 0;
                  g_bIrRepeatStatus = 0;
                  g_ucIrStatus=IR_IDLE;
              }
              
              ////////////////////////////////////////////////////////////////////////////////////////
              ////////////////////////////////////////////////////////////////////////////////////////
              void irInterruptProcess(void)
              {
                  if(g_ucIrStatus == IR_IDLE&&g_bIrDetect == 0)
                  {
                      g_ucCode = 1;
                      g_ucIrBitsCnt = 0;
                      g_ucIrStatus = IR_LEADER;
                      g_wIrCycleTimer = IR_CYCLE_TIME;
                      Timer2InitForIr();
                  }
              }
              //////////////////////////////////////////////////////////////////////////////////////////////////
              //////////////////////////////////////////////////////////////////////////////////////////////////
              BOOL ReformatIRdata(void)
              {
                  BYTE i = 6;
                  g_ucDataCode = 0;
                  g_ucSYSCode = 0;
                  while(i--) //get command code
                  {
                      g_ucDataCode>>=1;
                      if((BYTE)(g_ucCode&0x03)==2)
                          g_ucDataCode|=0x80;
                      else if((BYTE)(g_ucCode&0x03)==3||(BYTE)(g_ucCode&0x03)==00)
                          return FALSE;
                      g_ucCode>>=2;
                  }
C51 COMPILER V8.18   IR_RC5                                                                09/29/2009 23:44:50 PAGE 3   

              
                  i = 6;
                  while(i--) //get address code
                  {
                      g_ucSYSCode>>=1;
                      if((BYTE)(g_ucCode&0x03)==2)
                          g_ucSYSCode|=0x80;
                      else if((BYTE)(g_ucCode&0x03)==3||(BYTE)(g_ucCode&0x03)==00)
                          return FALSE;
                      g_ucCode>>=2;
                  }
              
                  g_ucDataCode>>=2;
                  g_ucSYSCode>>=2;
              
                  return TRUE;
              }
              
              void CheckIrdetected(void)
              {
                  BYTE PreDataCode;
              
                  if(!ReformatIRdata())
                      return;
              
                  //IR_PUTSTR("\r\nReformatIRdata");
                  if((g_ucSYSCode&IR_ADDRESS_MASK) == IR_ADDRESS_CODE)
                  {
                      if(g_ucSYSCode == g_ucPreSYSCode)
                              g_bIrRepeat = 1;
                      else
                              g_bIrRepeat = 0;
              
                      g_ucPreSYSCode = g_ucSYSCode;
                      PreDataCode = g_ucIrCode;
              
                      //if code change, ir repeat flag must be changed, otherwise it is incorrect code
                      if((!g_bIrRepeat)||(PreDataCode == g_ucDataCode))
                      {
                          g_bIrDetect = 1;
                          g_ucIrCode = g_ucDataCode;
                      }
                  }
                  else
                      return;
              
                  if(g_bIrDetect&&!g_bIrRepeat&&!g_bIrRepeatStatus)
                      g_bIrCommand = 1;
              }
              
              void IrReceiveEnd(void)
              {
                  ET2 = 0; // disable timer2 interrupt
                  TR2 = 0; // stop timer2
                  if(g_ucIrBitsCnt == 27)
                      CheckIrdetected();
                  g_ucIrStatus = IR_IDLE;
              }
              
              void Timer2InitForIr(void)
              {
              #if( ENABLE_MCU_USE_INTERNAL_CLOCK )
C51 COMPILER V8.18   IR_RC5                                                                09/29/2009 23:44:50 PAGE 4   

                  if( g_bMcuUseNewClock )
                  {
                      TH2 = HIBYTE(NEW_TIMER2_400US_COUNTER);
                      TL2 = LOBYTE(NEW_TIMER2_400US_COUNTER);
                  }
                  else
              #endif
                  {
                      TH2 = HIBYTE(TIMER2_400US_COUNTER);
                      TL2 = LOBYTE(TIMER2_400US_COUNTER);
                  }
                  PT2 = 1;
                  TR2 = 1;    // timer1 run
                  ET2 = 1;    // enable TIMER0 interrupt
              }
              
              void irDetectTimer1(void)
              {
                  TF2 = 0;
              #if( ENABLE_MCU_USE_INTERNAL_CLOCK )
                  if( g_bMcuUseNewClock )
                  {
                      TH2 = HIBYTE(NEW_TIMER2_800US_COUNTER);
                      TL2 = LOBYTE(NEW_TIMER2_800US_COUNTER);
                  }
                  else
              #endif
                  {
                      TH2 = HIBYTE(TIMER2_800US_COUNTER);
                      TL2 = LOBYTE(TIMER2_800US_COUNTER);
                  }
              
                  if(g_ucIrBitsCnt < 27)
                  {
                      if(IR_PIN_LEVEL)
                      {
                          g_ucCode <<= 1;
                          g_ucCode |= _BIT0;
                      }
                      else
                      {
                          g_ucCode <<= 1;
                          g_ucCode &= ~_BIT0;
                      }
              
                      g_ucIrBitsCnt++;
                      g_ucIrStatus = IR_CODE;
                  }
              }
              
              #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V8.18   IR_RC5                                                                09/29/2009 23:44:50 PAGE 5   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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