Представьте, как выглядит NRZI:
- если подряд идет два нулевых бита, состояние выхода не переключается.
- если соседние биты меняются из 1 в 0, состояние выхода не переключается.
- если соседние биты меняются из 0 в 1, состояние выхода переключится между битами на противоположное.
- если подряд идут два единичных бита, состояние выхода переключится между этими битами на противоположное.
(существует вариант, когда выход инвертируется при двух нулевых битах, а при двух единичных не изменяется)
Таким образом, есть 4 входных комбинации и 2 выходных состояния. Это надо и записать. Проверка состояние бита в языке Си делается через логическую операцию AND по маске, содержащей 1 в проверяемом разряде. Здесь нужно проверять два соседних бита. Можно сделать несколькими способами. Например вот так:
- Код:
for(int bit = 0; bit < 7; bit++)
{
if(((byte >> bit) & 0x03) < 0x2)
change[bit] = FALSE;
else
change[bit] = TRUE;
}
, где массив change[] содержит признак, требующий смены состояния на выходе (THUE) после передачи бита или оставляющий состояние выхода без изменения (FALSE).
PS. Кодирование NRZ и NRZ
I значительно отличается по виду. В NRZ смена состояния выхода на противоположное происходит при изменении двух соседних битов и по форме оно повторяет битовые измениния. А в NRZI алгоритм сложнее. Вам какое всё-таки нужно? Вначале вы писали про NRZ а сейчас NRZI хотите.