433发射端发送-20ms的400us方波+4ms低电平+24位数据。数据1为400us高电平+400us低电平,数据0为400us高电平+1200us低电平。
现在的问题是,接收端能收到发送端的数据,但是发送端几乎每发送十次,接收端就会丢包1~3次,不知道是不是我的程序问题,几百us的时间也很难做到避免毛刺,麻烦大佬们帮我看看是什么问题?
以下这个函数是接收函数,放在定时器里运行的,定时周期为100us
void receive()
{
switch(Rf_Cnt)
{
case 0 : //4ms引导码
if(RF==0) //低电平累积次数
{
Count_Lead++;
}
else //高电平判断范围
{
if((Count_Lead >= 20) && (Count_Lead <= 60)) //2ms - 6ms
{
Count_Lead=0;
Recv_Data_Buf = 0x000000; //初始化参数
Count_Data_Hi = 0;
Count_Data_Lo = 0;
Recv_Data_cnt = 0;
Rf_Cnt=1;
}
else //范围不对退出
{
Count_Lead=0;
Rf_Cnt=0;
}
}
break;
case 1 : //数据位高电平部分判断
if(RF==1) //高电平累积次数
{
Count_Data_Hi++;
}
else //低电平判断范围
{
if((Count_Data_Hi >= 1) && (Count_Data_Hi <= 6)) // 100us - 600us
{
Count_Data_Hi = 0;
Rf_Cnt=2;
}
else
{
Rf_Cnt=0;
}
}
break;
case 2: //数据位低电平部分判断
if(RF==0) //低电平累积次数
{
Count_Data_Lo++;
}
else //高电平判断范围
{
if((Count_Data_Lo >= 1) && (Count_Data_Lo <= 6)) // 100us - 600us
{
Count_Data_Lo = 0;
bit_flag=1; //判为高电平
Rf_Cnt=3;
}
else if((Count_Data_Lo >= 8) && (Count_Data_Lo <= 16)) // 800us - 1600us
{
Count_Data_Lo = 0;
bit_flag=0; //判为低电平
Rf_Cnt=3;
}
else
{
Rf_Cnt=0;
}
}
break;
case 3 :
Recv_Data_Buf <<= 1;
if(bit_flag) Recv_Data_Buf|=0x000001;
else Recv_Data_Buf&=0xfffffe;
Recv_Data_cnt++;
if(Recv_Data_cnt>=24) {Rf_Cnt = 4;}//接收满24位,处理数据
else {Rf_Cnt = 1;}
break;
case 4 : //功能判断
if(LED1) LED1=0; else LED1=1;
key_mode=1;
Rf_Cnt = 0; //做完操作状态回零
break;
default:
Rf_Cnt = 0;
break;
}
}
|