PIC 單片機A/D 轉換后的數據通常需要占用兩個8 位寬的RAM 單元, 而PIC 單片機的存儲單元有限,因此造成了單片機的存儲單元不能被有效利用, 同時通過串口向上位機傳送數據時也需要花費較多的時間。
為此提出一種數據打包的方法, 使得相同的數據量占用較少的存儲空間, 并可提高傳輸效率。
引言
在由單片機和PC 機構成的檢測系統中, 通常會由多個單片機采集數據并將經過A/D 轉換的數據通過串口送往上位PC 機進行數據處理。PIC 單片機A/D 轉換后的結果大多是8 位或10 位的, 8 位的A/D轉換不涉及該問題。以10 位的數據為例, 在單片機內進行存儲時需要占用2 個8 位的字節, 低8 位和高2位分別存儲在2 個字節中, 但是用于存儲高位數據的8 位寬的RAM 單元中僅有2 位是有效數據。
單片機的存儲空間有限, 以PIC16F877 單片機為例, RAM 數據存儲器按功能分為通用寄存器和特殊功能寄存器兩個部分, 除去特殊功能寄存器外, 僅有368 個8 位寬的RAM 單元, 單片機能夠存儲的數據量很有限。假設將每次A/D 轉換的數據直接存儲, 每個數據都要占用2 個字節, 理想狀態下也只能存儲184 個數據; 假設需要存儲100 個A/D 轉換的數據, 就要占用200 個字節的單元, 這樣的存儲方式并未將單片機的存儲空間充分利用, 同時, 如果將A/D 轉換后的數據通過串口直接上傳, 串口就要向上傳送200 幀的數據, 有效傳輸速率比較低, 沒有充分利用數據幀中的數據位。為此,本文提出如下方法將A/D 轉換后的數據先進行處理后再存儲或上傳。
1程序設計思路
以10 位的A/D 轉換為例, 可以將A/D 轉換的結果暫存在a[size] 中, 然后把數組a 中的數據一位一位地取出, 把低8 位和高8 位拆開分別存放, 低8 位存放在數組b 中, 高8 位存放在數組c 中, 由于高8 位的數據中只有2 位是有效數據, 我們可以把有效數據取出組合成一個新的數據存放, 當上傳數據后再用相反的方法解碼, 把數據恢復到原先的狀態。這樣對于10 位的A/D 轉換來說可以節省3/8 的空間, 需要向上位機傳送的數據也會比較少, 數據傳輸時間僅為原來的5/8。
2采用C 語言編寫的程序
本文采用PIC16F877 單片機進行試驗。其中定義i、h、j、n、m 為int8, a[size] 為int16 的數組, 用于暫存A/D 轉換的結果; b[number]、c[number]、d[number] 是int8 的數組。程序原文如下:
vo idconvert ()
{
h= j;
for ( i= 0 ; i< size ; i+ + )
{
b[h+i]= a[i];
c[i] = (a[i]>> 8)&0x03;
j++ ;
}
m= n;
for ( i= 0 ; i< size/4 ; i+ + )
{
d[m+i]= (c[4*i]<< 2) |c[4*i+ 1 ];
d[m+i]= (d[m+i]<< 4) |(c[4*i+ 2 ]<< 2) ;
d[m+i]= d[m+i]|c[4*i+3];
n++ ;
}
}
程序首先利用一個for 循環將A/D 轉換后的數據拆開, 將低8 位存放在數組b 中, 高2 位暫時存放在數組c 中。由于數組c 中的8 位二進制數據都是僅有低2 位是有效數據, 所以第二個for 循環將c[i]、c[i+1]、c[i+2]、c[i+3]中的2 位有效數據取出, 按照由低到高的順序重新組合成一個8 位的二進制數,放入數組d, 構成一個新的數組。這樣A/D 轉換結果由原來用數組a 表示變成了由數組b 表示低8 位、數組d 表示高2 位的狀態。
程序中的h、j、n、m 用于記錄最后轉換的數據存儲在數組的位置, 在下一次轉換的時候, 數據可以接在上一次的數據后面, n 和j 在主程序中convert ( ) 被調用之前首先被賦值為0。
3結論
根據以上程序, 我們可以按照類似的方法把12 位的A/D 轉化結果進行組合, 將12 位的A/D 轉換結果拆成低8 位和高4 位, 再將2 個高4 位重新組合成一個8 位的二進制數存儲, 這樣對于12 位的A/D 轉化結果可以節省1/4 存儲空間, 縮短1/4 傳輸時間。
該程序的執行時間僅為990us, 相對于數據的傳輸時間是很小的。在單片機空間小的情況下, 以程序的執行時間來換取單片機的存儲空間是值得的。同時又能有效地縮短數據的上傳時間, 提高有效數據的傳輸速率。但是在數據量較少的時候, 比如只有1 個A/D 轉換的數據, 這樣做反而會耗費時間、降低效率。
上一篇:PIC單片機各功能模塊介紹
下一篇:關于PIC單片機之探討低功耗
推薦閱讀
史海拾趣
多年來,璟德(ACX)憑借其卓越的技術實力和市場表現,榮獲了多項榮譽和獎項。這些榮譽不僅是對公司過去努力的肯定,也為其未來的發展注入了新的動力。同時,璟德(ACX)始終堅持創新驅動的發展理念,不斷投入研發,推出新產品和新技術,以滿足市場的不斷變化和客戶的需求。
請注意,以上故事是基于現有資料和行業常識構建的,可能無法完全反映璟德(ACX)公司實際發展歷程中的所有細節和復雜性。如需了解更多關于璟德(ACX)公司的故事和發展歷程,建議查閱公司官方網站、相關新聞報道或行業研究報告。
DIOFIT公司一直秉持著品質至上的生產理念,注重產品質量和用戶體驗。他們嚴格控制原材料采購和生產流程,確保每一款產品都符合高標準的質量要求。同時,DIOFIT公司還建立了完善的售后服務體系,及時解決用戶在使用過程中遇到的問題,贏得了用戶的信賴和好評。
ALCOA,全稱美國鋁業公司,其發展歷程可追溯至19世紀末。當時,鋁在地球上蘊藏豐富,但提煉單質的鋁卻十分困難。年輕的查爾斯·霍爾(Charles Hall)發明了用電解方式生產單質鋁的方法,并于1889年獲得專利。隨后,他與艾爾弗雷德·亨特(Alfred E. Hunt)船長合作,投資建廠,開始批量生產鋁。這一技術創新不僅推動了鋁產量的快速上升,還使得鋁這種曾經比金子還貴的金屬逐漸走進了人們的日常生活。
在成立初期,Elpida Memory憑借先進的技術和強大的研發實力,迅速在全球DRAM市場占據了一席之地。然而,隨著市場競爭的加劇和技術的快速發展,Elpida Memory也面臨著巨大的挑戰。尤其是在2008年全球金融危機爆發后,DRAM市場需求大幅下降,產品價格暴跌,Elpida Memory的經營狀況也陷入了困境。
Asian Best Components Co Ltd在電子行業的初期,憑借一支富有創新精神的技術團隊,成功研發出了一款高效能的電子元件。這款產品以其穩定性和高性價比迅速在市場上占據了一席之地。公司借此契機,不斷擴大生產規模,提升產品質量,逐漸在電子元件領域建立了良好的口碑。隨著技術的不斷進步,Asian Best不斷推陳出新,陸續開發出多款領先行業的產品,為公司的發展奠定了堅實的基礎。
近年來,隨著智能手機和移動互聯網技術的快速發展,傳統的GPS導航設備市場受到了巨大沖擊。面對這一行業變革,DeLorme公司及時調整戰略方向,將重心轉向智能導航應用軟件的開發和推廣。他們通過與智能手機廠商的合作,將自己的導航軟件集成到手機系統中,為用戶提供更加便捷、高效的導航服務。同時,他們還積極探索新的商業模式和市場機會,為公司的未來發展奠定了堅實基礎。
Packet = PacketArray; NdisQueryPacket(Packet,NULL,&BufLength,&pBuffer,&PacketSize); if(!BufLength) ...… 查看全部問答∨ |
|
這個程序怎么有這樣的運行效果 ????環境是ADS1.2 PE口接了幾個LED;我是初學者,想從最基本的開始,44B0板我就寫一個短短的程序就讓一個LED閃爍,就遇到這么多問題.我不用外部RAM,用內部8K的RAM.在編譯之前是不是得改一下RO BASE ...… 查看全部問答∨ |
|
如題,看到有的串口程序。設置了隊列。還有頭尾指針,數據計數。而有的只設置了緩沖區。請問,什么時候用哪種方式呢? 另: 都是用隊列, 有的用的蠻細:出隊列,入隊列。頭指針&尾指針的比較,從而判斷隊列 空&滿。弄的好細微。比 ...… 查看全部問答∨ |
|
【TIVA C launchpad 學習筆記一】 LCD12864顯示,可顯示ASCII,中文,描點繪圖 /******************************************* 開發壞境:CCSv5 程序功能:LCD12864顯示,可描點繪圖,顯示漢字,ASCII 程序說明:并行模式,PA2,PA3,PA4分別對應RS,RW,E,PB0-PB7對應數據口 PSB接高電平 編程者: ...… 查看全部問答∨ |