This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F1611红外解码模块 程序,中断进不去



新手,求指教。
定义的P1.0端口中断,现在中断老是进不去。红外接收用的VS1838。

#include<msp430f1611.h>
int time=0;//计数时间
int flag=0;//引导码标志
int count=1;//计数位数
int cel=0;//解码完标志
//unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int add,dat,lcd;

#define SET_RS    P3OUT|=BIT0;
#define RST_RS    P3OUT&=~BIT0;
#define SET_W    P3OUT|=BIT1;
#define RST_W    P3OUT&=~BIT1;
#define SET_E    P3OUT|=BIT2;
#define RST_E    P3OUT&=~BIT2;

void delay_us(unsigned t)
{
  unsigned int i;
  while(t--)
    for(i=1330;i>0;i--);
}

//****************液晶模块************************
void write_com(unsigned char a)         //写入指令
{
 // ReadStatusLCD();
  RST_RS;
   delay_us(5);
   RST_W;
    delay_us(5);
  P4OUT=a;
   delay_us(5);
  SET_E;
  delay_us(5);
  RST_E;
}

void write_dat(unsigned char a)         //写入数据
{
//  ReadStatusLCD();
  SET_RS;
   delay_us(5);
  RST_W;
   delay_us(5);
  P4OUT=a;
   delay_us(5);
  SET_E;
  delay_us(5);
  RST_E;
}

void getlcd()
{
  switch(dat>>8)
     {
  case 0x16:lcd=0x30;break;
  case 0x0c:lcd=0x31;break;
  case 0x18:lcd=0x32;break;
  case 0x5e:lcd=0x33;break;
  case 0x08:lcd=0x34;break;
  case 0x1c:lcd=0x35;break;
  case 0x5a:lcd=0x36;break;
  case 0x42:lcd=0x37;break; 
  case 0x52:lcd=0x38;break;
  case 0x4a:lcd=0x39;break;
  default:break;
    }
}
  
  
void LcdShow( void )
{

 write_com(0x80+0);                 //定位光标至第一行
 delay_us(50);
 
 write_dat(lcd);

}
//****************液晶模块************************
  
  
void main(void)
{
  WDTCTL=WDTHOLD+WDTPW;
  TACTL=TASSEL_1+TACLR;
  P1SEL|=0x00;
  P1DIR=0x00;//输入

  P1IES|=0x01;//下降沿捕获
  P1IE|=0x01;//p1.0允许中断
  
  //****************液晶初始化****************************   
 P4DIR=0XFF;                        //P4定义为数据接口
 P3DIR |=BIT0+BIT1+BIT2;            //P3定义为控制接口
 RST_E;                             //置位使能端   
 write_com(0x38);                   //8位数据接口,显示2行,5*7点阵显示
 delay_us(5);
 write_com(0x38);
 delay_us(5);
 write_com(0x38);
 delay_us(5);
 
 
 write_com(0x38);                   //8位数据接口,显示2行,5*7点阵显示
 delay_us(5);
 write_com(0x08);                   //显示关闭
 delay_us(5);
 write_com(0x01);                   //清屏
 delay_us(5);
 write_com(0x0c);                   //显示开关
 delay_us(5);
 write_com(0x06);                   //设置光标随写入数据右移
 delay_us(5);
 //****************液晶初始化****************************  
 lcd=0x30;LcdShow();
 
  _EINT();
  while(1)
  {
         if(cel)//如果解码完
         {
          getlcd();
           LcdShow();
         }
  }
}




#pragma vector=PORT1_VECTOR
__interrupt void PORT1_(void)
{
   time=TAR;
   TAR=0;
   P1IFG&=~BIT0;
   P1IE&=~BIT0;
   if(flag==0)
   {
     if(time>=320&&time<=500)
     {
       flag=1;
     }
     P1IES&=~BIT0;//下降沿中断
     P1IE|=BIT0;//允许中断
   }
   if(flag)//y有引导码
   {
      if(time>14&&time<20)
         {
          if(count<=16)
          {
            add|=0<<(16-count);
          }
          else dat|=0<<(16-count);
         }
      else 
         {
           if(count<=16)
          {
            add|=1<<(16-count);
          }
          else dat|=1<<(16-count);
         }
       P1IES&=~BIT0;//下降沿中断
       P1IE|=BIT0;//允许中断
   }
    
   if(count==32)
   {
     cel=1;//解码完标志
     TACTL&=~MC1;//关计数器
     flag=0;//引导码标志清0
     count=1;
    
   } 
   
   else
   {
    TACTL|=MC1; 
   }
  P1IFG=0x00;
}