用低频时钟写红外解码,为什么总是出现不了效果啊:程序如下:
#define IR_sIG_Value P2IN & BIT0
void Infrared_Port_initialize()
{
P2DIR &=~BIT0; // P2.0方向设置为输入
P2IE |= BIT0; // P2.0中断允许
P2IES |= BIT0; // P2.0下降沿触发
P2IFG &=~BIT0; // P2.0中断标志清除
_EINT(); // 使能总中断
}
void Delayms(uchar ms)
{
uchar i;
TACTL |= TASSEL_1;
for(i = 0; i < ms; i++)
{
TACCR0 = 29;
TACCTL0 &= ~CCIFG;
TACTL |= TACLR + MC_1;
while((TACCTL0 & CCIFG)==0);
TACTL &= ~MC_1;
}
}
#pragma vector = PORT2_VECTOR
__interrupt void Port_1(void)
{
P2IFG &=~ BIT0; // P2.0中断标志清除
P2IE &=~ BIT0; // P2.0中断允许
uchar CodeTemp; //编码字节缓存变量
uchar IRcode[4] = {0,0,0,0}; //定义一个4字节的数组用来存储代码
uchar i,j,k; //延时用的循环变量
for(k=0;k<9;k++)
{
Delayms(1);
if((IR_sIG_Value) == 1) //如果0.9ms后IR_sIG_Value==1说明不是引导码
{
k=9;
break;
}
else if(k==8) //如果持续9ms低电平说明是引导码
{
while((IR_sIG_Value) == 0);
Delayms(5);
while((IR_sIG_Value) == 1);
for(i=0;i<4;i++) //分别读取4个字节
{
for(j=1;j<=8;j++) //每个字节8个bit的判断
{
while((IR_sIG_Value) == 0); //等待上升沿
Delayms(1);
if((IR_sIG_Value)==1) //如果IRsignal是"1",高位置"1",
{ //并向右移一位
//delay_ms(1);
CodeTemp = CodeTemp|0x80;
if(j<8) CodeTemp=CodeTemp>>1;
}
else if(j<8)
CodeTemp=CodeTemp>>1; //如果IRsignal是"0",则直接向右移一位
while((IR_sIG_Value) == 1);
}
//P1OUT ^= BIT0;
IRcode=CodeTemp;
CodeTemp=0;
}
// P1OUT ^= BIT0;
//IRcode[2]准确度较高可取IRcode[2]作为判断标志 //
}
}
key = IRcode[2];
Delayms(30);
P2IE |= BIT0;
}
大神求解啊