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.

[参考译文] MSP430G2553:中断时 I/O 操作错误

Guru**** 2551110 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/824420/msp430g2553-i-o-action-was-wrong-when-interrupt

器件型号:MSP430G2553

您好!  

我选择 MSP430G2553 LaunchPad 来开发我的项目。

P2.3被分配为输出。 通过编程、我分配的 P2.3始终为高电平(3.3V)。

但 P2.3在中断时被下拉。 我找不到 有关代码的任何错误。


如下所 示的编程代码(使用 IAR 嵌入式工作平台):

#include"msp430g2553.h"

定义周期200

#define NaturalF 118800

 

int flag_IE=1;

int 计数=2;

 

空 delayus (int us)

int i;

for (i=0;<us;i++))

  _DELAY_CYCLES (1);

 

void main (void)

  

  WDTCTL = WDTPW+WDTHOLD;

    

  DCOCTL|=DCO1+DCO0;

  BCSCTL1|=RSEL3;

  CACTL1 =CAON+ CAREF_0+CAIE + CAIES;

  CACTL2 = P2CA1 + P2CA0 + CAF;     

 

    P1DIR |= BIT0+BIT1+BIT4+BIT5+BIT6+BIT7;

    P1SEL2=0;

    P1SEL = 0;

    P1REN=0;

     P2DIR |= BIT5+BIT1 + BIT2 + BIT3 + BIT4 + BIC7;

    P2SEL = 0;

    P2SEL2=0;

    P2REN=0;

    

    P1OUT&=~BIT4+BIT5+BIT6+BIT7;

    P2OUT&=~BIT2+BIT4;

    P2OUT|=BIT5+BIT1 + BIT3;

    

    _enable_interrupt ();

 

#pragma vector=COMPARATORA_vector

_interrupt void comp (void)

  //P1IE=0;

  CACTL1 &=~ CAIE;

  P2OUT|=BIT5+BIT3;

              if (flag_IE=1)

              {

                P1OUT&=~BIT5+BIT6;

                P2OUT&=~BIT1 + BIT2;

                P1OUT|=BIT4+BIT7;

               P2OUT|=BIT5+BIT4+BIT3;

                delayus (26);//9.947us

                //P2OUT|=BIT3+BIT7;

                P2OUT&=~BIT1;

                P2OUT|=BIT5+BIT2+BIT3;

                P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                delayus (22);

                // P2OUT|=BIT3+BIT7;

                P1OUT&=~BIT4+BIT7;

                P1OUT|=BIT5+BIT6;

                P2OUT&=~BIT1 + BIT2;

                P2OUT|=BIT5+BIT3;

                delayus (26岁);

                //P2OUT|=BIT3+BIT7;

                P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                P2OUT|=BIT5+BIT1 + BIT3;

                P2OUT&=~BIT2+BIT4;

                FLAG_IE=0;

                CACTL1 &=~ CAIES;

 

              }

             其他           

              {

                P1OUT&=~BIT4+BIT7;

                P1OUT|=BIT5+BIT6;

                P2OUT&=~BIT1 + BIT2;

                P2OUT|=BIT5+BIT3+BIT4;

                delayus (26岁);

                P2OUT&=~BIT1;

                P2OUT|=BIT5+BIT2+BIT3+BIT4;

                P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                delayus (22);

                P1OUT&=~BIT5+BIT6;

                P2OUT&=~BIT1 + BIT2;

                P1OUT|=BIT4+BIT7;

                 P2OUT|=BIT5+BIT3+BIT4;

                delayus (26岁);

                P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                P2OUT|=BIT5+BIT3+BIT1 +BIT4;

                P2OUT&=~BIT2+BIT4;

                FLAG_IE=1;

                CACTL1 |= CAIES;

                // P1IES|=BIT0;                 

              }

  CACTL1|= CAIE;

    CACTL1 &=~ CAIFG;

 

 

P1.0和 P1.1之间的输入信号显示为黄色线。

P2.3的输出信号 显示为蓝色线

您还可以发现、P2.3的信号在中断时被下拉了两次。

 

如果可以让我对代码有一些了解吗?

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

    您好!

    在您的代码中,存在一些问题:

    如果您只想复位 BIT1和 BIT2、代码应如下所示:

    P2OUT &=~(BIT1 + BIT2);

    此致

    Johnosn