#define IRQ0 __vector_1 #define IRQ1 __vector_2 #define SIGNAL __attribute__ ((signal)) unsigned char *led; unsigned char *leddir; unsigned char check_buttons(); void print_led(unsigned char value); void enable_interrupt(); void leds_on(void); void leds_off(void); void IRQ0(void) SIGNAL; void IRQ1(void) SIGNAL; int main(void) { led = (unsigned char*) 0x38; leddir = (unsigned char*) 0x37; *leddir = 0xff; // led_off(); enable_interrupt(); while(1) { } return 0; } void IRQ0(void) { // print_led(~check_buttons()); leds_on(); } void IRQ1(void) { // print_led(~check_buttons()); leds_off(); } /* verifica qual botão está pressionado. */ unsigned char check_buttons() { unsigned char *botoes; botoes = (unsigned char*) 0x30; return *botoes; } /* acende os leds de acordo com o parâmetro "value". */ void print_led(unsigned char value) { *led = value; } /* acende todos os leds. */ void leds_on(void) { *led = 0xff; } /* apaga todos os leds. */ void leds_off(void) { *led = 0x0; } /* ativa o uso de interrupções. */ void enable_interrupt(void) { unsigned char *sreg; sreg = (unsigned char*) 0x5F; *sreg |= 0x80; unsigned char *gimsk; gimsk = (unsigned char*) 0x5B; *gimsk |= 0xC0; unsigned char *mcucr; mcucr = (unsigned char*) 0x55; *mcucr |= 0x0C; }