我正试图通过UART向我的AVR发送十六进制数据。问题是,我不能发送超过两对十六进制。我需要发送两个以上,比如9-10。
例如:我只能发送0x2f
和0x3f
。如果我发送更多,它总是负的。
我需要发送0xff234f3a3f
。
sendString("wish me luckn");
while(1)
{
char str[35];
int i;
printf("enter the code :n");
scanf("%x", &i);
printf("%#x (%d)n",i,i);
}
我做错了什么?
您可以通过将您希望发送的数据存储在软件缓冲区中来实现这一点,并且一旦avr发送了1byte的uart数据,就用来自软件缓冲区的字节填充uart寄存器。你可以这样做:-
char ar[] = "hello";
for (i = 0; i < strlen(ar); i++) {
while ((UCSR0A & (1<<UDRE0)) == 0);
UDR0 = ar[i];
}
希望能有所帮助
AVR UART有大小限制,因为它是在嵌入式环境中,所以UART缓冲区只有8/16位。你可以发送2个字节的数据,要发送更多的数据,你需要做一个循环来发送剩余的数据字节。