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

Написал свой маленький протокол передачи команд.
теперь нужно передавать постоянно меняющуюся переменную.
передать её не проблема, а проблема грамотно разложить по битам. ниже привожу код со сдвигом битов.
код подсмотрел и переделал для реализации внутри одного устройства из протокола передачи i2c, но ничего не понял как работает. что-то куда-то сдвигается. пробовал по разному, но увы

вот код:
Код
CodeVision:

unsigned char mask=0x80;

if(dled<8)
      {
       if(cifra&0x80)
       {
        cifra1=cifra1+mask;
       }
       cifra<<=1;
       cifra1>>=1;
      
      }


имеется переменная cifra с каким-либо значением. требуется побитово перекопировать её в cifra1. Подскажите как это правильно будет выглядеть? и как сдвиг работает поясните, если не сложно.
Заранее спасибо!
rezident
Не совсем понял, а в каком порядке биты во второй переменной должны располагаться? Если в таком же как и в первой, то я бы написал так (с учетом того, чтобы не портить исходную переменную):
Код
unsigned tmp=8, mask=0x80;
while(tmp>0)
{ if((cifra&mask)!=0)
   { cifra1|=mask;
   }
   else
   { cifra1&=~mask;
   }
   mask>>=1;
   tmp--;
}

Насчет сдвига в СИ читайте учебник по СИ. И не потому, что я не могу или не хочу объяснить, а потому, что самостоятельный поиск и результат самостоятельного прочтения лучше способствует восприятию и запоминанию. ИМХО.
jekler
Спасибо smile.gif
уже разобрался smile.gif
defunct
rezident
А tmp там зачем?

while (mask)
...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.