/*
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;
}