hi, i am trying to make 3 floor elevator by using servo motor. i have written a code but it doesn't work and i don't know why.
here is my code;
#include <msp4302553.h> #define smclk 1000000 #define servo_freq 50 void servorot(); int main(void) { int pwm_period = smclk /servo_freq; WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation P1DIR &= ~(BIT3 + BIT4 + BIT5); //set 3-4-5 input P1REN |= (BIT3 + BIT4 + BIT5); // 3-4-5 pull up enable P1IE |= (BIT3 + BIT4 + BIT5); //interrupt enable P1IES |= BIT3 + BIT4 + BIT5; //high-to low interrupt P1IFG &= ~(BIT3 + BIT4 + BIT5); // P1.3-4-5 IFG cleared P2DIR |= BIT2; // P2.2 output; P2SEL |= BIT2; //set timer TA.1 TA1CCTL0 = CCIE; //interrupt enable TA1CCR0 = pwm_period-1; // Set Timer_A1 period to TA1CCTL1 = OUTMOD_7; // CCR1 reset/set TA1CCR1 = 1000; // CCR1 PWM duty cycle TA1CTL = TASSEL_2 + MC_1; // smclock - upmdode __enable_interrupt(); // enable all interrupts for(;;){} } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { servorot(); } void servorot(void) { if((P1IN & BIT3) == 0 ) { __delay_cycles(5000); TA1CCR1 = 1000; } else if ((P1IN & BIT4) == 0) { __delay_cycles(5000); TA1CCR1 = 1500; } else if ((P1IN & BIT5 ) == 0) { __delay_cycles(5000); TA1CCR1 = 2000; } P1IFG &= ~(BIT3 + BIT4 + BIT5); // P1.3-4-5 IFG cleared }
thank you for answering