SparkFun Forums 

Where electronics enthusiasts find answers.

Discussions on how to get your MSP JTAG programmer up and running.
By dushyant
#190681
Hello,
I am making the program in msp430g2553 launchpad. In this my input is from pin2.4. and my output will be three pulses from pin2.0, pin2.1, pin2.2. The code i am posting here in this the output i am getting is from pin2.0 high pulse, from pin2.1 low pulse and from pin2.2 high pulse.

I want all the three low pulses.
can anyone help me with this.
Code: Select all
#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))

int i;
char C_1, C_2;
void System_Clock_Init( void )
{
    char i;
    _NOP();
    WDTCTL = WDTPW + WDTHOLD;                                         // Close Watching dog
    delay_ms(20);                                                     // 1MHz
    if( ( CALBC1_16MHZ == 0xff ) || ( CALDCO_16MHZ == 0xff ) )        // FLASH A was cleared!!!
        ((void (*)())RESET_VECTOR)();
    BCSCTL1 = CALBC1_16MHZ; //ACLK=32768Hz
    DCOCTL = CALDCO_16MHZ;  //MCLK=DCOCLK=16MHz
    BCSCTL2 = 0x06;//SMCLK=DCOCLK/8=2MHz
    BCSCTL3 = 0x00;//cap=1pF
    IE1 &= ~OFIE;//close crystal error interrupt

    TA0CCR0 =32-1; // PWM Period --> needs to be adjustable
    TA0CCTL1 = OUTMOD_2; // CCR1 reset/set
    TA0CCR1 = CCR0/2; // CCR1 PWM duty cycle 50% -->needs to be adjustable
    TACTL = TASSEL_1 + MC_1; // SMCLK, up mode

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

    _NOP();
}

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

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

	    P2SEL &= ~BIT2;
	    P2SEL2 &= ~BIT2;
	    P2REN &= ~BIT2;
	    P2DIR &= ~BIT1;
	    P2DIR |= BIT1;
	    P2OUT &= ~BIT2;
}

void main(void)//29uA
{
    System_Clock_Init();
    _NOP();
    //WDTCTL = WDT_ARST_1000;//feed watch dog  ?????下面的程序执行时间???
    _NOP();
    IO_INIT();
    _NOP();
    _EINT();//open all interrupt
    _NOP();
    LPM3;
    _NOP();
    while(1);
}
//------------------------------------------------------------------------------
//Function: Start Timer 0 A0 for Hour Timing 500ms
//------------------------------------------------------------------------------
#pragma vector = PORT2_VECTOR
#pragma vector = TIMER0_A1_VECTOR
__attribute__((__interrupt__(TIMER0_A0_VECTOR)))
void Timer0_A(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 |= BIT1;
    P2OUT |= BIT0;
    delay_ms(2);
    P2OUT |= BIT2;
    P2OUT &= ~BIT0;
    delay_ms(2);
    P2OUT |= BIT2;
    P2OUT &= ~BIT1;
    //delay_ms(2);
    P2OUT &= ~BIT2;
    P2OUT &= ~BIT1;
    delay_ms(2);

    C_1 =0x00;
    C_2 =0x00;
  }
  _NOP();
}