📄 ir_rc5.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 + -