Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с программным SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
dortonyan
Привет всем. Такая ламерская проблемка с 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
Проблема в
Код
if (Data && 16)
Должно быть так:
Код
if (Data & 16)
а ещё лучше, ИМХО, конечно же, так
Код
if (Data & (1 << 4))
т.к. && - логическое И, а & - побитовое И.

dortonyan
msalov, спасибо за пояснения - точно, подзабыл. И вторая ваша запись конечно получше будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.