通过UART发送十六进制

时间:2016-11-08 03:37:49

标签: c hex avr uart

我试图通过UART将十六进制数据发送到我的AVR。问题是,我不能发送两对以上的十六进制。我需要发送两个以上,比如9-10。

例如:

我只能发送0x2f0x3f。 如果我发送的不止于此,它总是减去。

我需要发送0xff234f3a3f

我的代码:

sendString("wish me luck\n");

while(1)
{               
    char str[35];
    int i;

    printf("enter the code :\n");
    scanf("%x", &i);
    printf("%#x (%d)\n",i,i);
}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以通过将要发送的数据存储在软件缓冲区中来实现此目的,并且只要avr发送1字节的uart数据,就将uart寄存器填入软件缓冲区中的字节。你可以这样做: -

char ar[] = "hello";
for (i = 0; i < strlen(ar); i++) {
    while ((UCSR0A & (1<<UDRE0)) == 0);
    UDR0 = ar[i]; 
}

希望这有帮助

答案 1 :(得分:0)

AVR UART在嵌入式环境中具有大小限制,因此UART缓冲区仅为8/16位。您可以发送2个字节的数据,发送更多需要进行循环以发送剩余的数据字节。