TI中文支持网
TI专业的中文技术问题搜集分享网站

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_RSP3OUT|=BIT0;
#define RST_RSP3OUT&=~BIT0;
#define SET_WP3OUT|=BIT1;
#define RST_WP3OUT&=~BIT1;
#define SET_EP3OUT|=BIT2;
#define RST_EP3OUT&=~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;//引导码标志清0count=1;}else{TACTL|=MC1;}P1IFG=0x00;
}

灰小子:

程序比较长,建议分模块进行调试。分别调试成功后再放一起综合调试

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F1611红外解码模块 程序,中断进不去
分享到: 更多 (0)