всем привет.
задача такая: есть сигнал от ИК-пульта, принимается на 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 наоптимизировал..
|