Hier ist meine ISR-Routine:
1 | int NextChar;
|
2 | unsigned char temp_str[40];
|
3 | int rx_flag;
|
4 |
|
5 | ISR(USART_RXC_vect) {
|
6 | temp_str[NextChar] = UDR;
|
7 | if (temp_str[NextChar] == 0x0D) {
|
8 | rx_flag=1;
|
9 | NextChar=0;
|
10 | }
|
11 | else {
|
12 | NextChar++;
|
13 | }
|
14 | }
|
Das speichert alle empfangene Zeichen in dem Array temp_str. Also wir
aus der Zeichenfolge: Test
temp_str[0] = T bzw. 0x54
temp_str[1] = e nzw. 0x65
temp_str[2] = s nzw. 0x73
temp_str[3] = t bzw. 0x74
Wenn jetzt Enter (0x0D) gedrückt gesendet wird, wird das Flag rx_flag
gesetzt und mein Main-Programm reagriert drauf. Dabei wird auch NextChar
wieder auf 0 gesetzt.
Jetzt könntest du mit Switch und Case die Zeichen abrfragen.
1 | switch(temp_str[0]) {
|
2 | case 0x54:
|
3 | // Zeichen ist ein großes T
|
4 | break;
|
5 | }
|
kann beliebig ausgeführt werden. Wenn du nur einzelne Zeichen abfragen
willst, kannst du auch einfach mit switch und case das UDR-Register
abfragen aber immer die Hex.-Nummern des Ascii-Zeichens angeben!!!
mfg jonny