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.

MSP430G2221可以同时开多个引脚中断吗

Other Parts Discussed in Thread: MSP430G2221

您好!
我MSP430G2221上的P1.3连接一个按键,我通过
  P1DIR &= ~BIT3;
  P1IE |= BIT3; 
  P1IES |= BIT3;
  __enable_interrupt();
开了P1.3的按键中断

(1)请问比如我还想同时开P1.6中断的话,是否同样加语句:
  P1DIR &= ~BIT6;
  P1IE |= BIT6; 
  P1IES |= BIT6;
就可以了?
(2)那中断处理函数可以设置不同吗?比如我P1.3的中断处理申明如下:
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)

那P1.6的中断处理该怎么申明?

谢谢
 

 

 

  • 都一样设置,在中断处理函数里根据P1IFG的内容不一样进行相应处理。

  • 在Peter的基础上补充一下:可以这么写

    __interrupt void PORT1_ISR(void)

    {

      switch(P1IFG)

      case:

      case:

    }

    这么来写。

  • 你好:

    下面中断向量声明和入口函数是针对大的中断模块的,也就是说中断的入口向量是针对大的模块的,所以只要是P1口的中断入口函数均一样,对于一个模块中的不同子块的中断,只是各自的中断标志不一样,那么子块的中断服务函数均都在大块中断服务函数下面,(这就好比一个人,任何人要让我做事前首先都是喊我名字,当把我喊答应了,然后我就根据别人指派的内容动作相应的肢体。比如让我走我就用腿了,让我说话我就用嘴了等等);这里我的名字就是大中断服务的入口函数,嘴和腿相当于子块的相依中断标志,如下:

    #pragma vector=PORT1_VECTOR

    __interrupt void PORT1_ISR(void)

    {

    int1...

    int2...

    ...

    }其实判断那些中断的入口时一样的,根据下表可以一目了然。每个MCU的datasheet都有中断源向量表都是有的(这是MSP430G2221的),基本判断方法是:只要在下表中不在同一行中的均是单独的入口函数。

    比如其他型号的TimeB的不同ccr值产生的中断也可写成

    #pragma vector=TIMEB_VECTOR

    __interrupt void TIMEB_ISR(void)

    {

    int1...

    int2...

    ...

    }

    希望能帮到你,谢谢、、

  • 1.加那几句是对的;

    2.PORT1的8个GPIO口共享一个中断向量PORT1_VECTOR,需要在中断服务函数中去判断到底是哪一位中断标志位被置位了触发的该次中断,然后在进入相应的中断源应该执行的中断服务函数,程序结构就可以使用鸵鸟蝈蝈提供的哪种方式;