c - 为什么我的位不左移?

标签 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

最佳答案

我认为你想做这样的事情:

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

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

关于c - 为什么我的位不左移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424218/

相关文章:

c - sscanf(str1, "%s %d %f", str2,&num,&float1) 产生意外结果

c - 按首字母排序字符串 [C]

c - 用 fgets 读取输入?

c - ARM cortex如何处理PendSV Handler

debugging - 使用 openocd 闪存和调试 STM32F7 发现

c - 从函数返回 NULL 值到 C 中的指针

c++ - 初始化 int 影响函数返回值

lua - 从 C 回调闭包时 GC 中的 MemFault

c - 在 CMake 中编译静态 C 库时未生成中间 .obj 文件

c - 如何仅从 8051 串行发送一次字符串?