En este código, el LED se ilumina en un pin PC0 con flash cada 50 ms. Tiene XTAL de 16 MHz. Con una frecuencia de CPU de 16 MHz, incluso un retardo máximo de 16.384 ms se puede lograr con un precalculador de 1024. Cada 256 valores preescolares, está logrando una interrupción.
- DDRC | = (1 < < 0) .... En el código dado, ¿qué significa?
- Quiero iluminar todos los LED en PORTC. Para esto, lo que tengo que cambiar en DDRC | = (1 < < 0).
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint8_t tot_overflow;
void timer0_init()
{
TCCR0 |= (1 << CS02);
TCNT0 = 0;
TIMSK |= (1 << TOIE0);
sei();
tot_overflow = 0;
}
ISR(TIMER0_OVF_vect)
{
tot_overflow++;
}
int main(void)
{
DDRC |= (1 << 0);
timer0_init();
while(1)
{
if (tot_overflow >= 12)
{
if (TCNT0 >= 53)
{
PORTC ^= (1 << 0);
TCNT0 = 0;
tot_overflow = 0;
}
}
}
}