#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;
}