I'm try to make a delay with Timer.It's build fine but some times its gonna hang and delay time changes.code is following:
/************************************************************************/ //Timer1 Overflow interrupt subroutine /************************************************************************/ volatile char Timer1_OverFlow_Flag = 0; uint16_t Timer1_i = 0; #define Time1_Delay 0.001 //1 = 1S,100 ms = 0.1 sec = 10Khz,500 ms = 0.5 sec, //50 ms = 0.05 sec,1 ms = 0.001 sec,0.0005 = 900Hz ISR(TIMER1_OVF_vect) { if(Timer1_i>(Time1_Delay/0.000185)) { Timer1_OverFlow_Flag = 1; Timer1_i = 0; //PORTD ^= (1<<PORTD1); } Timer1_i++; } /************************************************************************/ //Configure Timer /************************************************************************/ void set_Timer1() { TCCR1A = 0x00; //Normal Mode TCCR1B |= (1<<CS11);// | (1<<CS00); //clk I/O/8 //TIMSK1 |= (1<<TOIE1); //Enable Timer1 Overflow interrupt TCNT1 = 65280; //256 } ////////////////////////////////////////////////////////////////////////////////// void EnableTimer1() { TIMSK1 |= (1<<TOIE1); //Enable Timer1 Overflow interrupt } void DisableTimer1() { TIMSK1 &=~ (1<<TOIE1); //Disable Timer1 Overflow interrupt } ////////////////////////////////////////////////////////////////////////////////// int main() { set_Timer1(); sei(); //Enable global interrupt DDRD |= 1<<DDRD1; while(1) { PORTD ^= (1<<PORTD1); EnableTimer1(); while(!Timer1_OverFlow_Flag); Timer1_OverFlow_Flag = 0; DisableTimer1(); } return 0; }