Nun, was erwartest du?
Laut deinem Programm schaltest du zwar die LED an PB0 ein, aber es gibt
in der ganzen Hauptschleife keine einzige Anweisung, die die LED wieder
ausschalten würde. Von alleine geht die nicht aus.
Formatiere deinen Code mal ein wenig vernünftig, dann siehst du das
auch.
Nach jeder Anweisung eine Leerzeile machen, macht hauptsächlich eines:
es zieht den Code in die Länge. Aber Übersicht bringt das nicht. Und
auch Einrückungen sind kein überflüssiger Luxus.
1 | #include <avr/io.h>
|
2 |
|
3 | #define F_CPU 16000000UL // 16 Mhz-Takt
|
4 | #include <util/delay.h>
|
5 |
|
6 | int main (void)
|
7 | {
|
8 | DDRB = 0xFF; //Ausgang definiert + auf Null gesetzt
|
9 | PORTB |=0xFF;
|
10 |
|
11 | //DDRD =0x00;
|
12 | DDRD &= ~(1 << PD1); // PD0 als Eingang festlegen
|
13 |
|
14 | //PORTD |= (1 << PD1); // Pullup für PD0 aktivieren
|
15 |
|
16 | while (1) //Hauptschleife diese darf nie verlassen werden!
|
17 | {
|
18 | PORTB |= (1 << PB2); //LED PB0 blinkt
|
19 | _delay_ms(63);
|
20 | PORTB &= ~(1 << PB2); // PD0 deaktivieren
|
21 | _delay_ms(63);
|
22 |
|
23 | if (PIND & (1 << PD1))
|
24 | {
|
25 | //PORTB |= (1 << PB1);
|
26 | PORTB &= ~(1 << PB0);
|
27 | }
|
28 | } //Ende der Hauptschleife
|
29 |
|
30 | return 0;
|
31 | } //Programmende (wird nie erreicht)
|
Und ehe du Kommentare schreibst die falsche sind, ist es besser du
schreibst die Kommentare gar nicht.
Nur ein Beispiel von mehreren:
1 | DDRD &= ~(1 << PD1); // PD0 als Eingang festlegen
|
Was stimmt denn nun? Ist der Kommentar falsch und das Setzen von PD1 auf
Eingang ist richtig. Oder hast du im Programm einen Tippfehler gemacht
und der Kommentar erzählt deine Absicht richtig, dass PD0 auf Eingang
gestellt werden soll? Beides gleichzeitig kann nicht richtig sein.
Das Problem: Du als Mensch orientierst dich nur allzu gerne an den
Kommentaren. Nur: dem µC sind deine Kommentare schnurz. Der führt das
aus, was im Programmtext steht.