C 通过UART发送十六进制

C 通过UART发送十六进制,c,hex,avr,uart,C,Hex,Avr,Uart,我正试图通过UART向我的AVR发送十六进制数据。问题是,我最多只能发送两对十六进制。我需要发送两个以上,比如9-10 例如: 我只能发送0x2f和0x3f。 如果我发送的超过这个,它总是负的 我需要发送0xff234f3a3f 我的代码: sendString("wish me luck\n"); while(1) { char str[35]; int i; printf("enter the code :\n"); scan

我正试图通过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);
}

我做错了什么?

AVR UART有一个大小限制,因为它在嵌入式环境中,所以UART缓冲区只有8/16位。您可以发送2个字节的数据,要发送更多数据,您需要创建一个循环来发送剩余的数据字节

您可以通过将要发送的数据存储在软件缓冲区中,并在avr发送1字节的uart数据后,用软件缓冲区中的字节填充uart寄存器来实现这一点。您可以这样做:-

char ar[] = "hello";
for (i = 0; i < strlen(ar); i++) {
    while ((UCSR0A & (1<<UDRE0)) == 0);
    UDR0 = ar[i]; 
}
char ar[]=“你好”;
对于(i=0;i虽然((UCSR0A&(1)对不起,我发错了。但即使有了这段代码,它仍然只能发送两对十六进制。没什么,怎么办?奇怪。第一段代码使用了一个30的
char
数组,现在代码使用
int
。为什么要将type
int
%x一起使用
?您的文档中对什么类型应该与
“%x”
一起使用有何说明?不..这只是以前代码的一部分,但这里主要关注的是发送2对以上的hexdata。并且%x是我在internet上找到的唯一可以做我想要的事情的数据类型int i;声明只提供16位(2字节)内存。10十六进制需要10x8位内存。AVR中最长的数据类型只有64位(uint64_t)你想从什么位置发送到AVR?你的代码运行吗?还是你想从AVR发送?我真的不清楚。我怎么能这样做?一个lil示例可以帮我。提前发送thx。请看下面的链接可能会有所帮助。int i;声明只提供16位(2字节)的服务16位足够好了,它允许您在字符数组中存储65536个元素