2020-10-16

#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;    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值