Как сформировать байт данных с одного бита другого байта?
Не могу сформулировать алгоритм для формирования одного байта. Необходимо считать биты с ноги МК и сформировать из них байт, но аппаратную возможность использовать нельзя. Упрощает задачу конечно, что бит, который необходимо считать, находится всегда в одном и том же месте байта. Поясню на примере:
У меня есть переменная char data;
На каждый такт мне приходит байт и всего их будет 8 штук, например:
0b00100001
0b00100101
0b00100101
0b00100001
0b00100001
0b00100001
0b00100101
0b00100001
Бит, выделенный жирным шрифтом мне нужно отследить и поставить в правильно место в переменную data и в результате переменная должны быть вот такой: data == 0b01100010
Но составить алгоритм у меня никак не выходит, надеюсь на помощь сообщества
В кратце:
1) входной байт & 0b00000100 - остается только искомый бит
2) результат сдвигаем влево на 5 битов - искомый бит на нужную позицию
3) data & 0b01111111 - обнуляем бит в data, куда поместим результат
4) data | входной байт (or) - помещаем искомый бит в нужную позицию data
как-то так, конкретно в инструкциях AVR не напишу - надо изучать