всем привет.
задача такая:
есть сигнал от ИК-пульта, принимается на PB2.
короткий импульс лог0 - разделитель, короткий импульс лог1 это ноль, длинный импульс лог1 это единица. нужно считать 8 битов, сохранить в переменную byte
byte=0;
i1=0; // счетчик длительности импульса лог1
while ((PINB&0x04)!=0) i1++; // пока длится лог1, считаем импульсы
if (i1<8000) byte=byte*2; // если это был короткий импульс, то умножаем двоичное число byte на 10 (сдвигаем влево)
else byte=(byte*2)+1; // если это был длинный импульс, сдвигаем влево и дописываем 1
дальше идут повторы этого куска.
проблема: после одного такого куска во время подсчета начинает увеличиваться не i1, а byte.
кто-то сталкивался с подобными вещами? переменная подчистую поменяется другой. может что-то оптимизатор WinAVR наоптимизировал..