Hallo,
ich verzweifle langsam daran, ein paar Bytes mit dem USART zu Empfangen.
Ein Atmega32 ist an ein eDIP240-7 angeschlossen, auf dem Display ist ein
Bargraph, der nach jedem Bewegen seinen neuen Wert in 5 Bytes sendet.
Das erste soll auf 0x1B geprüft werden, dann werden drei verworfen und
das fünfte ist ein Wert von 0-100. Eine völlig unelegante Lösung, aber
zurzeit gibt es auf dem Display nur den Bargraph.
Dazu habe ich folgende Sourcecode(auch völlig ineffizient):
1 |
|
2 | for(;;)
|
3 | {
|
4 |
|
5 | c = uart_getc();
|
6 | if ( c & UART_NO_DATA )
|
7 | {
|
8 |
|
9 | }
|
10 | else
|
11 | {
|
12 | if (c==0x1B)
|
13 | {
|
14 | c=uart_getc();
|
15 | c=uart_getc();
|
16 | c=uart_getc();
|
17 | c=uart_getc();
|
18 |
|
19 | uart_puts("#YH");
|
20 | itoa(c,buffer,10);
|
21 | uart_puts(buffer);
|
22 | uart_putc(',');
|
23 | }
|
24 | }
|
25 | }
|
Das Problem ist, das immer "#YH256," gesendet wird. Eigentlich soll
statt 256 aber der Wert c vom letzen getc() gesendet werden.
Im übrigen sind alle getc() bis auf das allererste 256, das erste
funktioniert hingegen und erkennt ggf. das 0x1B.
Danke im Vorraus,
Alex