最简单粗暴的做法,利用滴答时钟,10us一次
void SysTick_IRQHandler(void)
{
Rf_level=Gpio_GetInputIO(Dec_RF_PORT, Dec_RF_PIN);
switch(Rf_step)
{
case 0:
if(Rf_level==0)
{
Rf_step=1;
Rf_sync_low_cnt=0;
}
break;
case 1://read sync low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=2;
}
break;
case 2://read sync high level
Rf_sync_high_cnt++;
if(Rf_sync_low_cnt>700)
{
Rf_step=5;
Rf_sync_low_cnt=0;
}
else
{
Rf_step=0;
Rf_sync_low_cnt=0;
}
break;
case 5://read byte1 high level
if(Rf_level==0)
{
Rf_step=6;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 6://read byte1 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=7;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte1=1;
}
else
{
Rf_Value_Byte1=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 7://read byte2 high level
if(Rf_level==0)
{
Rf_step=8;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 8://read byte2 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=9;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte2=1;
}
else
{
Rf_Value_Byte2=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 9://read byte3 high level
if(Rf_level==0)
{
Rf_step=10;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 10://read byte3 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=11;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte3=1;
}
else
{
Rf_Value_Byte3=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 11://read byte4 high level
if(Rf_level==0)
{
Rf_step=12;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 12://read byte4 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=13;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte4=1;
}
else
{
Rf_Value_Byte4=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 13://read byte5 high level
if(Rf_level==0)
{
Rf_step=14;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 14://read byte5 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=15;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte5=1;
}
else
{
Rf_Value_Byte5=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 15://read byte6 high level
if(Rf_level==0)
{
Rf_step=16;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 16://read byte6 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=17;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte6=1;
}
else
{
Rf_Value_Byte6=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 17://read byte7 high level
if(Rf_level==0)
{
Rf_step=18;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 18://read byte7 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=19;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte7=1;
}
else
{
Rf_Value_Byte7=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 19://read byte8 high level
if(Rf_level==0)
{
Rf_step=20;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 20://read byte8 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=21;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte8=1;
}
else
{
Rf_Value_Byte8=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 21://read byte9 high level
if(Rf_level==0)
{
Rf_step=22;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 22://read byte9 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=23;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte9=1;
}
else
{
Rf_Value_Byte9=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 23://read byte10 high level
if(Rf_level==0)
{
Rf_step=24;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 24://read byte10 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=25;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte10=1;
}
else
{
Rf_Value_Byte10=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 25://read byte11 high level
if(Rf_level==0)
{
Rf_step=26;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 26://read byte11 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=27;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte11=1;
}
else
{
Rf_Value_Byte11=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 27://read byte12 high level
if(Rf_level==0)
{
Rf_step=28;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 28://read byte12 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=29;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte12=1;
}
else
{
Rf_Value_Byte12=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 29://read byte13 high level
if(Rf_level==0)
{
Rf_step=30;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 30://read byte13 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=31;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte13=1;
}
else
{
Rf_Value_Byte13=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 31://read byte14 high level
if(Rf_level==0)
{
Rf_step=32;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 32://read byte14 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=33;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte14=1;
}
else
{
Rf_Value_Byte14=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 33://read byte15 high level
if(Rf_level==0)
{
Rf_step=34;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 34://read byte15 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=35;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte15=1;
}
else
{
Rf_Value_Byte15=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 35://read byte16 high level
if(Rf_level==0)
{
Rf_step=36;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 36://read byte16 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=37;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte16=1;
}
else
{
Rf_Value_Byte16=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 37://read byte17 high level
if(Rf_level==0)
{
Rf_step=38;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 38://read byte17 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=39;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte17=1;
}
else
{
Rf_Value_Byte17=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 39://read byte18 high level
if(Rf_level==0)
{
Rf_step=40;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 40://read byte18 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=41;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte18=1;
}
else
{
Rf_Value_Byte18=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 41://read byte19 high level
if(Rf_level==0)
{
Rf_step=42;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 42://read byte19 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=43;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte19=1;
}
else
{
Rf_Value_Byte19=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 43://read byte20 high level
if(Rf_level==0)
{
Rf_step=44;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 44://read byte20 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=45;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte20=1;
}
else
{
Rf_Value_Byte20=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 45://read byte21 high level
if(Rf_level==0)
{
Rf_step=46;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 46://read byte21 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=47;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte21=1;
}
else
{
Rf_Value_Byte21=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 47://read byte22 high level
if(Rf_level==0)
{
Rf_step=48;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 48://read byte22 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=49;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte22=1;
}
else
{
Rf_Value_Byte22=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 49://read byte23 high level
if(Rf_level==0)
{
Rf_step=50;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 50://read byte23 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=51;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte23=1;
}
else
{
Rf_Value_Byte23=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 51://read byte24 high level
if(Rf_level==0)
{
Rf_step=52;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 52://read byte24 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=53;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte24=1;
}
else
{
Rf_Value_Byte24=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 53://read byte25 high level
if(Rf_level==0)
{
Rf_step=54;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 54://read byte25 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=55;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte25=1;
}
else
{
Rf_Value_Byte25=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 55://read byte26 high level
if(Rf_level==0)
{
Rf_step=56;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 56://read byte26 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=57;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte26=1;
}
else
{
Rf_Value_Byte26=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 57://read byte27 high level
if(Rf_level==0)
{
Rf_step=58;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 58://read byte27 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=59;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte27=1;
}
else
{
Rf_Value_Byte27=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 59://read byte28 high level
if(Rf_level==0)
{
Rf_step=60;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 60://read byte28 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=61;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte28=1;
}
else
{
Rf_Value_Byte28=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 61://read byte29 high level
if(Rf_level==0)
{
Rf_step=62;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 62://read byte29 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=63;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte29=1;
}
else
{
Rf_Value_Byte29=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 63://read byte30 high level
if(Rf_level==0)
{
Rf_step=64;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 64://read byte30 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=65;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte30=1;
}
else
{
Rf_Value_Byte30=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 65://read byte31 high level
if(Rf_level==0)
{
Rf_step=66;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 66://read byte31 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=67;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte31=1;
}
else
{
Rf_Value_Byte31=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 67://read byte32 high level
if(Rf_level==0)
{
Rf_step=68;
}
else
{
Rf_sync_high_cnt++;
}
break;
case 68://read byte32 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=69;
if(Rf_sync_high_cnt>Rf_sync_low_cnt)
{
Rf_Value_Byte32=1;
}
else
{
Rf_Value_Byte32=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 69://read byte32 low level
Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
(Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
(Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
(Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
Rf_step=70;
break;
case 70://
if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
{
}
else
{
Rf_step=0;
}
break;
default:
break;
}
}
实测解码成功!
这样的代码肯定要优化
将后面部分:
case 68://read byte32 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=69;
if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
{
Rf_Value_Byte32=1;
}
else
{
Rf_Value_Byte32=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 69://read byte32 low level
Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
(Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
(Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
(Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
{
}
else
{
Rf_step=0;
}
Rf_step=70;
break;
case 70://
if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
{
}
else
{
Rf_step=0;
}
break;
default:
break;
修改为:
case 68://read byte32 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
Rf_step=69;
if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
{
Rf_Value_Byte32=1;
}
else
{
Rf_Value_Byte32=0;
}
Rf_sync_low_cnt=0;
Rf_sync_high_cnt=0;
}
break;
case 69://read byte32 low level
Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
(Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
(Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
(Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
{
}
else
{
Rf_step=0;
}
// Rf_step=70;
break;
// case 70://
// if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
// {
// }
// else
// {
// Rf_step=0;
// }
// break;
default:
break;
后,解码成功后一直运行在case 69:这里,不进主循环了。
MCU是HC32F030J8TA,48MHZ,状态机一直在69,计算量大,导致不能进入主循环。
继续优化:
void SysTick_IRQHandler(void)
{
Rf_level=Gpio_GetInputIO(Dec_RF_PORT, Dec_RF_PIN);
switch(Rf_step)
{
case 0:
if(Rf_level==0){ Rf_step=1; Rf_sync_low_cnt=0;}
break;
case 1://read sync low level
if(Rf_level==0){ Rf_sync_low_cnt++;}
else{ Rf_step=2;}
break;
case 2://read sync high level
Rf_sync_high_cnt++;
if((Rf_sync_low_cnt>RF_SYNC_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_SYNC_LOW_LEVEL_MAX))
{
Rf_step=3; Rf_sync_low_cnt=0;
}
else
{
Rf_step=0; Rf_sync_low_cnt=0;
}
break;
case 3://read byte1 high level
if(Rf_level==0){ Rf_step=4;}
else{ Rf_sync_high_cnt++;}
break;
case 4://read byte1 low level
if(Rf_level==0)
{
Rf_sync_low_cnt++;
}
else
{
if(Rf_Recv_num<31)
{
Rf_Recv_num++;
Rf_step=3;
}
else
{
Rf_Recv_num=0;
Rf_step=5;
}
if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
{
Rf_Value=Rf_Value<<1|1;
}
else
{
Rf_Value=Rf_Value<<1|0;
}
Rf_sync_low_cnt=0; Rf_sync_high_cnt=0;
}
break;
case 5://read byte32 low level
if(Rf_Value==0x4E91D874){ Machine_RF_UP_Flag=1;}
if(Rf_Value==0x4E91D878){ Machine_RF_DOWN_Flag=1;}
if(Rf_Value==0x4E91D872){ Machine_RF_STOP_Flag=1;}
Rf_step=0; Rf_Value=0;
break;
default:
break;
}
}
差不多了。