Перейти к содержанию
    

Проблема с программным SPI

Привет всем. Такая ламерская проблемка с 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. Не могу понять почему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в

if (Data && 16)

Должно быть так:

if (Data & 16)

а ещё лучше, ИМХО, конечно же, так

if (Data & (1 << 4))

т.к. && - логическое И, а & - побитовое И.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

msalov, спасибо за пояснения - точно, подзабыл. И вторая ваша запись конечно получше будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...