Naja die ISR
wird aufgerufen wenn ein oder mehrere Bytes empfangen wurden. Die
Funktion USART_RXComplete scheibt die empfangenen Daten in den Buffer
USART_data.
die ISR
wird aufgerufen wenn das DataRegister leer ist. Dann werden über die
Funktion
USART_DataRegEmpty die Daten aus dem Buffer USART_data (bzw. ein
Zeichen) versendet.
Und ja du kannst auch Ports setzen etc. Nur solltest du zusehen, dass
eine ISR möglichst schnell abgearbeitet sein sollte um nicht andere ISRs
wie Timer etc zu blockieren.
Port setzen geht natürlich schnell, aber du solltest nicht anfangen in
einer ISR einen riesen String zu analysieren. Das sollte man in einer
anderen Funktion machen, die z.B. auf ein Flag pollt welches
Signalisiert, dass ein neuer String eingetroffen ist.