G2553关于IO口中断高低点平触发的问题

2019-03-24 13:50发布

用G2553做IO口中断,P1.0控制LED,另外选一个IO口做中断处理。发现,寄存器P1IES的值对于是高电平还是低电平触发完全没有影响。
分别试了P1.1~P1.7口,发现它们的触发方式都是确定了的:
低电平触发:P1.1    P1.2    P1.3     P1.5
高电平触发:P1.4    P1.6    P1.7
不论P1IES怎么设置,以上结论都成立,每个IO都试过了,那这样的话,P1IES还有什么意义?

代码如下(用P1.7中断):

#include  <msp430g2553.h>

#define KEY BIT7

void button_init()
{
        P1DIR |= BIT0;          // set P1.0 to output direction
        P1IE |= KEY;           // P1.3 interrupt enabled
        P1IES = 0x00;
        P1IFG &= ~KEY;         // P1.3 IFG cleared
        P1REN |= KEY;
}

void main()
{
        button_init();
        _EINT();                        //换成_BIS_SR(LPM4 + GIE)就会自动跳出while(1)...????
        while(1)
                _NOP();
}

#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
        if (P1IFG & KEY)
        {
                P1OUT ^= BIT0;                  // P1.0 = toggle
                P1IFG &= ~KEY;                 // P1.3 IFG cleared
        }
}


另外还有个问题:main函数中的_EINT(); 换成_BIS_SR(LPM4 + GIE); 后就老是跳出while循环,不知道为什么?这两句有什么区别?


谢谢各位! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
yujinjing13
1楼-- · 2019-03-24 19:22
< 好痛苦啊,被这个问题纠结一下午了……
onlyyou1-1
2楼-- · 2019-03-25 01:15
< :TI_MSP430_内容页_SA7 --> 楼主 那个电平触发我没试过  不知道是怎么回事
那个_EINT(); 和_BIS_SR(LPM4 + GIE); 是有很明显的区别的
前者只是打开总中断 而后者是打开总中断还要进入低功耗模式  进入低功耗模式后 由于你在P1口的中断中没有退出低功耗模式 所以单片机处理完中断后东西后会继续进入低功耗模式  直到下一次中断的来临
yujinjing13
3楼-- · 2019-03-25 03:39
 精彩回答 2  元偷偷看……
onlyyou1-1
4楼-- · 2019-03-25 09:37
你可以直接查看头文件里面的定义哈
suhang
5楼-- · 2019-03-25 10:23
稍微调整了一下,是下降沿触发的

#include  "msp430g2553.h"

#define KEY BIT3

void button_init()
{
        P1DIR |= BIT0;          // set P1.0 to output direction
        P1IE |= KEY;           // P1.3 interrupt enabled
        P1IES = KEY;
        P1IFG &= ~KEY;         // P1.3 IFG cleared

}

void main()
{
        button_init();
        while(1)
        {
            __bis_SR_register(LPM4_bits + GIE);
        }
}

#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
        if (P1IFG & KEY)
        {
                P1OUT ^= BIT0;                  // P1.0 = toggle
                P1IFG &= ~KEY;                 // P1.3 IFG cleared
        }
        __bis_SR_register_on_exit(LPM4_bits + GIE);
}
siyuelipeng
6楼-- · 2019-03-25 11:22
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章