/*
  Generating a delay of 1 sec using ATmega16 Timer1
 
 */ 


#include <avr/io.h>
#include <avr/interrupt.h>
void Timer11();
int main(void)

{

DDRF |= 0xFF; // PORTF is Output
InitTimer1();
while (1) {
sei();
				  }
}

ISR (TIMER1_OVF_vect)
{
volatile long i;
PORTF ^= 0xFF; // or PORTF = ~PORTF;
TCNT1H=0xC2;	// again load counter with calculated value for both TCNT1H and TCNTHL
TCNT1L=0xF7;
}

void InitTimer1(void)
{
	//Timer/Counter 1 initialization //
	// Clock source: System Clock
	// Clock value: 16MHz
	// Prescale value: 1024
	// Mode: Normal 
	// Top=0xFFFF
	// OC1A output: Disconnected
	// OC1B output: Disconnected
	// Noise Canceler: Off
	// Input Capture on Falling Edge
	// Timer Period:
	// Force Output Compare: Disconnected
	TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
  TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12)| (1<<CS12) | (0<<CS11) | (1<<CS10);
  TCCR1C=(0<<FOC1A) | (0<<FOC1B);
  TIMSK1=(0<<ICIE1)|(0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
	

	//0xE0C0 = 1mS delay@8MHz,Prescale=1
	//0xD4CD = 1mS [email protected],Prescale=1
	//0xC2F7  = 1 sec delay@16MHz, Prescale =1024
	
	TCNT1H=0xC2;	
	TCNT1L=0xF7;

	OCR1AH=0x00;
	OCR1AL=0x00;
	OCR1BH=0x00;
	OCR1BL=0x00;
	ICR1H=0x00;
  ICR1L=0x00;
	return;
}