Hallo,
habe hier folgenden Code entdeckt:
Beitrag "I2C will nicht"
1 |
|
2 | #define F_CPU 16000000UL
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | //Make Start Condition on I2C Bus
|
10 | TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
|
11 |
|
12 | while (!(TWCR & (1<<TWINT)));
|
13 |
|
14 | //Set Device Adress
|
15 | TWDR = 0b11010000;
|
16 |
|
17 | TWCR = (1<<TWINT) | (1<<TWEN);
|
18 |
|
19 | while (!(TWCR & (1<<TWINT)));
|
20 |
|
21 | //Set Register
|
22 | TWDR = 0x00;
|
23 |
|
24 | TWCR = (1<<TWINT) | (1<<TWEN);
|
25 |
|
26 | while (!(TWCR & (1<<TWINT)));
|
27 |
|
28 | //Set Register Value
|
29 | TWDR = 0xFF;
|
30 |
|
31 | TWCR = (1<<TWINT) | (1<<TWEN);
|
32 |
|
33 | while (!(TWCR & (1<<TWINT)));
|
34 |
|
35 | //Send Stop Condition
|
36 | TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
|
37 |
|
38 | while(1)
|
39 | {
|
40 |
|
41 | }
|
42 | }
|
Kann jemand erklären, was diese Ausdrücke mit dem while zu bedeuten
haben, z.B.:
while (!(TWCR & (1<<TWINT)));
???
Es gibt ja keinen Funktionsblock, der etwas bewirken könnte. Oder soll
einfach das Programm im jeweiligen while hängenbleiben (also keine
weitere Programmausführung), wenn die Bedingung hinter dem while 1
wird?!