Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Побитное присвоение в CVAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kuller
например так:

if(data & (1 << 3)){ PORTC |= (1 << 5);}else{ PORTC &= ~(1 << 5);}

или
PORTC = (PORTC & ~(1 << 5)) | (((data & (1 << 3)) >> 3) << 5)

А попроше можно??
htla
Для компилятора проше так:


out_data &= (^ (1 << bit_out));
if ( (in_data & (1 << bit_in)) != 0) out_data |= (1 << bit_out);

При использование макросов, будет что-то типа

#define SetBit(out_data,in_data,bit_ou,bit_in) \
{ \
out_data &= (^ (1 << bit_out)); \
if ( (in_data & (1 << bit_in)) != 0) out_data |= (1 << bit_out); \
}


далее в теле функций

SetBit (PORTC,data,3,5);
Сергей Борщ
Цитата(Kuller @ Jan 7 2007, 00:27) *
А попроше можно??
А что нужно-то? На "телесистемах" советов надавали, но пока не узнаем зачем именно все это надо оптимальное решение подсказать трудно.
Kuller
Спасибо за совет!
Хотелось-бы уточнить, после данной операции значения остальных
битов порта останутся прежними??
htla
Да, если не будет прерываний менющих этот порт.
Сергей Борщ
Цитата(htla @ Jan 7 2007, 16:53) *
Да, если не будет прерываний менющих этот порт.
Если это порт, регистры которого лежат в IO-области (A,B,C,D), то такая конструкция (в большинстве компиляторов) компилируется в инструкции sbi, cbi которые атомарные и прерывания тут не помешают.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.