2012-05-03 50 views
0

我在Keil上使用嵌入式C.我试图编写这样的程序,它存储一些位,然后再存储它,直到所有8位都被存储为止。为什么我的位没有左移?

但是,当我调试(也许调试错误)时,该值只显示“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