为什么我的位没有左移?

时间:2012-05-03 02:13:58

标签: c embedded microcontroller 8051 keil

我在Keil上使用嵌入式C语言。我正在尝试编程使其存储一位,位移,然后再次存储它并重复直到存储所有八位。

但是,当我调试(可能是错误地调试)时,该值仅显示“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

1 个答案:

答案 0 :(得分:1)

我想你想做这样的事情:

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

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