Das wäre unser Programm:


#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>

volatile uint16_t timer = 0;

#define TIMER1_RELOAD 0x85ee
//#define TIMER1_RELOAD 0xfffe

int main (void)
{
// berlauf alle 500 ms bei 16 MHz
TCNT1 = TIMER1_RELOAD;

// Timerberlauf Interrupt aktivieren
TIMSK = (1<<TOIE1);

// Prescaler = 256, Timer1 starten
TCCR1B = (1<<CS12);

// Interrupts aktivieren
sei();

// Port C als Ausgang schalten
SFIOR=0xff;
PORTC = 0x00;
DDRC = 0xff;



while(1) {


//PORTC
if ((timer >= 1) && (timer < 3)) {
//port 1 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC0);
}

if ((timer >= 4) && (timer < 6)) {
//port 2 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC1);
}

if ((timer >= 7) && (timer < 9)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC2);
}
if ((timer >= 10) && (timer < 12)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC3);
}
if ((timer >= 13) && (timer < 15)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC4);
}
if ((timer >= 16) && (timer < 1) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC5);
}
if ((timer >= 19) && (timer < 21)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC6);

}
if ((timer >= 22) && (timer < 24)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
PORTC |= (1<<PC7);
}

//if ((timer >= 25) && (timer < 27)) {
//port 3 wird geschaltet--> znden
// der zustand bleibt 500 ms erhalten
//PORTC |= (1<<PC;
//}
if(timer==2 {
timer=0;
PORTC=0x00;

}

}

return 0;
}

// -----------------------------------------
// Timerberlauf Interrupt
SIGNAL(SIG_OVERFLOW1)
{
// Timer neu laden
TCNT1 = TIMER1_RELOAD;

timer++;
PORTC=0x00;


if (timer == 0xffff) {
// Timer stoppen
TCCR1B = 0;
}
}