新手,求指教。
定义的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; }