2016-11-08 411 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