2014-02-05 66 views
1

我試圖發送轉換後的溫度讀數從我的DS1820到我的電腦使用PIC16F877 uart。我正在使用MPLABX和XC8編譯器,該編譯器在usart.h中有一個內部版本,不過它只對PIC18系列有用,所以我使用usart_pic16.h,它已經被第三方編寫用於PIC16系列。發送轉換後的DS1820溫度超過PIC16 uart

我成功從DS1820採集其十六進制形式的溫度,並將其轉換爲人類可讀的浮點數,但是我找不到通過UART將浮點值轉發到PC的方法。

的usart_pic16.h庫允許使用以下方法直接發送的字符,字符串,線和整數在USART: -

  • 空隙USARTWriteChar(炭CH);
  • void USARTWriteString(const char * str);
  • void USARTWriteLine(const char * str);
  • void USARTWriteInt(int16_t val,int8_t field_length);

我一直在尋找一種方法來發送跨越uart使用這個庫,其中包括提取和發送一個小數點的浮動值。

我曾嘗試發送一個字符串是這樣的: -

  • USARTWriteString( 「TempC =%7.3f攝氏度\ r \ n」 個,temp_c);

其中temp_c是temp的float值,但在編譯時出現「太多函數參數」錯誤。可能很明顯,那些在那裏的c大師,我很遺憾不是:(

也許一種方法是從浮點提取每個值,並將其作爲一個int發送,除了小數點可能找到每個值的'如果'檢查,然後當發現小數點只是發送它作爲字符例如USARTWriteChar('。'),它可以工作。不幸的是,我不知道如何提取單個浮點值或者如果它做到這一點的最好辦法。

我不知道,如果是需要我的代碼來解決這個所以以爲我會避免,除非有人問濫發它。

任何幫助將是巨大的。

謝謝。

回答

2

一般等價物將包括<stdio.h>並做類似如下:

char s[64]; 
sprintf(s, "TempC= %7.3f degrees C \r\n", temp_c); 
USARTWriteString(s); 

雖然嵌入式平臺,你可能是最好的避免可以使用的代碼空間公平一點的printf風格功能在一個小型微控制器上同樣在上面的例子中,將浮點轉換分離爲單獨的sprintf並單獨輸出字符串的其餘部分是有意義的,因此緩衝區s不必如此大。

這應該讓你運行一會兒,但從長遠來看,你可能想要把溫度轉換成整數,例如乘以1000,然後解碼PC上的值,這是假設你最終打算寫您自己的應用程序與微控制器進行通信。

+0

完成這項工作,非常感謝您的幫助和快速響應。我最終可能會看到代碼中的流,但現在我只是喜歡前進:)。問候。 – Markus