If-Schleifen - Verständnisproblem

Gast #3322032
Lesenswert?

Hallo,

ich hab vor ein paar Tagen angefangen in das
Mikrocontrollerprogrammieren einzusteigen. Als Mikrocontroller habe ich
den ATMEL Atmega32 16pu und benutze "Programmers Notepad". Wie man Leds
an-/ausschaltet verstehe ich - auch wie man Pins als Eingänge
deklariert. Habe mich jetzt an die If-Schleifen gesetzt und habe
folgenes Programm programmieren wollen: Wenn ich nichts mache blinken 3
Leds immer wieder nacheinander. Wenn ich jedoch den Button an PB1 drücke
sollen die Leds gleichzeitig blinken!

#include <avr/io.h>
#include <util/delay.h>
1
int main(void)
2
{
3
DDRB &= ~(1<<PB1);
4
DDRB |= (1<<PB3);
5
DDRB |= (1<<PB4);
6
DDRB |= (1<<PB5);
7
PORTB |= (1<<PB1);
8

9
while(1)
10
{
11

12
if(bit_is_clear(PINB, 1))
13
{
14

15
PORTB |= (1<<PB3);
16
PORTB |= (1<<PB4);
17
PORTB |= (1<<PB5);
18
_delay_ms(100);
19
PORTB &= ~(1<<PB3);
20
PORTB &= ~(1<<PB4);
21
PORTB &= ~(1<<PB5);
22
_delay_ms(100);
23

24
}
25

26
else 
27
{
28
PORTB &= ~(1<<PB5);
29
PORTB |= (1<<PB3);
30
_delay_ms(15);
31
PORTB &= ~(1<<PB3);
32
PORTB |= (1<<PB4);
33
_delay_ms(15);
34
PORTB &= ~(1<<PB4);
35
PORTB |= (1<<PB5);
36
_delay_ms(15);
37
}

So funktioniert es zwar, ich verstehe aber nicht warum ich in die
Klammer (was ich durch ausprobieren herausgefunden habe) bit_is_clear
setzen muss, wenn doch vom Mikrocontroller ein Bit gesetzt werden
müsste, falls ich den Button drücke. Oder wird die If-Schleife
ausgeführt wenn der Wert = 0 ist ?

Würde mich über Antworten freuen, die mir helfen.

Schorsch

PS: Habe mir auch ein paar Bücher über das Thema bestellt. Diese kommen
aber erst in ein paar Tagen und ich möchte gerne weiter kommen :)
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.