Hallo liebe Community, ich will mal nicht lange drum herum reden und
komme gleich zur Sache. Ich arbeite mich momentan in die Grundlagen der
µC Programmierung ein und stolpere bereits am Anfang. (Hardware steht im
Betreff: ATMega8, programmiert wird mit dem STK500)
Ziel: LED's an PortB blinken, wenn Taster an PortD, Pinxy gedrückt wird.
Bisheriger Code:
1 | #include <avr/io.h>
|
2 | #define F_CPU 1000000
|
3 | #include <util/delay.h>
|
4 | #define taster PD0
|
5 |
|
6 |
|
7 | int main(void)
|
8 | {
|
9 |
|
10 |
|
11 | DDRB = 0xFF;
|
12 | DDRD = 0x00;
|
13 | while(1)
|
14 | {
|
15 | if((PIND & (1 << taster))==1)
|
16 | {
|
17 | PORTB = 0xFF;
|
18 | }
|
19 | else
|
20 | {
|
21 | PORTB = 0x00;
|
22 | _delay_ms(500);
|
23 | PORTB = 0xFF;
|
24 | _delay_ms(500);
|
25 | }
|
26 | }
|
27 |
|
28 | return 0;
|
29 | }
|
Wenn ich das ganze über den Taster an Pin 0 betreibe funktioniert es.
Wenn ich zum Beispiel auf Pin 1 wechsle, habe ich dauerhaftes blinken.
Jetzt wirds (für mich) kurios: Wenn ich in der Zeile:
1 | if((PIND & (1 << taster))==1)
|
auf 0 Prüfe, also
1 | if((PIND & (1 << taster))==0)
|
habe ich, wie erwartet, dauerhaftes blinken, welches ich mit druck auf
den Taster deaktiviere. Hier kann ich mit PD0....PD7 jeden Taster
verwenden...?
Was übersehe ich hier? Wo liegt mein Fehler?
Vielen Dank schonmal für eure Mühe und liebe Grüße von der Nordsee!