2012-05-03 88 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