Тема: AVR
Показать сообщение отдельно
Старый 30.10.2013, 14:54   #37
Pilot
 
Адрес: Киев
Сообщений: 335
Длина: 5700мкм
Диаметр: 35мм
Отправить сообщение для Pilot с помощью ICQ
По умолчанию

Цитата:
Сообщение от Kino Посмотреть сообщение
длинное сообщение
вот здесь вроде немного понятно:


char GetEncoder(void)
while (GetEncoder()) == 2)
{
if (PINB & 0x80 == 0)
{
PORTD=0b00001000;
return 1; // выход с флагом 1, что сработал по "if (PINB & 0x80 == 0) "
// иначе там единица, продолжаем
}

// я так понимаю, что если 8-ая нога порта В равна 0, то на выходе порта D будет 00001000, в противном случае идем дальше.


switch (PINB & 0x0F)
{
case 0x0B: PORTD=0b00000001; break;
case 0x09: PORTD=0b01000000; break;
case 0x08: PORTD=0b00100000; break;
case 0x0A: PORTD=0b00000010; break;
case 0x0E: PORTD=0b00000100; break;

default: return 2; break;
// если ничего не совпало - возвращаем 2.
}
// Здесь, как я понял, определение выражения на 4х ногах порта В (PINB & 0x0F) - (в двоичной =00001111), тех, на которых кнопки задатчика
// соответствие входа выхода вроде бы такое:
// 1011 - 00000001
// 1001 - 01000000
// 1000 - 00100000
// 1010 - 00000010
// 1110 - 00000100
}

// До тех пор, пока будет возвращатся 2, будет выполнятся оператор while. в противном случае опреатор прекращается, я имею на порту D нужный сигнал и могу выполнять следующую процедуру.



Правильно понял?
__________________
Надейся на лучшее, расчитывай на худшее
Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi

Последний раз редактировалось Pilot; 30.10.2013 в 15:00.
Pilot вне форума   Ответить с цитированием