C语言 通过UART发送Hex



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

例如:

我只能发送0x2f0x3f。如果我发送更多,它总是负的。

我需要发送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个字节的数据,要发送更多的数据,你需要做一个循环来发送剩余的数据字节。

最新更新