I have written a code which takes two digit number from laptop and changes the PWM dutycycle to that number. It is part of a bigger requirement where I need to control motor speed over UART. #include "io430g2553.h" #include <stdint.h> void PWM(uint8_t duty_cycle); void PWM_Config(); int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; // Run at 1 MHz DCOCTL = CALDCO_1MHZ; // Run at 1 MHz PWM_Config(); PWM(5); __delay_cycles(5000000); PWM(15); __delay_cycles(5000000); PWM(25); __delay_cycles(5000000); PWM(50); __delay_cycles(5000000); PWM(25); __delay_cycles(5000000); PWM(15); __delay_cycles(5000000); PWM(5); while(1) {} } void PWM_Config() { P1OUT &= 0x00; // Clearing P1OUT P1SEL |= BIT6 ; P1SEL2 &= ~BIT6 ; P1DIR |= BIT6; // Configuring P1.6 as Output } void PWM(uint8_t duty_cycle) { TA0CTL =0; TA0CTL |= TACLR; TA0CCR1 |= (duty_cycle*100); TA0CCR0 |= 10000; TA0CTL |= TASSEL_2 + MC_1 + ID_0;// Register TA0CTL -> SMCLK/8, Up mode TA0CCTL1 |= OUTMOD_7 ;//Set/Reset Mode TA0CCTL0 &= ~CCIE; // Interrupt Disabled } **Edited My question on received comment:** The problem with the void PWM(uint8_t duty_cycle) function is that first time it generates the correct PWM at P1.6, next if it is given a value it changes PWM to that DC, but I can not go back to lower DC. the fisrt 2 PWM functions in the code changes to correct duty cycle PWM(5),PWM(15) then the rest of PWM values do not produce desired dutycycle. I am not able to troubleshoot where am I wrong, can any1 help?