Написал код на си последовательного вывода данных, в котором передается 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
}
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. Не могу понять почему.