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

MSP430F4250中断问题!!!!求大虾指教!非常感谢!!!

MSP430F4250中断问题

采用的是MSP430F4250 P1.4,P1.3,P1.2为中断按键; Init_LCD()为LCD初始化函数; 当在主函数中启用Init_LCD()后,P1.4管脚不停的中断执行中断函数中的if(P1IFG == BIT4)P6OUT ^= BIT7;; 当在主函数中屏蔽Init_LCD()后,工作正常; 于是怀疑是对Init_LCD()内的语句逐条屏蔽,发现当屏蔽LCDAVCTL1 = VLCD_3_32; 此条语句时,按键工作正常!但是LCD无法正常工作! 再次改善程序,屏蔽P1.4中断,开启P1.3和P1.2中断,开启Init_LCD()函数,发现中断按键无法正常工作!(怀疑可能是中断仍然在触发!)

#include#pragma vector = PORT1_VECTOR __interrupt void Port_1(void) { volatile unsigned int i; for (i = 0; i < 30000; i++); // Delay for 32 kHz crystal to if(P1IFG == BIT4)P6OUT ^= BIT7; if(P1IFG == BIT3)P6OUT ^= BIT7; if(P1IFG == BIT2)P6OUT ^= BIT7; P1IFG = 0X00; } //------------------------------------------------------------------------------ // LCD初始化函数 //------------------------------------------------------------------------------ void Init_LCD() { P5SEL = 0xFF; // Set COM pins for LCD P2SEL = 0xFF; LCDACTL = LCDON + LCD4MUX + LCDFREQ_64; // 4mux LCD, ACLK/64 LCDAPCTL0 = 0x0F; // Segs S0-S15 = outputs LCDAVCTL0 = LCDCPEN; // Enable LCDA charge pump LCDAVCTL1 = VLCD_3_32; } void main(void) { volatile unsigned int i; // volatile在编程源代码时,对这个变量不要使用优化 WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 FLL_CTL0 |= XCAP14PF; for (i = 0; i < 10000; i++); // Delay for 32 kHz crystal to P6DIR |= BIT7; //P6.7为输出; P6OUT &= ~BIT7; //P6.7输出0; P1IE |=0X1C; //P1.4、P1.3、P1.2中断开启; P1IES &= ~0X1C; //下降沿触发中断; P1IFG &= ~0X1C; //清除中断标志位; _EINT(); Init_LCD(); //LCD初始化函数 for(;;); } 

求大虾指教!非常感谢!!!求大虾指教!非常感谢!!!

灰小子:

楼主你好,能提供下电路图吗?

只从代码看不出有什么问题。

hsiangtong young1:

回复 灰小子:

图纸如上,感谢了!

hsiangtong young1:

回复 灰小子:

你好!图纸我发在下面的回复里面了!麻烦你了!

hsiangtong young1:

回复 灰小子:

你好!图纸我发在下面的回复里面了!麻烦你了!

灰小子:

回复 hsiangtong young1:

我觉得应该是在io中断服务程序中,你使用了一个循环进行长时间延时的原因。

建议你把这个延时改成用定时器来处理。

Ken Wang:

回复 hsiangtong young1:

楼主,

   看了你的程序,有两个小的建议:

1. 把使能中断的语句放到初始化LCD的语句之后。

2. 可以尝试使用定时器中断检测来是实现具备软件消抖的按键功能。在中断处理程序中,一般不建议加入延时程序。

谢谢

 

hsiangtong young1:

回复 灰小子:

今天将延时屏蔽后,还是同样的情况!问题主要是在Init函数,逐句屏蔽,发现

//LCDAVCTL0 = LCDCPEN; // Enable LCDA charge pump LCDAVCTL1 = VLCD_3_44; // to 3.44V

此两句任意一句屏蔽(即不开启LCD),则按键中断就正常,但是LCD也不工作,

hsiangtong young1:

回复 Ken Wang:

你好!我按照你所说的将中断使能函数置于LCD初始化函数之后,现在中断语句中的延时已经屏蔽了,仍然是同样的现象!

hsiangtong young1:

回复 Ken Wang:

现在测量发现,开启LCD和中断后,P1.4脚的电压为2.6V左右,P1.2、P1.3均为3V,是否有可能是DAC不断输出低电平导致P1.4不断中断呢?

求大虾指教!谢谢!

Ken Wang:

回复 hsiangtong young1:

楼主,

  2.6V也算是高电平了。你的供电电路用怎么样的,电源芯片的供的电流有多大呢?

你用示波器监控下P1.4管脚的电压,看不会不出现高低电平不断切换的波形?

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F4250中断问题!!!!求大虾指教!非常感谢!!!
分享到: 更多 (0)