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







Zitieren

Lesezeichen