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