#include "RF433.h"
sbit RF433IN = P3^2; //ÉäƵ½ÓÊÕÒý½Å;
bit RFflag = 0; //½ÓÊÕ±êÖ¾£¬ÊÕµ½Ò»Ö¡ÕýÈ·Êý¾ÝºóÖÃ1;
unsigned char RFcode[4]; //ÉäƵ´úÂë½ÓÊÕ»º³åÇø;
//unsigned char Time;
void RF433Init()
{
RF433IN = 1;
TMOD &=0x0F;
TMOD |=0x10;
TR0 = 0;
ET0 = 0;
IT0 = 1;
EX0 = 1;
EA = 1;
}
unsigned int GetHightTime() //»ñÈ¡¸ßµçƽ
{
TH0 = 0;
TL0 = 0;
TR0 = 1;
while(RF433IN)
{
if(TH0>0x40) //Èç¹û¸ßµçƽÐźŹý³¤£¬¿ÉÄÜÊÇÒì³£ÐźÅ
{
break;
}
}
TR0 = 0;
return(TH0*256+TL0);
}
unsigned int GetLowTime() //»ñÈ¡µÍµçƽ
{
TH0 = 0;
TL0 = 0;
TR0 = 1;
while(RF433IN)
{
if(TH0>0x40) //Èç¹ûµÍµçƽÐźŹý³¤£¬¿ÉÄÜÊÇÒì³£ÐźÅ
{
break;
}
}
TR0 = 0;
return(TH0*256+TL0);
}
void ReadRF433() interrupt 0
{
unsigned char i,j,byte;
unsigned int time; //»ñÈ¡¶¨Ê±Æ÷µÄÖµ
time = GetLowTime();
if((time < 7833) || (time > 8755))
{
IE0 = 0;
return; //Í˳öÖжϺ¯Êý
}
time = GetHightTime();
if((time < 3686) || (time > 4608)) //4.0---5.0mS
{
IE0 = 0;
return; //Í˳öÖжϺ¯Êý
}
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
time = GetLowTime();
if ((time < 313) || (time > 718)) // mS //BITλ0
{
IE0 = 0;
return; //Í˳öÖжϺ¯Êý
}
time = GetHightTime();
if ((time > 313) && (time < 718)) // mS
{
byte >>= 1;
}
else
if((time > 1345) && (time < 1751)) //BITλ1
{
byte >>= 1;
byte |= 0x00; //°Ñ×î¸ßλÖÃ1
}
else
{
IE0 = 0;
return; //Í˳öÖжϺ¯Êý
}
}
RFcode[i] = byte;
if((RFcode[0] != RFcode[1])&&(RFcode[2] != RFcode[3]))
{
return; //Í˳öÖжϺ¯Êý
}
}
RFflag = 1; //½ÓÊÕ±êÖ¾£¬ÊÕµ½Ò»Ö¡ÕýÈ·Êý¾ÝºóÖÃ1;
IE0 = 0;
}