So sollte es funktionieren, die Timerzeit stimmt nicht und wenn die Taste länger als 65535 gedrückt ist dann leuchtet die LED wieder, da es zu einem Zählerüberlauf kommt.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
volatile unsigned int a = 0;
ISR(TIMER0_OVF_vect)
{
a++; // ca. 1 sec zahlt die Variable a
}
void InitTimer(void)
{
TCCR0 = TCCR0 | (1<<CS00); // Prescaler CK/8
TCNT0 = 0;
TIMSK = TIMSK | (1<<TOIE0);
}
int main(void)
{
InitTimer();
sei();
DDRB &= (~ (1<<PB0)); /* Pin PB0 als Eingang */
PORTB |= (1<<PB0); /* Pull Up von PIN B0 aktivieren */
DDRB = (1<<DDB1); // PB1 Ausgänge
while(1)
{
if (!( PINB & (1<<PINB0))) { /* mache was wenn PinB0 low ist */
if (a < 6){ /* Wenn länger als ca.6 sec Taster gedrückt, dann aus */
PORTB|=(1<<PB1); // high
}
else {PORTB&= ~(1<<PB1); // low
}
}
else
{
PORTB&= ~(1<<PB1); // low
a=0;
}
}
}
Lesezeichen