How to increment OCR1A value in ATmega16 through hardware?
The program worked, I had made some improper hardware connections. Here is the working code:

// Program to use External (Hardware) Interrupts of AVR Microcontroller (ATmega16)
#include&lt;avr/io.h&gt;
#include&lt;util/delay.h&gt;
#include&lt;avr/interrupt.h&gt;

/***** Function To Initialize Ports*****/
void init_ports()
{
    DDRA = 0xFF;
    PORTA = 0x55;
}

/***** Function To Initialize Interrupts*****/
void init_interrupts()
{
    cli();  //Disable Global Interrupts
    GICR =(1&lt;&lt;INT0);    //Set Bit6 of GICR to unmask INT0 interrupt.
    MCUCR =(0&lt;&lt;ISC00);  //Configuring MCUCR for Rising Edge interrupt for INT0
    sei();  //Enable Global Interrupts
}

/***** Interrupt Service Routine For INT0*****/
ISR (INT0_vect)
{
    PORTA=~PORTA;
    OCR1A=OCR1A+1;
    _delay_ms(100);
    if(OCR1A==305)
    {   OCR1A=65;
        _delay_ms(200);
    }
}


/***** Main Function *****/
int main(void)
{

//Configure TIMER1
    TCCR1A|=(1&lt;&lt;COM1A1)|(1&lt;&lt;COM1B1)|(1&lt;&lt;WGM11);         //NON Inverted PWM
    TCCR1B|=(1&lt;&lt;WGM13)|(1&lt;&lt;WGM12)|(1&lt;&lt;CS11)|(1&lt;&lt;CS10);  //PRESCALER=64 MODE 14(FAST PWM)

    ICR1=2499;  //fPWM=50Hz (Period = 20ms Standard).

    DDRD|=(1&lt;&lt;PD4)|(1&lt;&lt;PD5);    //PWM Pins as Out
    OCR1A=65;
    init_ports();
    while(1)
    {
        init_interrupts();
    }
}