dortonyan 1 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба Привет всем. Такая ламерская проблемка с PIC32: не могу найти трабл в программе. Написал код на си последовательного вывода данных, в котором передается 5-тирязрядное число. unsigned char Data = 15; // 5-ти разрядное число unsigned char i; for (i=0; i<5; i++) { mPORTBClearBits(BIT_3); // CLK установить 0 if (Data && 16) mPORTCSetBits(BIT_0); // DAT установить 1 else mPORTCClearBits(BIT_0); // DAT установить 0 Data <<= 1; // Сдвиг mPORTBSetBits(BIT_3); // CLK установить 1 } В результате, если значение Data = 0, то на выходе порта данных ноль. Но если задано число больше нуля, то на выходе данных все 5 тактов единицы, независимо от значения числа. В симуляторе проверял значение регистра Data - оно сдвигается, как и положено. Т.е. неправильно работает условие побитового "И": всегда дает единицу, при значении Data > 0. Не могу понять почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба Проблема в if (Data && 16) Должно быть так: if (Data & 16) а ещё лучше, ИМХО, конечно же, так if (Data & (1 << 4)) т.к. && - логическое И, а & - побитовое И. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба msalov, спасибо за пояснения - точно, подзабыл. И вторая ваша запись конечно получше будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться