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