This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5529:MSP430F5529 GPIO中断工作:-(.

Guru**** 2587355 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618395/msp430f5529-msp430f5529-gpio-interupt-not-working--

部件号:MSP430F5529

大家好,

这里是新手。

我一直在使用一些代码和MSP430F5529启动板。 我目前正在尝试让我的头脑绕过Interupts。 请有人解释我的(简单)代码在哪里出错了?

当我使用中断点时,似乎程序正遇到中断,但While循环未确认标志== 1?

包括"MSP4S.h"
易失性int标志=0;

Void主(void)

P1REN = 0x02;//启用开关p 1.1 上的上拉电阻器  
p1DIR = 0x01;//将WFP 1.0 设置为输出,并将pp 1.1 切换为输入
P1OUT = 0x02;// LED关闭,默认,开关拉高

P1IES |= 0x02;//开关上的中断->低(1)
P1IFG &=~0x00;//清除标志
P1IE |= 0x02;//启用引脚1.1 上的中断

__enable_interrupit();
同时(1)
   {
     IF (标志= 1)
     {
       P1OUT ^= 0x01;//LED亮起   
       标志= 0;
     }
     否则
     {
       //不执行任何操作
     }  
   }
}
#pragma vector = Port1_vector
__interrupt void P1_ISR(void)

 标志= 1;
 P1IFG &=~0x00;//清除标志
}

 

提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的中断标志不会通过使用“&&=~0x00”清除-请改用“&&=~0x02”。 您必须注意触点弹跳,否则可能会在单次按下时出现多个中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Dennis,

    非常感谢,这解决了我的问题。

    我的下一个问题是去弹跳,因为我的LED每次按下都会闪烁。  我了解如何通过硬件实现这一点,但我如何才能最好地在软件中实现这一点?

    再次感谢,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关代码示例的基本问题: 启动main()时是否立即关闭监视程序 ?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的方面...我没有。 这是否会导致我的问题??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    单个监视程序肯定会导致问题。 它肯定会触发'NMI'类型INT -我不记得CCS将向此向量默认的时候,但你可以通过CCS调试中的'suspend '找到它-它可能会显示代码只是在一个位置旋转。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Otto是对的-如果你不给他喂食或阻止他,看门狗会一次又一次地重新启动你的系统。 要停止看门狗,只需将此行放在main()中的顶部:

    WDTCTL =(WDTPW | WDTHOLD); 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Richard Finch 说:
    但是我如何才能最好地在软件中实现这一点[/QUOT]

    有多种方法可以执行此操作。 在我看来,按钮中断是过度使用的-我更喜欢计时器,每10毫秒触发一次,以查看按钮状态是否已更改。 10毫秒足以进行弹跳。 但使用中断当然是可以的。 您也可以在按钮中断和计时器中断内启动计时器。您可以确定按钮按下是否仍然存在,如果仍然存在,则通过信号向主发送有效的按钮按下信号。 但如果您没有硬件弹出功能,您肯定需要某种软件弹出功能,否则您将会为单个人工按下操作系统检测到多个按钮。