Hallo, wieder einmal eine Einsteigerfrage.
Gegeben ist ein STK500 mit mega8, PortB mit LEDs verbunden, PortD mit
Switches verbunden und folgender Codeausschnitt (nur der Inhalt der
Main-Funktion):
1 | ....
|
2 |
|
3 | DDRB = 0xFF;
|
4 |
|
5 | PortD = 0xFF;
|
6 | DDRD = 0x00;
|
7 |
|
8 | while(1)
|
9 | {
|
10 | PortB = 0x00;
|
11 |
|
12 | if (PinD0 == 1) (A)
|
13 | if (PinD & (1<<PinD0)) (B)
|
14 |
|
15 | {
|
16 | _delay_ms(10);
|
17 | }
|
18 | else
|
19 | {
|
20 | _delay_ms(1000);
|
21 | }
|
22 |
|
23 | PortB = 0xFF;
|
24 | _delay_ms(500);
|
25 | }
|
Wenn ich die IF-Anweisung (A) benutze, wird immer nur der Else-Zweig
durchlaufen, egal ob der Taster gedrückt ist oder nicht.
Wenn ich die IF-Anweisung (B) benutze, wird bei nicht gedrücktem Taster
der erste Zweig durchlaufen und bei gedrücktem Taster wird der
Else-Zweig durchlaufen.
Warum darf ich nicht den pin0 vom PortD direkt auf 1 (bzw. auch nicht
auf 0) abfragen ?
Vielen Dank und viele Grüße
Paul