das, was du in der ISR machst, lässt sich wesentlich eleganter lösen.
Ein Beispiel:
1 | ISR(USART_RXC_vect)
|
2 | {
|
3 | uint8_t data = UDR;
|
4 |
|
5 | spalten[bytecount / 5][bytecount % 5] = data;
|
6 |
|
7 | if (bytecount >= 79)
|
8 | {
|
9 | bytecount = 0;
|
10 | UART_send('F');
|
11 | }
|
12 | UART_send(bytecount);
|
13 | bytecount++;
|
14 | return;
|
15 | }
|
ACHTUNG: Dein bytecount beginnt ebenfalls bei 0! Wenn du bis 80 zählen
willst, muss die Bedingung im if so sein, wie ich das da oben
geschrieben habe.
Und noch was:
1 | if(bytecount<=5)
|
2 | {
|
3 | spalten[1][bytecount] = data;
|
4 | }
|
Hierbei kann auch versucht werden, auf spalten[1][5] zuzugreifen, was zu
einem Speicherzugriffsfehler führen wird, den du nicht einmal merkst -
erst, wenn das Programm sporadisch komische Sachen macht.
EDIT: bytecount sollte bei 0 beginnen mein ich :o)