|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-8-16 17:59:45
|
显示全部楼层
本帖最后由 fxhfxh 于 2012-8-16 18:01 编辑
void ex1(void) interrupt 2 using 0 //外部中断1,
{
uchar i,tl;//,th;
uint l,m;
EX1=0; //外部中断1禁止
TR1=1;
i=0;
//==========================================================================
while(i<24)
{
while(shou==0); //
//tl=TL1;
//th=TH1;
l=TH1;
tl=TL1;
TH1=TL1=0; //记录低电平长度并初始化高电平头
//l=th;
l=((l<<8)+tl);
if(i==0){ //处理低电平
if(l>3000) //if(l>2360)
{ //确认是引导头
m=l/31;
}
else //不符合规则(出错)
{ i=0;
TR1=0;
TH1=TL1=0;
break;
}
}
else
{
if(((l>(m-(m/3)))&&(l<(m+(m/3))))||((l>((m*2)-(m/2)))&&(l<((m*3)+(m/3)))));
else
{
i=0;
TR1=0;
TH1=TL1=0;
break;
}
}
/*=====================================================================*/
while(shou==1); //等待低电平到来
//th=TH1;
//tl=TL1;
l=TH1;
tl=TL1;
TH1=TL1=0;
//l=th;
l=((l<<8)+tl);
// if((l>460)&&(l<760)) //短为0 短610
if(((l>(m-(m/4)))&&(l<(m+(m/4)))))
{
i++;
ma1<<=1; //高低位相反问题
}
//else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
else if(((l>((m*2)-(m/2)))&&(l<((m*4)+(m/2))))) //zy!!!
//else if((l<((m*3)+(m/2)))) //zy!!!
{
i++;
ma1<<=1; //高低位相反问题
ma1+=1; //高低位相反问题
}
else //不符合规则出错
{
i=0;
TR1=0;
TH1=TL1=0;
break;
}
/*====================================================*/
if(i==8) jmz3=ma1; //地址
if(i==16) jmz2=ma1; //地址
if(i==24) //
{
jmz1=ma1;
// zx_ykxh(); //执行遥控信号
}
}
TR1=0;TH1=0;TL1=0; EX1=1;//
}
//=====================================================================================
这是中断程序。 |
|