/*
 */ 


#include <avr/io.h>
                    

/* define macros */
#define bit_set(port_address,bit_serial)   ((port_address) |= (1 << bit_serial))
#define bit_clear(port_address,bit_serial) ((port_address) &= ~(1 << bit_serial))
#define bit_get(port_address,bit_serial)   ( ((port_address) & (1 << bit_serial))?1:0)
#define LED_ON   bit_set(PORTB,PORTB5)
#define LED_OFF  bit_clear(PORTB,PORTB5)


                    
#define TIMER0_10MS                                    156                    
#define DROP_TIMEBASE                                  200
                    
                    
                                                          
                                                          
unsigned short drop_timebase_counter;                                                          
                                                          
                    
void init()
  {
  /* configure 8 bit timer/counter0 for timebase interrupt */
  bit_clear(TCCR0A,WGM02);                                 /* mode = CTC / OCRA                                           */
  bit_set(TCCR0A,WGM01);
  bit_clear(TCCR0A,WGM00);
  OCR0A = TIMER0_10MS;
  bit_set(TIMSK0,OCIE0A);                                 /* Timer/Counter0 CompareA Interrupt Enable                    */
  bit_set(TCCR0B,CS02);                                   /* start timer, prescaler = 1024                                 */
  bit_clear(TCCR0B,CS01);
  bit_set(TCCR0B,CS00);
  
  /* interrupt */
  bit_set(SREG,7);                                        /* global interrupt enable                                      */


  /* initialize LED pin */
  bit_set(DDRB,DDB5);                                      /* portB5 = out = LED drive                             */
  LED_OFF;
  


  /* initialize variables */
  drop_timebase_counter = 0;
	
  }


/* timebase interrupt 10ms */
SIGNAL (TIMER0_COMPA_vect)
  {                                                    
  /* 10 ms part */
  
  
  
  
  /* 10s part?  */
  drop_timebase_counter++;
  if(drop_timebase_counter >= DROP_TIMEBASE)
    {
    drop_timebase_counter = 0;
    /* 10s part starts here */
    
    LED_ON;
    }   

if(drop_timebase_counter == 20)  
  LED_OFF;
  }

int main(void)
  {                             
  
  init();
  
  while(1)
    {
    LED_ON;
    }
  }