2012-05-03 1 views
0

Я использую встроенный C на Keil. Я пытаюсь запрограммировать так, что он хранит бит, сдвигает бит, а затем сохраняет его снова, и он повторяется до тех пор, пока не будут сохранены все восемь бит.Почему мой бит не сдвинулся с места?

Однако, когда я отлаживаю (возможно, неправильно отлаживает), значение показывает только «01 00 00 00 00 00 00 ...». Когда он хранит логику «1», а затем, когда он сдвигается влево, он показывает «02 00 00 00 00 00 00 ...». Когда цикл повторяется, он показывает одно и то же снова и снова. Я ожидал, что «01 01 01 01 01 01 01 ...» (скажем, все входные биты были «1»). Как решить эту проблему?

#include <reg51.h> 

sbit Tsignal = P1^2; 
unsigned char xdata x[500]; 

for(u=0; u<8; u++) 
{ 
    x[i] = x[i] << 1; 
    x[i] = Tsignal; //Store Tsignal in x 
} 

А, я уже решил.

unsigned int u; 
unsigned char p; 
unsigned char xdata x[500]; 

for(u=0; u<8; u++) //Bit Shift Loop 
{ 
    x[i] = x[i] <<1; //Left Bit Shift by 1 
    p = Tsignal;  //Store Tsignal to Buffer p 
    x[i] |= p; 
} //End Bitshift loop 
+0

В стандартном C нет прямой поддержки bitarrays. Вы используете что-то конкретное для Keil - можете ли вы включить определение x? – DaveR

+0

Как объявляется 'x'? – sarnold

+2

Почему вы сразу переписываете значение, созданное с помощью 'Tsignal'? – sarnold

ответ

1

Я думаю, что вы хотите сделать что-то вроде этого:

for(u=0;u<8;u++) 
{ 
    // Update Tsignal. 
    //Tsignal = GetBitValue(); 

    // Store it to x. 
    x = (x << 1) | (Tsignal & 0x1) 
} 
+0

Могу ли я узнать, что такое GetBitValue(); Функция? – xrainxfallx

+2

Я думаю, вы хотите ИЛИ это не И это x = (x << 1) | (Tsignal & 1) –

+0

GetBitValue() - псевдокод. Он представляет собой функцию, которая возвращает значение бита, например, цифрового ввода общего назначения. – sizzle

Смежные вопросы