#i nclude <reg51.h>
sbit RemPin = P3^2 ;
unsigned char receive[3];
void RemIn(void) interrupt 0 using 1
{
unsigned char i,j;
unsigned int temp;
EA=0;
TH0=0;
TL0=0;
while (!RemPin); //等待高电平
TR0=1;
while (RemPin) //等待低电平
if (TF0==1) goto RemExit; //超时就退出;
TR0=0;
temp=TH0;
temp=(temp<<8)+TL0;
if (temp>6000 || temp<4000) //判断同步码的宽度
{
temp=TH0;
goto RemExit;
}
//同步码检测成功
for (i=0; i<3; i++) //解 3*8=24 位码
for (j=0; j<8; j++)
{
while (!RemPin); //等待高电平
TH0=0;
TL0=0;
TR0=1;
while (RemPin) //等待低电平
if (TF0==1) goto RemExit; //超时就退出
TR0=0;
temp=TH0;
temp=((temp<<8)+TL0);
// /*
if (temp>400 && temp<600)
{
receive[i]=receive[i]<<1;
receive[i]=receive[i]+1; //保存 1
}
else if (temp>100 && temp<234)
{
receive[i]=receive[i]<<1; //保存0
}
else goto RemExit;
}
temp=0;//在这里设置一个断点,运行到这里后看看receive里的三个字节数据就是解码的结果
RemExit:
{
TR0=0;
EA=1;
RemPin=1;
TF0=0;
return;
}
}
///*
main()
{
RemPin=1;
EA=1;
IT0=1; //设定INT0的触发方式为脉冲负边沿触发
EX0=1; //打开INT0中断请求
TMOD=0x01;
while (1);
//RemPin=1;
} |