#include "avr.h"

class LedTI4s
{
public:
  /* Referência ao registrador */
  AT90S* AT90S8515;
  /* Contador para o tempo */
  unsigned char contador;

  /* Handler da interrupção 0 (Botão)*/
  void IRQ0 (void)
  {    
    if(AT90S8515->mcucr == 0x0A) {
      AT90S8515->timsk = 0x02;
      AT90S8515->mcucr = 0x0F;
    } else {
      contador = 61;
      AT90S8515->timsk = 0x00;
      AT90S8515->mcucr = 0x0A;
      AT90S8515->portb = 0xFF;
    }
  }
  /* Handler da interrupção 1 (Botão)*/
  void IRQ1 (void)
  {
    IRQ0();
  }
  /* Handler da interrupção 7 (Timer)*/
  void IRQ7 (void)
  {
    contador--;
    if(contador == 0)
      AT90S8515->portb = 0x00;//acende os leds
  }
  
  /* Inicailiza os registradores e o objeto para o registrador. */
  void inicializa(void)
  {
    AT90S8515 = reinterpret_cast<AT90S *>(0);
    AT90S8515->ddrb = 0xFF;//configura porta B como saída
    AT90S8515->ddrd = 0x00;//configura porta D como entrada
    AT90S8515->tccr0 = 0x05;//prescaler 1024
    AT90S8515->portb = 0xFF;//apaga os leds
    AT90S8515->sreg = 0x80;//habilita as interrupções
    AT90S8515->gimsk = 0xC0;//habilita as interrupções
    AT90S8515->timsk = 0x00;//desabilita timer 0
    AT90S8515->mcucr = 0x0A;
    contador = 61;
  }
};

LedTI4s led;

void __vector_1 (void)
{
  led.IRQ0();
}
  
void __vector_2 (void)
{
  led.IRQ1();
}

void __vector_7 (void)
{
  led.IRQ7();
}

int main(void)
{
  led.inicializa();
  while(1);
  return 0;
}