Hallo liebes Forum,
ich habe ein Problem mit dem UART meines Mega8.
Das Uart ansich funktioniert einwandfrei. Der Controller soll, wenn ein
externer Interrupt ausgelöst wird zwei Zeichen im Abstand von 10ms
empfangen.
Das Problem ist, das das Zeichen zwar anscheinend empfangen wird, die
Anweisungen im jeweiligen case-Fall jedoch erst beim nächsten Interrupt
ausgeführt werden. Das heisst: ich sende zwei Zeichen (data kommt im
switch vor) und löse gleichzeitig einen Interrupt aus -> es passiert
nichts, wenn ich jetzt ein zweites Mal zwei Zeichen sende (data kommt
dieses mal nicht im switch vor) und einen Interrupt auslöse, passiert
das, was eigendlich beim ersten mal hätte passieren sollen usw.
Ich hoffe Ihr könnt mir helfen!
Frohe Weihnachten!
1 | ISR(INT1_vect) //Interruptroutine für INT1 (BSY-Eingang)
|
2 | {
|
3 | idGot = uart_getc(); //ID lesen
|
4 | _delay_ms(10); //kurz warten
|
5 | dataGot = uart_getc(); //DATA lesen
|
6 |
|
7 | if (idGot == 0x30)
|
8 | {
|
9 | switch(dataGot)
|
10 | {
|
11 | case 0x01: busWrite(0x01, 0x02);
|
12 | setLEDstatus(OFFLINE);
|
13 | break;
|
14 |
|
15 | case 0x03: setLEDstatus(ONLINE);
|
16 | break;
|
17 |
|
18 | case 0x31: setLEDstatus(OFFLINE);
|
19 | _delay_ms(500);
|
20 | setLEDstatus(ONLINE);
|
21 | break;
|
22 | }
|
23 | }
|
24 | _delay_ms(10);
|
25 |
|
26 | dataGot = 0x00;
|
27 | idGot = 0x00;
|
28 | }
|