Типичная задача. Прерывания каждые 10 мсек, например. Приём из последовательного канала связи осуществляется по прерываниям от приёмо-передатчика. В последней подпрограмме нужно только вычитать регистр данных приёмника, запихнуть байт в кольцевую очередь. Вычитывается кольцевая очередь в main(), там же принимается решение о формате ответа. Решение о включении-выключении светодиода принимается в подпрограмме обработки прерывания от таймера.