Показать сообщение отдельно
Старый 19.07.2017, 00:57   #1
Dublin
Матёрый пользователь
 
Аватар для Dublin
 
Регистрация: 24.05.2010
Адрес: Украина, Херсон
Сообщений: 1,463
Вы сказали Спасибо: 790
Поблагодарили 579 раз(а) в 234 сообщениях
Dublin стоит на развилке (репутация по умолчанию)
Отправить сообщение для Dublin с помощью Skype™
По умолчанию Микроконтроллеры. Всё обо всём.

Решил я немного поизучать эти все дела микроконтрольные (через книжки естественно), и весь вечер ломаю голову над одной проблемой.
Покажу фрагмент программы (микро attiny 2313)
Скрытый текст:

if ((PIND&(1<<PD0))==0)
{
perem=0b10000000;
while(perem !=0)
{
PORTB = ~perem;
perem= perem >> 1;
_delay_ms(200);

}
}
else {
perem=0x00000001;
while (perem !=0) {
PORTB = ~perem;
perem= perem << 1;
_delay_ms(200);

Программа простая как двери: есть 8 светодиодов, которые должны переключатся одна за другой. Не понятен принцип работы цикла с инверсией(~). Если убрать инверсию, то переключение ламп в этом случае происходит, но горят одновременно все лампы.
Если изначально включить инверсию (~perem) то байт 0x00000001 станет 0x11111110, тогда за счет открытости порта должны гореть 7 из 8 ламп (я так думаю, но так не происходит) А дальше по программе если двигать единицу и инвертировать байт, то вообще нифига не пойму, как тогда переключение происходит. Вообщем кто в этом понимает, - объясните на пальцах, пожалуйста.
__________________
дон дигидон

Последний раз редактировалось Dublin; 19.07.2017 в 01:01.
Dublin вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо Dublin за это полезное сообщение:
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА