代码如下:
#include <stc12.h>#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RF=P2^5; //射频解调信号输入
uchar dat[2][3]; //解码过程中临时数组
uchar s_k; //窄脉冲宽度
void delay(unsigned int ms) //此处换用不同单片机需调整参数
{
unsigned char h;
while(ms--)
{
for(h=0;h<80;h++);
}
}
void delay_1ms(uint x) //1毫秒延时(禁用中断1ms,开启中断1.7ms)
{
uchar b,c;
for(x;x>0;x--)
{
for(b=8;b>0;b--)
{
for(c=215;c>0;c--);
}
}
}
//============================接收解码部分========================================//
void RF_decode()
{
uchar ii=0,j=0,k=0,rep=0;
uint h_k=0; uchar s; //短脉冲宽度
//-------------------------------数据接收-----------------------------------------
s_k=0;
while(RF && s_k<250) //检测头信号前一个高脉冲的宽度
{
delay(1);//0.36ms
s_k++;
}
while(!RF)
{
delay(1);
h_k++;
} //检测头脉冲的宽度
if(((s_k*24)<h_k)&&(h_k<(s_k*38))) //引导码宽度是窄脉冲的32倍 24/38
{
for(rep=0;rep<2;rep++)//两次检测
{
for(ii=0;ii<3;ii++)//3字节
{
for(k=0;k<8;k++)//每个字节8位
{
j=0;
while(RF&&j<245)
{
delay(1);
j++;
}//
if(j>(s_k-s_k/2-s_k/3)&&j<(s_k*2))
dat[rep][ii]&=~(1<<((7-k)));
else if(j>(s_k*2)&&j<(s_k*5))
dat[rep][ii]|=(1<<(7-k));
else
return;//乱码退出
j=0;
while(!RF&&j<150)
{
delay(2);
j++;
} //跳过低电平
}//for(K)
}
|