Нашел глюк компилятор, взгляните на куски листинга:
(в процедуре приема func_receive)
Код
56 if ((PIND & 4) > 0) Paritet++;
\ 0000003E 9982 SBIC 0x10, 0x02
\ 00000040 9513 INC R17
57 delay40mks;
\ ??inbyte_4:
\ 00000042 EA20 LDI R18, 160
\ 00000044 952A DEC R18
\ 00000046 F7F1 BRNE $-2
(в процедуре приема func_receive2)
Код
128 if ((PIND & 4) > 0) Paritet2++;
\ 00000038 B300 IN R16, 0x10
129 delay40mks;
\ 0000003A EA00 LDI R16, 160
\ 0000003C 950A DEC R16
\ 0000003E F7F1 BRNE $-2
Поэтому второй байт всегда принимается с ошибкой. Чем победить, пока не знаю. Упорно ставит IN