реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблема с программным SPI
dortonyan
сообщение Nov 18 2013, 09:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 5-09-10
Пользователь №: 59 314



Привет всем. Такая ламерская проблемка с 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. Не могу понять почему.
Go to the top of the page
 
+Quote Post
msalov
сообщение Nov 18 2013, 11:33
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Проблема в
Код
if (Data && 16)
Должно быть так:
Код
if (Data & 16)
а ещё лучше, ИМХО, конечно же, так
Код
if (Data & (1 << 4))
т.к. && - логическое И, а & - побитовое И.

Go to the top of the page
 
+Quote Post
dortonyan
сообщение Nov 18 2013, 12:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 5-09-10
Пользователь №: 59 314



msalov, спасибо за пояснения - точно, подзабыл. И вторая ваша запись конечно получше будет.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 19:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01574 секунд с 7
ELECTRONIX ©2004-2016