2016-10-04 50 views
0

我試圖從ATxMega128a1讀取輸入,然後在超級終端上顯示它。 8位輸入(4低電平,4高電平,lsb & msb)。上了車端口引腳安裝一個按鈕6.如何從xmega讀取輸入,然後在超級終端上顯示它

我已經寫代碼,但是當我編譯它,我得到這個錯誤:

"expected ')' before '*' token"

這裏是我的代碼:

#define x PORTH 
    PORTE.DIRCLR  = PIN6_bm; 
    PORTE.PIN6CTRL = PORT_OPC_PULLDOWN_gc; 

while(1) 
{ 
    char x; 

    if(!(PORTH_IN&PIN6_bm)) 
    {    
     // if button pressed 
     PORTJ_OUTSET = PIN0_bm; 
     PORTJ_OUTSET = PIN1_bm; 
     PORTJ_OUTSET = PIN2_bm; 
     PORTJ_OUTSET = PIN3_bm; 
     PORTJ_OUTCLR = PIN4_bm; 
     PORTJ_OUTCLR = PIN5_bm; 
     PORTJ_OUTCLR = PIN6_bm; 
     PORTJ_OUTCLR = PIN7_bm; 

     scanf("%d",&x); 
     printf("%d\n",x);   
    }                 
} 

return 0; 
} 

什麼我做錯了嗎? 而且,我是否爲我的目的做正確的事情?

+1

您在哪一行發生此錯誤? –

+1

只需刪除'#define x PORTH'。 這沒有任何意義,因爲然後每次在程序中寫入'x'時,預處理器會將'x'替換爲'PORTH'。 然後,編譯器實際上看到'char PORTH;'而不是'char x;',這與之前的'PORTH'聲明(你沒有顯示順便說一句)衝突。 –

+1

不要爲整個文件定義單個字母的宏。使用更長和不言自明的名字。這也適用於變量,但對於宏可能會導致更多的混亂。 – Olaf

回答

0

PORTH由#define PORTH (*(unsigned char *) 0x102)定義。正如Michael Walz在他的評論中指出的那樣,你最終會遇到將x定義爲一件事,然後將其聲明爲變量的問題。

char x; // becomes 
char PORTH; //which becomes 
char (*(unsigned char *) 0x102); 

不工作,因爲聲明中,它需要一個變量名。 也許,你不需要以兩種不同的方式使用x。

但也許,您的方法主要反對意見是使用scanf()。要閱讀PORTH,只需將其分配給一個變量,或者直接打印出來。

char c = PORTH; // copies the value of the inputs pins into variable c. 
printf("%d\n", PORTH); // prints the value of the input pins as a number. 

這是相當困難的告訴你正在嘗試沒有更多的代碼,這樣做,但我希望你能得到它的工作。

+0

你是對的先生..我已經糾正它。 thx這麼多先生的線索.. – user6318361

相關問題