打印

msp430g2553的IO中断问题

[复制链接]
3005|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
写了个MSP430g2553的io中断程序,初始化为P1.0P1.6为输出,P1.345为上拉输入,在按键按下之后,硬件仿真读取P1IFG寄存器值,发现PIIFG的第6位莫名置一,我想问为什么会这样,这种情况怎么解决;谢谢各位了

#include "io430.h"
#define CPU_F ((double)1000000)//设置时钟频率改变延时,为mcl时钟频率
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))//微秒级
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))//毫秒级

#define Led_Green  P1DIR |=BIT6;P1OUT ^=BIT6;

void KeyGpio_Init()
{
  P1DIR|=BIT0; //P1.0为输出  
  P1OUT &=~BIT0;
  P1DIR &= ~(BIT3+BIT4+BIT5);//设置P1.345为输入  
  P1REN |=BIT3+BIT4+BIT5;//启动内部上下拉电阻
  P1OUT |=BIT3+BIT4+BIT5;//设置为上拉电阻
  P1IFG =0;  
  //P1IFG &=~(BIT3+BIT4+BIT5);
  P1IE  |=BIT3+BIT4+BIT5;//设置中断使能(位 = 1:中断被启用。)
  P1IES |= BIT3+BIT4+BIT5;//位 = 1:用一个高电平到低电平转换来设定 PxIFGx 标志
  __enable_interrupt();  //使能中断,这是一个C编译器支持的内部过程。
  
}


void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;  
  DCOCTL=CALDCO_1MHZ;
  BCSCTL1=CALBC1_1MHZ;
  KeyGpio_Init();
  while(1)
  {
    Led_Green;
   
    delay_ms(500);
  
  }  
}

#pragma vector = PORT1_VECTOR//TIMER0_A0_VECTOR
__interrupt void Port_1( void )//目标1s进一次中断
{
    //__enable_interrupt();  //使能中断,这是一个C编译器支持的内部过程。
//    unsigned int Bool = 0;
//    Bool = P1IFG & (~P1DIR);//通过中断标志读出触发中断的键值
//    delay_ms(1);//延时消除抖动
//    if((P1IN&Bool)==0)//判断中断键值与当前按键按下的键值是否对应(由于IO默认设置为高电平,按下为低)
//    {
//      switch(Bool)
//      {
//        case BIT3:
//              P1OUT ^= BIT0;
//                  break;
//        case BIT4:
//              P1OUT ^= BIT0;
//                  break;                 
//        case BIT5:
//              P1OUT ^= BIT0;
//        default:     break;            
//      }
//   
//    }
  switch(P1IFG)//
  {
        case 0X08:
              P1OUT ^= BIT0;
                  break;
        case 0X10:
             // P1OUT ^= BIT0;
                  break;                 
        case 0X20:
            //  P1OUT ^= BIT0;
       default:     break;   
  
  }

// P1OUT ^= BIT0;
  P1IFG =0;  
// P1IFG &=~(BIT3+BIT4+BIT5);  
}

问题.jpg (392.65 KB )

问题.jpg

相关帖子

沙发
dirtwillfly| | 2017-12-7 09:30 | 只看该作者
奇怪的问题。
第一次遇到这种问题,不知道原因是什么。

从中断服务程序的逻辑上,建议按照P1IFG & BIT5来判断具体是哪个按键的中断

使用特权

评论回复
板凳
张小朋|  楼主 | 2017-12-7 16:39 | 只看该作者
dirtwillfly 发表于 2017-12-7 09:30
奇怪的问题。
第一次遇到这种问题,不知道原因是什么。

好的,谢谢,这个问题我感觉可能是我IO结构上的概念没有搞清,我再找找

使用特权

评论回复
地板
张小朋|  楼主 | 2017-12-7 16:59 | 只看该作者
dirtwillfly 发表于 2017-12-7 09:30
奇怪的问题。
第一次遇到这种问题,不知道原因是什么。

谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2DIR 可导致设置相应的P1IFG 或者 P2IFG 标志置位。

1.jpg (31.26 KB )

1.jpg

使用特权

评论回复
评分
参与人数 1威望 +8 收起 理由
dirtwillfly + 8 很给力!
5
dirtwillfly| | 2017-12-7 20:05 | 只看该作者
张小朋 发表于 2017-12-7 16:59
谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2 ...

感谢分享

使用特权

评论回复
6
qiufengsd| | 2017-12-7 22:09 | 只看该作者
7
wengh2016| | 2017-12-7 22:09 | 只看该作者
中断不是置位标志位吗?

使用特权

评论回复
8
qiufengsd| | 2017-12-7 22:13 | 只看该作者
MSP430G2553简单的多按键中断

使用特权

评论回复
9
wengh2016| | 2017-12-7 22:13 | 只看该作者
张小朋 发表于 2017-12-7 16:59
谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2 ...

MSP430的外部中断看着复杂么

使用特权

评论回复
10
iamaiqiyi| | 2017-12-8 21:52 | 只看该作者
在中断之前这个寄存器的数值是多少?

使用特权

评论回复
11
dzfansman| | 2017-12-8 21:52 | 只看该作者
IO的中断标志怎么置位的

使用特权

评论回复
12
sanxingnote7| | 2017-12-8 21:53 | 只看该作者
单步调试查看标志寄存器了吗

使用特权

评论回复
13
iamaiqiyi| | 2017-12-8 22:02 | 只看该作者
每次置位都是这样吗?

使用特权

评论回复
14
dzfansman| | 2017-12-8 22:02 | 只看该作者
张小朋 发表于 2017-12-7 16:59
谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2 ...

这个不是中断的时候的标志位吗?

使用特权

评论回复
15
sanxingnote7| | 2017-12-8 22:02 | 只看该作者
产生中断之前的寄存器数据呢

使用特权

评论回复
16
minzisc| | 2017-12-10 16:28 | 只看该作者
张小朋 发表于 2017-12-7 16:59
谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2 ...

这样也会产生中断吗?

使用特权

评论回复
17
selongli| | 2017-12-10 16:29 | 只看该作者
楼主这个问题是怎么解决的?

使用特权

评论回复
18
fentianyou| | 2017-12-10 16:29 | 只看该作者
这个硬件电路是不是配置完成之后?

使用特权

评论回复
19
minzisc| | 2017-12-10 16:34 | 只看该作者
张小朋 发表于 2017-12-7 16:59
谢谢,问题找到了,
注: 当 改变  PxOUT 或 PxDIR  时 的 PxIFG  标 志
写入 P1OUT,P1DIR,P2OUT,或 P2 ...

为什么设置IO会产生flag置位?

使用特权

评论回复
20
fentianyou| | 2017-12-10 16:34 | 只看该作者
平时还真没有注意到这个问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝