Цитата(Makeda @ Oct 17 2012, 11:14)

Подскажите где ошибка в коде.
Код
Data_out = Latchs[0]^i;
Выражение Latchs[0]^i - сложение по модулю 2 (исключающее ИЛИ) двух операндов, а не взятие бита i из Latchs[0], как это, вероятно, Вы подумали. Вероятно, Вас ввело в заблуждение записи типа:
Код
sbit CLK_out = P2^6;
Но, в данном случае, это исключение из правил - расширение языка, где символ " ^ " не является оператором...
Правильнее записать, что-то типа этого:
Код
Data_out = (Latchs[0] >> i) & 0x01;
Выделять под массив Latchs область памяти BDATA в вашем случае не имеет никакого смысла...
P.S. Хорошо бы при вопросе указывать информацию о трансляторе и микроконтроллере.