軒仔 發問時間: 電腦與網際網路程式設計 · 1 0 年前

8051 C語言 語法問題

我用的是89S52

使用 Keil uVision3

我想用一個Port 來轉換成10進位

所以我用了2個方法寫 但是都有問題

幫我看一下 哪裡語法錯誤

c=(P0_0 *1+ P0_1*2+P0_2*4+P0_3*8+P0_4*16+P0_5*32+P0_6*64+ P0_7*128);

這一段 出現問題 顯示

MAIN.C(33): error C193: '*': bad operand type

我也試過 把乘號 全換成+號 卻變成

MAIN.C(33): error C193: '+': bad operand type

另一個方法

if (P0_0=1)

{

c=c+1;

}

if (P0_1=1)

{

c=c+2;

}

if (P0_2=1)

{

c=c+4;

}

if (P0_3=1)

{

c=c+8;

}

一直寫到P0_7

每一句if都出現

MAIN.C(45): warning C276: constant in condition expression

變數c 我定義 int

這些都我自己想的 也許不是最好的方法

可是 我真的想不出來 錯在哪...

如果無法判斷 我在把我全部的程式打上來

已更新項目:

(unsigned char) C = P0 ;

我試了一下 好像不是我要的答案耶

我要的答案是

P0_0,P0_1,P0_2,P0_3,P0_4,P0_5,P0_6,P0_7

|| || || || || || || ||

1 1 1 1 1 1 1 1 出來的答案是255

0 0 0 0 0 0 0 1 答案會是 128

還有什麼方法嗎?

2 個已更新項目:

不是不是

我不是要8051輸出

是現在有8個腳輸入進來 就接在P0_0~7

用P0 來判定這8個輸入的值 給C

2 個解答

評分
  • 1 0 年前
    最佳解答

    (unsigned char) C = P0 ;

    不就是結果了嗎? 你到底要求甚麼???

    2010-10-13 09:47:35 補充:

    P0 = 0xFF = 0b11111111 = 255

    P0 = 0x80 = 0b10000000 = 128

    這哪裡有問題?????

  • Lv 4
    1 0 年前

    一樓大大說的應該沒錯, 不知所謂不是您要的答案是什麼意思 ?

    可能的話, 請注意P0組態是open-drain, 若當輸入, 外部電路是否已加pull-up電阻(當然, 這取決於您的輸入來源為何), 並在程式初始化時先行寫入

    P0 = 0xFF;

還有問題?馬上發問,尋求解答。