<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機AD轉換數據存儲及串口效率

PIC單片機AD轉換數據存儲及串口效率

作者: 時(shí)間:2011-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏

A/D 后的通常需要占用兩個(gè)8 位寬的RAM 單元, 而 單元有限,因此造成了單元不能被有效利用, 同時(shí)通過(guò)向上位機傳送時(shí)也需要花費較多的時(shí)間。

本文引用地址:http://dyxdggzs.com/article/172405.htm

為此提出一種打包的方法, 使得相同的數據量占用較少的空間, 并可提高傳輸。

引言

在由單片機和PC 機構成的檢測系統中, 通常會(huì )由多個(gè)單片機采集數據并將經(jīng)過(guò)A/D 的數據通過(guò)送往上位PC 機進(jìn)行數據處理。 單片機A/D 后的結果大多是8 位或10 位的, 8 位的A/D轉換不涉及該問(wèn)題。以10 位的數據為例, 在單片機內進(jìn)行存儲時(shí)需要占用2 個(gè)8 位的字節, 低8 位和高2位分別存儲在2 個(gè)字節中, 但是用于存儲高位數據的8 位寬的RAM 單元中僅有2 位是有效數據。

單片機的存儲空間有限, 以單片機為例, RAM 數據存儲器按功能分為通用寄存器和特殊功能寄存器兩個(gè)部分, 除去特殊功能寄存器外, 僅有368 個(gè)8 位寬的RAM 單元, 單片機能夠存儲的數據量很有限。假設將每次A/D 轉換的數據直接存儲, 每個(gè)數據都要占用2 個(gè)字節, 理想狀態(tài)下也只能存儲184 個(gè)數據; 假設需要存儲100 個(gè)A/D 轉換的數據, 就要占用200 個(gè)字節的單元, 這樣的存儲方式并未將單片機的存儲空間充分利用, 同時(shí), 如果將A/D 轉換后的數據通過(guò)直接上傳, 串口就要向上傳送200 幀的數據, 有效傳輸速率比較低, 沒(méi)有充分利用數據幀中的數據位。為此,本文提出如下方法將A/D 轉換后的數據先進(jìn)行處理后再存儲或上傳。

1 程序設計思路

以10 位的A/D 轉換為例, 可以將A/D 轉換的結果暫存在a[size] 中, 然后把數組a 中的數據一位一位地取出, 把低8 位和高8 位拆開(kāi)分別存放, 低8 位存放在數組b 中, 高8 位存放在數組c 中, 由于高8 位的數據中只有2 位是有效數據, 我們可以把有效數據取出組合成一個(gè)新的數據存放, 當上傳數據后再用相反的方法解碼, 把數據恢復到原先的狀態(tài)。這樣對于10 位的A/D 轉換來(lái)說(shuō)可以節省3/8 的空間, 需要向上位機傳送的數據也會(huì )比較少, 數據傳輸時(shí)間僅為原來(lái)的5/8。

2 采用C 語(yǔ)言編寫(xiě)的程序

本文采用PIC16F877 單片機進(jìn)行試驗。其中定義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++ ;
}
}

程序首先利用一個(gè)for 循環(huán)將A/D 轉換后的數據拆開(kāi), 將低8 位存放在數組b 中, 高2 位暫時(shí)存放在數組c 中。由于數組c 中的8 位二進(jìn)制數據都是僅有低2 位是有效數據, 所以第二個(gè)for 循環(huán)將c[i]、c[i+1]、c[i+2]、c[i+3]中的2 位有效數據取出, 按照由低到高的順序重新組合成一個(gè)8 位的二進(jìn)制數,放入數組d, 構成一個(gè)新的數組。這樣A/D 轉換結果由原來(lái)用數組a 表示變成了由數組b 表示低8 位、數組d 表示高2 位的狀態(tài)。

程序中的h、j、n、m 用于記錄最后轉換的數據存儲在數組的位置, 在下一次轉換的時(shí)候, 數據可以接在上一次的數據后面, n 和j 在主程序中convert ( ) 被調用之前首先被賦值為0。

3 結論

根據以上程序, 我們可以按照類(lèi)似的方法把12 位的A/D 轉化結果進(jìn)行組合, 將12 位的A/D 轉換結果拆成低8 位和高4 位, 再將2 個(gè)高4 位重新組合成一個(gè)8 位的二進(jìn)制數存儲, 這樣對于12 位的A/D 轉化結果可以節省1/4 存儲空間, 縮短1/4 傳輸時(shí)間。

該程序的執行時(shí)間僅為990us, 相對于數據的傳輸時(shí)間是很小的。在單片機空間小的情況下, 以程序的執行時(shí)間來(lái)?yè)Q取單片機的存儲空間是值得的。同時(shí)又能有效地縮短數據的上傳時(shí)間, 提高有效數據的傳輸速率。但是在數據量較少的時(shí)候, 比如只有1 個(gè)A/D 轉換的數據, 這樣做反而會(huì )耗費時(shí)間、降低。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>