Первое. Отделить мух от котлет. Есть физическая часть протокола - это скорость в бодах, стартовые - стоповые биты и четность. Этим занимается железо порта и на высокий уровень это не пролезает. От программиста требуется задать эти параметры при открытии порта -
new SerialPort(selectedItem.ToString(), 9600, Parity.None, 416, StopBits.One);
9600 - скорость, Parity.None - четность, StopBits.One - количество стоповых бит.
Вот тут все нужно выставить по спецификации.
Контроллер UART сам будет ждать стартовый бит, считать бит четности и так далее. Если честность не сойдется, программа получит ошибку чтения. Служебные биты (старт, стоп, четность) программисту не передаются.
Теперь о шине RS485. Это полудуплексный интерфейс - одновременно можно либо передавать, либо слушать. Если ваша задача состоит только в том, чтобы слушать, у вас почти нет проблем.
Вам нужно верно настроить порт, открыть его и читать как обычный файл. Временную буферизацию вам обеспечит ОС - то, что приходит в порт сначала попадает в небольшой буфер, а только после этого идет в приложение, поэтому с чтением особо спешить не стоит, но и растягивать удовольствие не желательно.
Увы, на C# я не пишу (и считаю, что общаться со внешними устройствами лучше на C++, дабы приход дворника (сборщика мусора) не обломал весь недо-рилтайм), поэтому мои примеры кода вам просто так не подойдут.
Идея такая - читаем из порта все, что в нем есть и складываем к себе в буфер. Это в идеале можно делать в отдельном потоке.
Затем буфер нужно обработать. Это можно сделать тремя способами - регулярным выражением, конечным автоматом и "в лоб".
Начните с написания программы, которая просто читает поток и выводит его на монитор в hex.