| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Сдвиг бита в части регистра |
| Автор: supercelt 24.7.2016, 13:39 | ||
| Здравствуйте. Есть порт В микроконтроллера stm32 Я задействую 5,6,7,8 пины. Остальные служат под другие нужды. В цикле for надо на 5 пин подать 1, а при следующем заходе в цикл - сдвигать ее влево. Получится, что цикл проворачивается и каждый раз нужно ставить 1 с 5 по 8 пин, при этом что бы остальные пины были 0. Можно конечно сделать вот так
Но это быдлокодирование не катит. Затык, не могу сообразить. Я уверен, что программеры с опытом делают это в 1 - 2 строчки. Как? |
| Автор: Mikron 24.7.2016, 17:49 | ||
|
| Автор: Курсант 25.7.2016, 09:24 | ||||||
Эммм.. Простите, не понял проблемы. У Вас есть число, неважно, что там записано в какой пин. Для сдвига Вы просто делаете такую операцию:
Это если нужно все остальные биты числа оставить нулевыми. Если нужно оставить биты без изменения, то так
Можно набросать такую функцию:
|
| Автор: baldman88 25.7.2016, 11:20 | ||||||
Mikron все верно написал. Только "или" перед знаком равенства излишне и можно это все упростить:
|
| Автор: qwerty4 28.7.2016, 16:51 | ||
Понаплодили тут извращенств
|
| Автор: Mikron 28.7.2016, 17:14 | ||||
Все же рекомендуется регистр BSRR как я понимаю ![]() |
| Автор: supercelt 28.7.2016, 18:50 |
| Да, рекомендуют работать именно с BSRR и BRR |
| Автор: qwerty4 29.7.2016, 13:48 |
Странные вы оба. Слышу звон, да не знаю где он. Перевожу на русский язык это ваше "рекомендуется": Если не хотите заморачиваться с обеспечением атомарности чтения с последующей записью, то можете использовать регистр B(S)RR. Если нет требований (как в исходном вопросе) к атомарности, то можете не использовать. |
| Автор: supercelt 28.8.2016, 14:13 | ||||
Голова уже кипит. Поделитесь пож опытом. Почему вот так работает
А вот так не работает
Я хочу через BSRR, а единица не скачет по битам а всё время стоит на последнем 8. Работает только когда использую ODR. Я уверен, что причина как всегда в какой-нибудь фигне. Просто пока у меня мало опыта) |