msp430G2553启动板编程

时间:2016-07-14 05:18:28

标签: msp430

我正在使用msp430g2553启动板制作程序。在这里我从P2.4获取输入,我想要我的输出来自P2.0,P2.1和P2.2。

在这个程序中,我必须从输入产生500ms的脉冲。我的输出将来自三个引脚的三个低脉冲。这意味着每当我将示波器探头连接到2.4时,我都可以看到脉冲。但我所做的计划并没有奏效。当我连接到示波器时,它什么都没有显示。

当我的输入脉冲为高电平时,我将得到三个低脉冲输出。

这是我的代码,请检查并告诉我代码中有什么问题?因为它不包含任何错误。

代码:

#include <msp430g2553.h>
#define CPU_F ((double)16000000)
#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))

char C_1, C_2;
void System_Clock_Init( void )
{
char i;
_NOP();
WDTCTL = WDTPW + WDTHOLD; // Close Watching dog
delay_ms(50);                  
if( ( CALBC1_16MHZ == 0xff ) || ( CALDCO_16MHZ == 0xff ) )              
 ((void (*)())RESET_VECTOR)();
BCSCTL1 = CALBC1_16MHZ;                                                                
DCOCTL = CALDCO_16MHZ;  //MCLK=DCOCLK=16MHz
BCSCTL2 = 0x06;//SMCLK=DCOCLK/8=2MHz
BCSCTL3 = 0x00;                                                                                            
IE1 &= ~OFIE;                                                                                                  

   do
   {
    IFG1 &= ~OFIFG;     
    for( i = 0; i < 100; i++ )
    {
        _NOP();
    }
    }
     while (IFG1 & OFIFG);   

      _NOP();
   }

  void IO_INIT(void)
   {
   NOP();
   P2SEL &= ~BIT4;
   P2SEL2 &= ~BIT4;
   P2REN &= ~BIT4;
  /*P2DIR |= BIT2;*/
   P2IES |= BIT4;
   P2IE  |= BIT4;
   P2IFG  &= ~BIT4;

   P2SEL &= ~(BIT0+BIT1);
   P2SEL2 &= ~(BIT0+BIT1);
   P2REN &= ~(BIT0+BIT1);
  //P2DIR &= ~(BIT0+BIT1);
   P2OUT &= ~(BIT0+BIT1);

   P2SEL &= ~BIT2;
   P2SEL2 &= ~BIT2;
   P2REN &= ~BIT2;
   //P3DIR &= ~BIT1;
   P2OUT &= ~BIT2;


    }

    void main(void)
     {
     System_Clock_Init();
    _NOP();
    //WDTCTL = WDT_ARST_1000;
    _NOP();      
     IO_INIT();
    _NOP();
    _EINT();//open all interrupt
    _NOP();
     LPM3;
     _NOP();
    while(1);
     }


     #pragma vector = PORT2_VECTOR
     __interrupt void PORT_C_Interrupt(void)

     {

     _NOP();
      delay_us(20);

      if( C_1 == 0xff)
      {
      if(!( P2IN & BIT4 )) C_2 = 0xff;
      }
      else
      {
      if(!( P2IN & BIT4 )) C_1 = 0xff;
      }
      if(( C_1 == 0xff) && ( C_2 == 0xff))
      {
      //output A B D
       P2OUT |= BIT0;
       delay_ms(2);
       P2OUT |= BIT1;
       P2OUT &= ~BIT0;
       delay_ms(2);
       P2OUT |= BIT2;
       P2OUT &= ~BIT1;
       delay_ms(2);
       P2OUT &= ~BIT2;   
       delay_ms(2);

       P2OUT ^= BIT1;                 
       P2IFG &= ~BIT1;                
       C_1 =0x00;
       C_2 =0x00;
       }
       _NOP();
       }

1 个答案:

答案 0 :(得分:0)

P2IFG &= ~BIT1;

中断来自P2.4。该行不会清除引脚4的中断,因此将连续调用中断处理程序。

/*P2DIR |= BIT2;*/
//P2DIR &= ~(BIT0+BIT1);

如果您确实希望这些引脚输出,那么最好不要注释掉它们的配置。