#define TIM0_OVF __vector_7 #define SIGNAL __attribute__ ((signal)) unsigned char *led; unsigned char *leddir; unsigned int int_cntr; //contador de interrupções void print_led(unsigned char value); void enable_interrupt(); void leds_off(void); void leds_on(void); void TIM0_OVF(void) SIGNAL; int main(void) { led = (unsigned char*) 0x38; leddir = (unsigned char*) 0x37; *leddir = 0xff; int int_cntr = 0; enable_interrupt(); while(1); return 0; } void TIM0_OVF(void) { /* A cada 16s, inverte o estado dos leds. */ if (int_cntr == 244) { int_cntr = 0; *led = ~*led; } else { int_cntr++; } } /* acende os leds de acordo com o parâmetro "value". */ void print_led(unsigned char value) { *led = value; } /* apaga todos os leds. */ void leds_off(void) { *led = 0x0; } /* acende todos os leds. */ void leds_on(void) { *led = 0xff; } /* ativa o uso de interrupções. */ void enable_interrupt(void) { unsigned char *sreg; sreg = (unsigned char*) 0x5F; *sreg |= 0x80; /* habilita interrupções do timer. */ unsigned char *timsk; timsk = (unsigned char*) 0x59; *timsk |= 0x02; /* divisor do contador (ck/1024). */ unsigned char *tccr0; tccr0 = (unsigned char*) 0x53; *tccr0 |= 0x05; }