Forum: Compiler & IDEs If-Schleifen - Verständnisproblem


von Schorsch (Gast)


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 :)

: Gesperrt durch Moderator
von (prx) A. K. (prx)


Lesenswert?

Was sind If-Schleifen?

von Mikrocontroller P. (Gast)


Lesenswert?

A. K. schrieb:
> Was sind If-Schleifen?

http://www.if-schleife.de/

von (prx) A. K. (prx)


Lesenswert?


von mar IO (Gast)


Lesenswert?

Es gibt keine IF-Schleifen!!!

Schorsch schrieb:
> if( bit_is_clear(PINB, 1) )

In jedem C-Buch steht drinnen wie eine IF-Abfrage funktioniert.

Kannst Du beschreiben was bit_is_clear(PINB, 1) macht? - Wenn ja, denn 
stell dir die Frage, was dein Taster im Ruhezustand und im 
Gedrückten-Zustand liefert und überprüfe es. Siehe dazu auch 
AVR-GCC-Tutorial: Taster und Schalter

von Yalu X. (yalu) (Moderator)


Lesenswert?


Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.