Прежде всего я хочу сказать несколько слов о дизайне протокола.Любой протокол связи, если вы хотите, чтобы он был надежным, должен реализовывать как минимум две вещи: синхронизацию кадров и проверку ошибок.Хорошо, есть несколько специализированных протоколов, которые не используют кадры и представляют данные как непрерывный поток, но это определенно не ваш случай.Поэтому, если вы не хотите возиться со странными ошибками, я настоятельно рекомендую вам реализовать эти вещи.
Теперь о вашем коде.Похоже, GET_data
ждет, пока регистр передачи не будет пустым, и записывает в него один байт.Я не вижу в этом ничего плохого.Но ваш приемник выглядит подозрительно.Вы ждете установки флага RCIF
и затем читаете 5 раз из регистра ввода RCREG
.Но не ноль RCIF
означает, что вы получили один байт.Вы не можете ждать RCIF
один раз, а затем читать из RCREG
несколько раз.Вам следует подождать RCIF
до каждого чтения из RCREG
.
Я был бы рад привести вам пример рабочего кода, но я не могу придуматьпростое решение, которое будет соответствовать вашей нынешней архитектуре.Я могу привести пример того, как сделать это правильно, но это будет выглядеть совершенно иначе.