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
4

1 に答える 1

1

私はあなたがこのようなことをしたいと思います:

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

  // Store it to x.
  x = (x << 1) | (Tsignal & 0x1)
}
于 2012-05-03T02:21:06.227 に答える