5192|11

37

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

G2553关于IO口中断高低点平触发的问题 [复制链接]

用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  

#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循环,不知道为什么?这两句有什么区别?


谢谢各位!

最新回复

一定要把他们的状态设置成一样,而且在过程中不要改变  详情 回复 发表于 2012-7-30 09:19

点评

设置有问题吧! P1DIR |= BIT0; // set P1.0 to output direction 你设置P1.0有什么意义吗?你现在是要通过P1.3的输入状态来引发中断的,所以你应该把P1.3设为输入状态:P1DIR&=~BIT3;  详情 回复 发表于 2012-7-25 09:26
 
点赞 关注
个人签名谣言止于智者,聊天止于呵呵

回复
举报

37

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
好痛苦啊,被这个问题纠结一下午了……
 
个人签名谣言止于智者,聊天止于呵呵
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
楼主 那个电平触发我没试过  不知道是怎么回事
那个_EINT(); 和_BIS_SR(LPM4 + GIE); 是有很明显的区别的
前者只是打开总中断 而后者是打开总中断还要进入低功耗模式  进入低功耗模式后 由于你在P1口的中断中没有退出低功耗模式 所以单片机处理完中断后东西后会继续进入低功耗模式  直到下一次中断的来临

点评

那么_EINT( ); 和_BIS_SR(GIE); 是不是同一个意思呢?  详情 回复 发表于 2012-7-24 22:00
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 onlyyou1-1 的帖子

那么_EINT( ); 和_BIS_SR(GIE); 是不是同一个意思呢?

点评

是同一个意思,_EINT( ); 和_BIS_SR(GIE都是开总中断的意思  详情 回复 发表于 2012-7-29 22:36
你可以直接查看头文件里面的定义哈  详情 回复 发表于 2012-7-24 22:46
 
个人签名谣言止于智者,聊天止于呵呵
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 yujinjing13 的帖子

你可以直接查看头文件里面的定义哈
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

6
 
稍微调整了一下,是下降沿触发的

#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);
}

点评

而且把你的代码中BIT3改为BIT2,其他不变,就是低电平触发……  详情 回复 发表于 2012-7-25 11:00
呃……为什么你不加上拉电阻就可以用高电平触发P1.3了……  详情 回复 发表于 2012-7-25 10:15
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 楼主 yujinjing13 的帖子

设置有问题吧!  P1DIR |= BIT0;          // set P1.0 to output direction
你设置P1.0有什么意义吗?你现在是要通过P1.3的输入状态来引发中断的,所以你应该把P1.3设为输入状态:P1DIR&=~BIT3;

点评

P1.0控制LED,每次触发中断后LED会取反一次来标志中断发生,所以要把P1.0用作输出  详情 回复 发表于 2012-7-25 10:16
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 6楼 suhang 的帖子

呃……为什么你不加上拉电阻就可以用高电平触发P1.3了……
 
个人签名谣言止于智者,聊天止于呵呵
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 7楼 siyuelipeng 的帖子

P1.0控制LED,每次触发中断后LED会取反一次来标志中断发生,所以要把P1.0用作输出
 
个人签名谣言止于智者,聊天止于呵呵
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 6楼 suhang 的帖子

而且把你的代码中BIT3改为BIT2,其他不变,就是低电平触发……
 
个人签名谣言止于智者,聊天止于呵呵
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 4楼 yujinjing13 的帖子

是同一个意思,_EINT( ); 和_BIS_SR(GIE都是开总中断的意思
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

12
 
一定要把他们的状态设置成一样,而且在过程中不要改变
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表