我试图通过UART将十六进制数据发送到我的AVR。问题是,我不能发送两对以上的十六进制。我需要发送两个以上,比如9-10。
例如:
我只能发送0x2f
和0x3f
。
如果我发送的不止于此,它总是减去。
我需要发送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);
}
我做错了什么?
答案 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个字节的数据,发送更多需要进行循环以发送剩余的数据字节。