新手,求指教。
定义的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; }
灰小子:
程序比较长,建议分模块进行调试。分别调试成功后再放一起综合调试