#include "avrMega.h"
class LedTI4s
{
public:
/* Referência ao registrador */
ATMEGA* atmega;
/* Contador para o tempo */
unsigned char contador;
/* Handler da interrupção 0 (Botão)*/
void IRQ0 (void)
{
if(atmega->mcucr == 0x0A) {
atmega->timsk = 0x01;
atmega->mcucr = 0x0F;
} else {
contador = 16;
atmega->timsk = 0x00;
atmega->mcucr = 0x0A;
atmega->portb = 0xFF;
}
}
/* Handler da interrupçãoo 1 (Botão)*/
void IRQ1 (void)
{
IRQ0();
}
/* Handler da interrupção 7 (Timer)*/
void IRQ9 (void)
{
contador--;
if(contador == 0)
atmega->portb = 0x00;//acende os leds
}
/* Inicailiza os registradores e o objeto para o registrador. */
void inicializa(void)
{
atmega = reinterpret_cast<ATMEGA *>(0);
atmega->ddrb = 0xFF;//configura porta B como saída
atmega->ddrd = 0x00;//configura porta D como entrada
atmega->tccr0 = 0x05;//prescaler 1024
atmega->portb = 0xFF;//apaga os leds
atmega->sreg = 0x80;//habilita as interrupções
atmega->gicr = 0xC0;//habilita as interrupções
atmega->timsk = 0x00;//desabilita timer 0
atmega->mcucr = 0x0A;
contador = 16;
}
};
LedTI4s led;
void __vector_1 (void)
{
led.IRQ0();
}
void __vector_2 (void)
{
led.IRQ1();
}
void __vector_9 (void)
{
led.IRQ9();
}
int main(void)
{
led.inicializa();
while(1);
return 0;
}