msp430编程问题

下面这段咋错了,P1.0有个LED,P2设为中断模式,P2中断为上升沿,在P2.0口接上VCC,不就应该LED亮吗?测试时为啥就是不亮呢?
#include <msp430x14x.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=BIT0;
P1OUT=0;
P2DIR=0;
P2IES=0;
P2IE=0;
P2IFG=0;

_EINT();
while(1);

}

#pragma vector=PORT1_VECTOR
__interrupt void SetV(void)
{
unsigned char key;
key=P2IFG;
if(key) P1OUT=1;
P2IFG=0;
return;
}

中断向量错了
#pragma vector=PORT2_VECTOR
P2.0口仅接VCC,初始化时清了P2IFG,也没有上升沿信号啊,接个按键到地。追问

上面程序我改过了,程序没问题了。我把P2.0口直接接VCC以获得上升沿,问题就出在这里。如果是导线另一端接上电源,再将另一端接触P2.0,就可以中断。如果导线接在P2.0,另一端什么都不接,他也会持续的中断。用手碰P2.0口,也会持续中断,也就是说只要有导体接触P2.0口就会持续产生了上升沿。很令人费解啊?

追答

I/O口设为输入状态,输入阻抗理论上是无穷大的,极易受到干扰,一个能量很小的瞬变干扰就能导至端口捕获到一个上升沿,导致中断标志位置位。所以要注意的是:内部不带或不设置为上、下拉的单片机输入端口像HC逻辑门输入端一样不要浮空。你所描述的试验(开关瞬间接通、静电、外部干扰传导或辐射)恰恰在P2.0上引起干扰导致进入中断。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-26
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR |= BIT0;
P1OUT &= ~BIT0;//P1输出低电平
P2DIR = 0;
P2SEL = 0;//p2初始化
P2IE=0;
P2IES=0;
P2IFG=0;
P2IE |=BIT0;
P2IE &=~BIT0;//对应的管脚由低到高跳变时使相应的标志置位
_EINT();
while(1);

}

#pragma vector=PORT2_VECTOR
__interrupt void SetV(void)
{
if((P2IN& BIT0)==1)
{
P2IFG |= BIT0;
P1OUT |= BIT0;
}
}追问

上面程序我改过了,程序没问题了。我把P2.0口直接接VCC以获得上升沿,问题就出在这里。如果是导线另一端接上电源,再将另一端接触P2.0,就可以中断。如果导线接在P2.0,另一端什么都不接,他也会持续的中断。用手碰P2.0口,也会持续中断,也就是说只要有导体接触P2.0就会持续产生上升沿。很令人费解啊?

相似回答