Q
Quinix1
Gast
Hallo,
ich schreibe einen code mit Interrupt und Timer. Eine LED(PortB) soll dauerhaft zum blinken gebracht werden, und die anderen LEDs(PortC) sollen an sein, solange einer der 3 Taster gedrückt wird(PINB).
Was im Moment passiert:
-LEDs(PortC) blinken synchron mit LED(PortB) solange der Taster gedrück istt.
-Wenn ich den Taster loslasse, während LED(PortB) an ist, dann bleiben LEDs(PortC) an(ansonsten gehen sie aus)
Was ich nicht verstehe:
Warum blinken die LEDs(PortC) auch?
Und warum gehen die LEDs(PortC) nicht aus, wenn ich den Taster loslasse während LED(PortB) an ist?
Danke
ich schreibe einen code mit Interrupt und Timer. Eine LED(PortB) soll dauerhaft zum blinken gebracht werden, und die anderen LEDs(PortC) sollen an sein, solange einer der 3 Taster gedrückt wird(PINB).
Was im Moment passiert:
-LEDs(PortC) blinken synchron mit LED(PortB) solange der Taster gedrück istt.
-Wenn ich den Taster loslasse, während LED(PortB) an ist, dann bleiben LEDs(PortC) an(ansonsten gehen sie aus)
Was ich nicht verstehe:
Warum blinken die LEDs(PortC) auch?
Und warum gehen die LEDs(PortC) nicht aus, wenn ich den Taster loslasse während LED(PortB) an ist?
Danke
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
void warten(void) {
while ( !(TIFR1 & (1 << OCF1A ) ) ) // Auf "Wecker" warten
;
TIFR1 |= (1 << OCF1A ); // Interruptflag löschen
}
int main(void) {
OCR1A = 31250-1;
TCCR1B |= (1 << WGM12); //turn on CTC mode
TCCR1B |= (1 << CS12) | (1 << CS10); //Prescalemode 101 -> 1024 Takt
DDRB = 0x20; //kontrolleuchte aktivieren
DDRC = 0x3f; //alle LED aktivieren
PCICR = 0x3f; //Pin Change Interrupt Control Register
PCMSK0 =0x3f; //taster aktivieren
sei();
while(1) {
PORTB ^= 0x20; //kontroll LED
warten(); //blinken
}
}
ISR(PCINT0_vect){
if (PINB & 0b00000001) //if rechte Taste gedrückt
PORTC ^= 0b00000011; //2 rechte LED
if (PINB & 0b00000100) //if mittlere Taste gedrückt
PORTC ^= 0b00001100; //2 mittlere LED
if (PINB & 0b00010000) //if linke Taste gedrückt
PORTC ^= 0b00110000; //2 linke LED
if (PINB & 0b00000000) //if keine Taste gedrüvckt
PORTC ^= 0b00000000;
}