如何从xmega读取输入然后在超级终端上显示它

时间:2016-10-04 09:30:54

标签: c avr

我正在尝试从我的ATxMega128a1读取输入,然后在我的超级终端上显示它。 8位输入(4低,4高,lsb和msb)。在端口引脚6上安装了一个按钮。

我已经编写了代码,但是当我编译代码时,我收到了这个错误:

  

“expect')'''''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 个答案:

答案 0 :(得分: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. 

如果没有更多代码,很难说你想要做什么,但我希望你能让它发挥作用。