Harald schrieb:
> ist das so korrekt?
Lass uns dein Programm erst mal sauber einrücken
1 | #include <avr/io.h>
|
2 | #ifndef F_CPU
|
3 | #define F_CPU 3686400UL
|
4 | #endif
|
5 | #include <util/delay.h>
|
6 |
|
7 | int main (void) {
|
8 |
|
9 | DDRB = 0xff;
|
10 | PORTB = (1<<PB1);
|
11 |
|
12 | while(1) {
|
13 | _delay_ms(1000);
|
14 | }
|
15 |
|
16 | DDRB = 0xff;
|
17 | PORTB = (0<<PB1);
|
18 |
|
19 | return 0;
|
20 | }
|
Jetzt habe ich ein paar Fragen an dich:
* Warum willst du DDRB ein zweites mal setzen. 1 mal reicht. Wenn der
Port auf Ausgang geschaltet ist, dann vergisst der das nicht.
* while( 1 )
Das ist eine Schleife, die von einer Bedingung abhängig ist.
Die Schleife wird solange wiederholt, wie die Bedingung wahr ist
while( i > 5 )
wäre zb eine Schleife, die solange wiederholt wird, wie eben i
größer als 5 ist.
Hier lautet die bedingung: 1
1 ist ein Ausdruck, der immer wahr ist.
Das bedeutet: Diese Schleife kann gar nicht verlassen werden. Eine
sogenannte Endlosschleife.
Das ist prinzipiell schon ok. Genau das wollen wir haben.
Aber: Innerhalb der SChleife steht nur die _delay_ms
Das heißt: Das Warten wird wiederholt. Wieder und immer wieder.
Wie soll denn da also jemals eine LED ein oder aus geschaltet werden,
was ja wohl notwendig ist, um ein Blinken zu erzeugen?
Wenn die LED Blinken soll, dann würde man ja wohl erwarten, dass
innerhalb der Endlosschleife die LED ein und auch wieder ausgeschaltet
wird.