📄 ir.c
字号:
#include "board.h"
#include "keypaddef.h"
#if DebugIRCode
#include "debug.h"
#endif
#include "ir.h"
#include "global.h"
#include "Power.h"
#if DebugIRCode
BYTE xdata IRDebugCode0=0;
BYTE xdata IRDebugCode1=0;
BYTE xdata IRDebugData=0;
#endif
BYTE IR_Status;
WORD IR_Width;
BYTE IR_Bit_Count;
BYTE IR_Data;
BYTE IR_Data_Backup;
BYTE IR_ErrTimeCount;
void IR_Init(void)
{
BYTE tmp;
IT0 = 1; //set edge trigger -(INT1)
EX0 = 1;
tmp = TMOD&0xf0;//timer0
TMOD = tmp|0x01;
Set_IR_ResetFlag();
Clr_IR_Data_OKFlag();
IR_Data = 0;
IR_Bit_Count = 0;
IR_ErrTimeCount = 0;
}
void ir_interrupt(void) interrupt 0
{
EA = 0;
EX0 = 0;
//------------------------
TR0 = 0;
IR_Width = TH0;IR_Width <<=8;IR_Width |= TL0;
// TMOD = 0x11; //change timer1 mode
TH0 = IR_Parameter_Table[8]>>8;
TL0 = IR_Parameter_Table[8]&0xFF; // timer 1 counter
TF0 = 0;
ET0 = 1;
TR0 = 1;
IR_Width -= IR_Parameter_Table[8];
//-----------------------------------------------------------------------
if(IR_ResetFlag)
{
Clr_IR_ResetFlag();
Clr_IR_Data_OKFlag();
IR_Data = 0;
IR_Bit_Count = 0;
// IR_ErrTimeCount = 110;
// IR_ErrTimeCount = 108+IR_ErrTimeCountTorlance; //jt update 2004-04-27
IR_ErrTimeCount = 9;
}
else
{
if(IR_Bit_Count==0)//decode lead
{
if(IR_Width>IR_Parameter_Table[4] && IR_Width<IR_Parameter_Table[5])
IR_Bit_Count++;
}
else if(IR_Bit_Count<17)//decode customer code
{
//--------------------------------------------------------------
if(IR_Width>IR_Parameter_Table[0] && IR_Width<IR_Parameter_Table[1])
{
IR_Data >>= 1;IR_Bit_Count++;
}
if(IR_Width>IR_Parameter_Table[2] && IR_Width<IR_Parameter_Table[3])
{
IR_Data >>= 1;IR_Data |= 0x80;IR_Bit_Count++;
}
//--------------------------------------------------------------
if(IR_Bit_Count==9)
{
#if DebugIRCode
IRDebugCode0 = IR_Data;
Set_IR_DebugCustomerCode0_OKFlag();
#endif
if(IR_Data!=IR_Customer_Code[0])
IR_Bit_Count = 0;
}
if(IR_Bit_Count==17)
{
#if DebugIRCode
IRDebugCode1 = IR_Data;
Set_IR_DebugCustomerCode1_OKFlag();
#endif
if(IR_Data!=IR_Customer_Code[1])
IR_Bit_Count = 0;
}
}
else if(IR_Bit_Count<33)//decode data code
{
//test++;
//--------------------------------------------------------------
if(IR_Width>IR_Parameter_Table[0] && IR_Width<IR_Parameter_Table[1])
{
IR_Data >>= 1;IR_Bit_Count++;
}
if(IR_Width>IR_Parameter_Table[2] && IR_Width<IR_Parameter_Table[3])
{
IR_Data >>= 1;IR_Data |= 0x80;IR_Bit_Count++;
}
//--------------------------------------------------------------
if(IR_Bit_Count==25)
{
IR_Data_Backup = IR_Data;
}
if(IR_Bit_Count==33)
{
IR_Data = IR_Data^IR_Data_Backup;
if(IR_Data==0xff)
{
#if DebugIRCode
IRDebugData = IR_Data_Backup;
Set_IR_DebugData_OKFlag();
#endif
Set_IR_Data_OKFlag();
}
else
IR_Bit_Count = 0;
}
}
else if(IR_Width>IR_Parameter_Table[6] && IR_Width<IR_Parameter_Table[7])//decode stop and repeat code
{
// IR_ErrTimeCount = 110;
//IR_ErrTimeCount = 108+IR_ErrTimeCountTorlance; //jt update 2004-04-27
IR_ErrTimeCount = 9;
#if DebugIRCode
IRDebugData = IR_Data_Backup;
Set_IR_DebugData_OKFlag();
#endif
if(IR_Bit_Count==33)
Set_IR_Data_OKFlag();
}
}
EX0 = 1;
EA = 1;
}
void timer0(void) interrupt 1
{
// Int Vector at 001BH, Reg Bank 1
EA = 0;
ET0 = 0; // inhibit timer0 interrupt
TR0 = 0; // stop timer0
if(!IR_ErrTimeCount)
{
Set_IR_ResetFlag();
}
EA = 1;
}
/*
void timer1(void) interrupt 3
{
// Int Vector at 001BH, Reg Bank 1
EA = 0;
ET1 = 0; // inhibit timer1 interrupt
TR1 = 0; // stop timer1
if(!IR_ErrTimeCount)
{
Set_IR_ResetFlag();
}
EA = 1;
}
*/
BYTE Get_IR_Key(void)
{
BYTE tmp;
tmp = KEY_NOTHING;
if(IR_Data_OKFlag)
{
tmp = IR_Key_Table[IR_Data_Backup];
Clr_IR_Data_OKFlag();
//test = IR_Data_Backup;
}
//----------------------------------
return tmp;
}
/*
void PC_Interrupt(void) interrupt 6
{
GreenLedOn();
//ForceDelay1ms(2);
//GreenLedOn();
}*/
/*
void Reset_Ir_Key(void)
{
Clr_IR_Data_OKFlag();
}
*/
#if 0//DebugIRCode
void DebugIRHandler(void)
{
if(IR_DebugCustomerCode0_OKFlag)
{
Clr_IR_DebugCustomerCode0_OKFlag();
printData("IR CustomerCode0 %x",IRDebugCode0);
}
if(IR_DebugCustomerCode1_OKFlag)
{
Clr_IR_DebugCustomerCode1_OKFlag();
printData("IR CustomerCode1 %x",IRDebugCode1);
}
if(IR_DebugData_OKFlag)
{
Clr_IR_DebugData_OKFlag();
printData("IR Data %x",IRDebugData);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -