本帖最后由 张全武5 于 2015-4-24 11:28 编辑
void INT0_init()
{
IT0=1;//触发方式为脉冲负边沿触
EX0=1;
EA=1;
}
void int0() interrupt 0
{
uchar j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1;
return; // ?????????????????????????退出到哪呢
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay(1);}
for(j=0;j<4;j++) //收集四组数据
{
for(k=0;k<8;k++) //每组数据有8位
{
while(IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay(1);}
while(!IRIN) //等 IR 变为高电平
{delay(1);}
while(IRIN) //计算IR高电平时长
{
delay(1);
N++;
if(N>=30)
{ EX0=1;
return;// ?????????????????????????退出到哪呢
} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}//end for k
}//end for j
if(IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
switch(IRCOM[2])
{
case 0x16: //此处为所选的红外遥控器操作码
distemp = 1;
break;
case 0x0c:
distemp = 2;
break;
case 0x08:
distemp = 3;
break;
case 0x42:
distemp = 4;
break;
case 0x46:
distemp = 5;
break;
}
EX0 = 1;
}
这样的红外线模块,,是不是只需要自己解码一下就行了,,不需要再编程发射程序了吧??红外接收头的型号不一样影响它的接收程序吗(自认为红外协议一样,程序也该一样的吧)?请各位赐教,也顺便看看程序可行吗
file:///C:Documents and Set
tingsAdministratorApplication DataTencentUsers1319441689QQWinTempRichOle6E)_AKT2(NT6D1EEU4KS2GN.jpg
-
.....
if(N>=30)
{ EX0=1;
return;// ?????????????????????????退出到哪呢
} 像这个函数就算没有RETURN;它一样会跳出if()函数啊。。。。是不是执行了 RETURN;语句它会跳出中断程序呢,,也就是说跳出void int0() interrupt 0函数???
一周热门 更多>