单片机程序
void receive() //接收数据
{
uchar count;
uchar i=0x00;
uint k=0x00;
DATA=0;
i=0x00;
if(!in)
{
while(!in) //前导电平,4*48us
{
k++; //4+2+3+4=13
delay80us();//(40us)+1+2+2+2+2+3+3=15+40us
if(k>220)
{DATA=0;return;} //同步码 低位限时(10000~~21000us)
}
if(k<104)
{DATA=0;return;}//同步码 低位限时
for(count=0;count<24;count++)//开始收集
{
if(in)
{
DATA=DATA<<1;
i=0;
while(in) //高位计数i*44.75us
{
delay80us();
i++;//4+(2+1+2+3+3)=15
if(i>23)
{DATA=0;return;}//高位限时解码
}
if(i<10)
{
if((2
else
{DATA=0;return;}
}
else
{
if((12
{DATA=DATA|0x01;}//记高电平(940-)实际1450us
else
{DATA=0;return;}
}
}
while(!in)
{delay80us();}//位计数
}
}
}
void sjzh() //转换接收到的数据
{
char i=0;
if(DATA>0)
{
for(i=2;i>=0;i--)
{
D[i]=DATA;
DATA>>=8;
}
}
DATA=0;
}