#include <reg52.h>
#include <infrared.h>
unsigned char irflag = 0;
unsigned char ircode[4];
void InitInfrared()
{
IR_INPUT = 1;
TMOD &= 0x0F;
TMOD |= 0x10;
TR1 = 0;
ET1 = 0;
IT1 = 1;
EX1 = 1;
}
unsigned int GetHighTime()
{
TH1 = 0;
TL1 = 0;
TR1 = 1;
while (IR_INPUT)
{
if (TH1 >= 0x40)
{
break;
}
}
TR1 = 0;
return (TH1*256 + TL1);
}
unsigned int GetLowTime()
{
TH1 = 0;
TL1 = 0;
TR1 = 1;
while (!IR_INPUT)
{
if (TH1 >= 0x40)
{
break;
}
}
TR1 = 0;
return (TH1*256 + TL1);
}
void EXINT1_ISR() interrupt 2
{
unsigned char i,j;
unsigned char byt;
unsigned int time;
time = GetLowTime();
if ((time<7833) || (time>8755))
{
IE1 = 0;
return;
}
time = GetHighTime();
if ((time<3686) || (time>4608))
{
IE1 = 0;
return;
}
for (i=0; i<4; i++)
{
for (j=0; j<8; j++)
{
time = GetLowTime();
if ((time<313) || (time>718))
{
IE1 = 0;
return;
}
time = GetHighTime();
if ((time>313) && (time<718))
{
byt >>= 1;
}
else if ((time>1345) && (time<1751))
{
byt >>= 1;
byt |= 0x80;
}
else
{
IE1 = 0;
return;
}
}
ircode[i] = byt;
}
irflag = 1;
IE1 = 0;
}