Wo kommen die Daten denn her? Und was wird gesendet, d.h. wird wenn
nicht gerade 0b11000111 gesendet wird u.U. was anderes übertragen (\r
oder \n z. B.)? Wenn das der Fall ist könnte das Problem darin liegen,
dass während des delays in der ISR bereits das nächste (von 0b11000111
verschiedene Byte) ankommt. Dann würde das UART RX Complete Flag noch
während der ISR erneut gesetzt, diese also unmittelbar (könnte sein dass
da noch einige Takte Verzögerung durch die Interruptlogik reinkommen)
nach ihrem Ende erneut aufgerufen werden.
1 | if (e == 1)
|
2 | {
|
3 | if (Data == 0b11000111)
|
4 | {
|
würde dadurch irgendwo zwischendrin unterbrochen, und das zweite if
möglicherweise schon mit dem nächsten Byte (oder sogar noch neueren, je
nach Baudrate und delay) ausgeführt, welches aber nicht 0b11000111.
TL;DR
siehe eins über mir
"Wartezeiten in der Interrupt Routine sind eigentlich eine schlechte
Idee."