2014-03-12 159 views
0

我需要通過UDR0寄存器爲我的C#應用​​程序發送浮點數據。我可以在應用程序中讀取它,但我無法使用UDR0發送浮點數據,因爲UDR0是1個字節(8位)寄存器,浮點數是4個字節。通過UDR0上的串口寫入浮點數據?

#include <avr/interrupt.h> 
#include <avr/io.h> 
#include <util/delay.h> 




void setup() 
{  

    #define USART_BAUDRATE 9600 
    #define UBRR_VALUE (((F_CPU/(USART_BAUDRATE * 16UL))) - 1) 
    UBRR0H = (uint8_t)(UBRR_VALUE>>8); 
    UBRR0L = (uint8_t)UBRR_VALUE; 
    UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // Turn on the transmission, reception, and Receive interrupt 
    UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00); 
    interrupts(); 
} 

int c = 0; 
float send_ ; 



void loop() 
{ 

} 

ISR(USART_RX_vect) 
{ 
    cli(); 
    while(!(UCSR0A&(1<<RXC0))){}; 
    c= UDR0; // clear the USART interrupt 
    send_ = (c/4); 
    UDR0 = send_; 
    sei(); 
} 

回答

0

你應該閱讀4個字節(如果你發送的二進制數據,如果編碼成一個字符串,nimber是可變的),使用工會(還有其他的方式,但工會是easyest)轉換字節浮動,除以4,然後發回4字節。

因爲它是以指數格式存儲的(請參閱IEE754),您可以只爲尾數做這件事,但它會極其複雜,並且邊際或無增益。

+0

這意味着事情變得越來越熱。 C是好的,但註冊和portwis的東西都很累。我會考慮你的建議。謝謝 – Zgrkpnr