我在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
在標準C存在於bitarrays沒有直接的支持。您是否在使用Keil特有的東西 - 您能否包含您對x的定義? – DaveR
如何聲明'x'? – sarnold
爲什麼你立即用'Tsignal'覆蓋你創建的值? – sarnold