Indem man hier
1 | while(1)
|
2 | {
|
3 | wert = UART_receive();//Wert empfangen
|
bzw. in der Funktion selber
1 | unsigned char UART_receive()
|
2 | {
|
3 | while ( ! (UCSR0A & (1<<RXC0)));//Warten auf Empfang
|
4 |
|
5 | return UDR0;//Empfangene Daten zurückgeben
|
6 | }
|
nicht so lange wartet, bis irgendwas eingetroffen ist, sondern ganz
einfach den UART befragt: Hast du was für mich?
Und nur dann ein Zeichen holt, wenn eines da ist. Im anderen Falle wird
dann eben nicht solange gewartet, bis ein Zeichen eingetroffen ist
sondern mit dem Rest des programms weiter gemacht.
Oder bleibst du neben dem Postkasten stehen, solange bis der Briefträger
einen Brief einwirft? Dann wirds aber nix mit einer Brieffreundschaft,
wenn du immer nur neben dem Postkasten rumlungerst und deswegen nie zum
selber schreiben kommst.
Das könnte dann zb so aussehen
1 | ...
|
2 |
|
3 | while(1)
|
4 | {
|
5 | if( UART_available() ) // gibts was an der UART?
|
6 | {
|
7 | wert = UART_receive();//Wert empfangen
|
8 |
|
9 | switch(wert)
|
10 | {
|
11 | case 'E': PORTB &= ~(1<<PORTB5); break; //LED leuchtet
|
12 | case 'A': PORTB |= (1<<PORTB5); break; //LED leuchtet nicht
|
13 | }
|
14 | }
|
15 |
|
16 | if ((PINC & (1<<PINC5)))
|
17 | {
|
18 | ...
|
19 | }
|
bzw.
1 | uint8_t UART_available()
|
2 | {
|
3 | if( UCSR0A & (1<<RXC0) ) // gibts was an der UART zu holen?
|
4 | return TRUE;
|
5 |
|
6 | return FALSE;
|
7 | }
|