volatile unsigned int endvalue; void delay_ms(unsigned int millisec) { endvalue = 0; TA0CTL &=~ MC_1; //Stop Timer TA0CCTL0 = CCIE; // CCR0 interrupt enabled TA0CCR0 = (10*millisec); // VLO = 10kHZ -->0,1ms TA0CTL = TASSEL_2 | MC_1 | TACLR; // SMCLK, upmode, clear TAR do { _NOP(); //no operation }while (endvalue == 0); } #pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) { switch (TA0IV) // Timer A Interrupt Vector { case 0x02: { endvalue = 1; TA0CCTL0 &=~ CCIE; break; } } }