2016-11-08 363 views
1

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

例如:

我只能派出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); 
} 

我做了什么错?

+0

对不起,我张贴了错误的one.but即使有这样的代码,它仍然只能派两对十六进制的。没有更多,该怎么办? – user6318361

+0

好奇。第一个代码使用了一个30的char数组,现在代码使用'int'。为什么在''%x''中使用'int'类型?你的文档说什么类型应该与'“%x”'一起使用? – chux

+0

nah ..它只是从前面的代码中剩下的,但是这里主要关注的是发送超过2对的hexdata。 %x是我在互联网上发现的唯一数据类型,可以做我想要的 – user6318361

回答

0

由于AVR UART在嵌入式环境中的尺寸有限制,所以UART缓冲区只有8/16位。您可以发送2个字节的数据,发送更多的数据需要循环发送剩余的数据字节。

+0

我怎么能这样做?一个例子会为我做。 thx提前。 – user6318361

+0

看看下面的链接http://electronics.stackexchange.com/questions/168709/how-to-send-string-in-serial-communication-in-avr-c可能会有所帮助。 –

1

您可以通过将您希望发送的数据存储在软件缓冲区中,并且一旦avr发送1字节的uart数据,使用来自软件缓冲区的字节填充uart寄存器来实现此目的。你可以做这样的事情: -

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

希望这有助于

+0

thankx先生,生病先尝试一下。 – user6318361

+0

int i;声明只提供16位(2字节)的内存。 – Tristanto

+1

16位是不够的,它允许你存储字符数组中的65536个元素 – rabatra