利用單片機(jī)和無(wú)線數(shù)傳模塊來(lái)完成無(wú)線數(shù)據(jù)通信在石油、電力,、水文,、冶金等行業(yè)的無(wú)線控制、數(shù)據(jù)采集,、報(bào)警諸多領(lǐng)域中有著廣泛的應(yīng)用前景,。通常采用的辦法是用單片機(jī)的串行I/ O 口來(lái)完成數(shù)據(jù)通信,但是該方法有許多不足之處:第一、在利用單片機(jī)的串口進(jìn)行發(fā)送和接收數(shù)據(jù)時(shí),,對(duì)傳輸?shù)臄?shù)據(jù)只能進(jìn)行奇偶校驗(yàn),,然而在無(wú)線通信場(chǎng)合,被傳輸?shù)臄?shù)據(jù)極易受到電磁,、靜電等的干擾,奇偶校驗(yàn)一般不能檢測(cè)出這類干擾所引起的突發(fā)性錯(cuò)誤,,所以該方法無(wú)法滿足差錯(cuò)檢測(cè)要求較高的場(chǎng)合;第二,、由于單片機(jī)一般采用異步通信方式,接受器通常不能很快的接收到有效數(shù)據(jù),,因而該方法也不能滿足要求多路進(jìn)行快速切換的場(chǎng)合;第三,、單片機(jī)的串口通信在傳輸速率和每幀的有效數(shù)據(jù)位數(shù)等方面都受到了嚴(yán)格的限制,缺乏靈活性,。本文針對(duì)低速無(wú)線通信的場(chǎng)合,,提出了一種通過(guò)單片機(jī)用軟件實(shí)現(xiàn)編解碼的方案,該方案可以有效克服上述單片機(jī)串口通信的不足之處,, 在無(wú)線通信中得到了令人滿意的效果[1 - 4 ] ,。
1 編碼原理及程序流程
1. 1 編碼原理
假設(shè)傳輸?shù)臄?shù)據(jù)精度為12 位,以A8BH 為例,,其幀格式如圖1 所示,,高位在先,低位在后[5 ] ,。數(shù)據(jù)的編碼采用了曼徹斯特編碼格式,,每幀數(shù)據(jù)由同步頭、有效數(shù)據(jù)位和校驗(yàn)位三部分組成,。其中數(shù)據(jù)位“1”由高到低的跳變表示,,數(shù)據(jù)位“0”由低到高的跳變表示,而且數(shù)據(jù)位“1”和“0”高低電平周期各為0. 5 T (設(shè)T 為一個(gè)數(shù)據(jù)位寬度) ,。根據(jù)曼徹斯特碼的特點(diǎn),,每個(gè)數(shù)據(jù)位都由高低電平組成,因而在連續(xù)傳輸?shù)挠行?shù)據(jù)位中不會(huì)存在超過(guò)一個(gè)數(shù)據(jù)位寬度的高電平或低電平,,因此在每個(gè)數(shù)據(jù)的前面設(shè)一個(gè)同步頭,,高低電平各為1. 5 T 。這樣在進(jìn)行接收數(shù)據(jù)時(shí),,只要采樣得到的電平滿足1. 5 T ,,則認(rèn)為該電平是同步頭,開(kāi)始接收數(shù)據(jù),。因?yàn)閷ふ彝筋^的時(shí)間最長(zhǎng)不會(huì)超過(guò)一個(gè)數(shù)據(jù)的長(zhǎng)度,,所以此編碼方式非常適合于要求多路進(jìn)行快速切換的場(chǎng)合。為了簡(jiǎn)化電路和節(jié)省功耗,本文采用了單極性曼徹斯特碼,。
本文采用了循環(huán)冗余校驗(yàn),,即后四位為循環(huán)冗余校驗(yàn)碼。循環(huán)冗余校驗(yàn)碼簡(jiǎn)稱為CRC ( CyclicRedundancy Code) ,。循環(huán)冗余校驗(yàn)的指導(dǎo)思想是發(fā)送端將被傳輸?shù)臄?shù)據(jù)流多項(xiàng)式除以生成多項(xiàng)式得到冗余位,,接收端將被傳輸?shù)臄?shù)據(jù)(包括冗余位) 除以事先確定的生成多項(xiàng)式,如果余數(shù)為零,,則認(rèn)為沒(méi)有錯(cuò)誤發(fā)生,,不為零則表示有錯(cuò)。由于使用這種方法獲得冗余位具有很強(qiáng)的信息覆蓋能力,,它善于發(fā)現(xiàn)各種類型的錯(cuò)誤,,特別是一些突發(fā)性錯(cuò)誤,所以它是一種效率極高的差錯(cuò)校驗(yàn)法[6 ] ,。
根據(jù)CRC 碼的編碼思想[7 ] ,,對(duì)(16 ,12) 碼,,由x 16 + 1 確定生成多項(xiàng)式為G ( x ) = x 4 + 1 ,,該多項(xiàng)式也可表示成(10001) 。對(duì)被傳輸?shù)?2 位數(shù)據(jù)和生成多項(xiàng)式采用模2 運(yùn)算便可以得到每個(gè)數(shù)據(jù)的四位循環(huán)冗余位,。
1. 2 編碼子程序流程圖及說(shuō)明
曼徹斯特編碼子程序包括計(jì)算冗余位和曼徹斯特編碼發(fā)送兩部分,,首先調(diào)用CRC 求余子程序(流程圖略) ,將得到的冗余校驗(yàn)位作為待發(fā)送16 位數(shù)據(jù)的低四位,,然后對(duì)該16 位,,并通過(guò)無(wú)線數(shù)傳模塊調(diào)制成模擬信號(hào)發(fā)射出去(單片機(jī)的TXD 端與無(wú)線數(shù)傳模塊發(fā)的DATA IN 端相連) 。同步頭及數(shù)據(jù)位發(fā)送是通過(guò)對(duì)單片機(jī)的TXD 端( P3. 1) 置“1”和清“0”并進(jìn)行軟件延時(shí)來(lái)實(shí)現(xiàn),。TIME1 和TIME2 為軟件延時(shí),,以滿足同步頭高低電平寬度的要求。值得注意的是,,在編寫(xiě)編碼子程序時(shí),,應(yīng)確保P3. 1 置“1”和清“0”時(shí)間間隔滿足數(shù)據(jù)位或同步頭寬度的要求。
2 解碼原理及程序流程
2. 1 解碼原理
解碼的思想是:首先進(jìn)行同步頭的判定,,然后采用“測(cè)三取二”的法判斷數(shù)據(jù)位,,得到每幀的16 位數(shù)據(jù),最后對(duì)得到的數(shù)據(jù)進(jìn)行CRC 校驗(yàn),。
(1) 同步頭的判定
首先對(duì)單片機(jī)的RXD 端( P3. 0) 進(jìn)行連續(xù)采樣,,從P3. 0 引腳變低時(shí)開(kāi)始計(jì)時(shí),若低電平的時(shí)間達(dá)到1. 3 T ,,則認(rèn)為該電平為同步頭,。因?yàn)橛脽o(wú)線數(shù)傳模塊得到的信號(hào)波形一般為梯形,所以接收到的實(shí)際高低電平寬度可能變小,因此若接收到低電平寬度達(dá)到1. 3 T ,,則可近似認(rèn)為該電平為某數(shù)據(jù)的同步頭,。
(2) 數(shù)據(jù)位的判定
對(duì)每個(gè)數(shù)據(jù)位的判定采用“測(cè)三取二”的方法,既將每個(gè)數(shù)據(jù)位的前半部分成16 個(gè)狀態(tài),,在第7 ,、8 、9 狀態(tài)檢測(cè)P3. 0 引腳上的電平,,取其大于等于2的相同值作為測(cè)得值,,如表1 所示(表中“ x ”表示“0”或“1”) 。此檢測(cè)方法是在高電平或低電平的中間位置進(jìn)行采樣,,既提高了采樣準(zhǔn)確度又有一定的濾波功能。
(3) 循環(huán)冗余校驗(yàn)
對(duì)解碼得到的16 位數(shù)據(jù)進(jìn)行循環(huán)冗余校驗(yàn),,若余數(shù)為零,,則認(rèn)為傳輸正確,否則進(jìn)行出錯(cuò)處理,。
2. 2 解碼子程序流程圖及說(shuō)明
解碼子程序包括曼徹斯特解碼和差錯(cuò)校驗(yàn)兩部分,,其流程圖如圖3 所示。首先進(jìn)行同步頭的判定,,從RXD 端( P3. 0) 為低電平時(shí)開(kāi)始計(jì)時(shí)(單片機(jī)的RXD 端與無(wú)線數(shù)傳模塊收的DATA OU T 端相連) ,,并對(duì)P3. 0 引腳進(jìn)行連續(xù)采樣,采樣時(shí)間間隔可自行設(shè)定,,若P3. 0 引腳的低電平時(shí)間達(dá)到1. 3 T ,,則認(rèn)為該低電平為某數(shù)據(jù)的同步頭,然后對(duì)同步頭后面的數(shù)據(jù)位的前半位采用“測(cè)三取二”的方法進(jìn)行數(shù)據(jù)位的判定,,最后對(duì)采樣得到的16 位數(shù)據(jù)進(jìn)行循環(huán)冗余校驗(yàn),,若余數(shù)為0 ,則置錯(cuò)誤標(biāo)志,,若不為0 ,,則去掉冗余位, 得到12 位有效數(shù)據(jù),。TIME1~TIME3 是湊采樣的時(shí)間間隔,。
3 結(jié)論
實(shí)驗(yàn)證明,與單片機(jī)串口通信相比,,使用該方案來(lái)進(jìn)行無(wú)線數(shù)據(jù)通信抗干擾能力強(qiáng),,數(shù)據(jù)傳輸格式靈活。同時(shí)從軟件編解碼中可以發(fā)現(xiàn),,如果改變軟件延時(shí)時(shí)間則可以改變系統(tǒng)的通信速率,,設(shè)計(jì)者可以根據(jù)數(shù)據(jù)通信的實(shí)際需要自行設(shè)定。而且該編解碼方案適合任何種類的單片機(jī)。因此該方案適合各種無(wú)線數(shù)據(jù)通信的場(chǎng)合,。盡管軟件編解碼的最大缺點(diǎn)是系統(tǒng)獨(dú)占主機(jī),,在有中斷任務(wù)的系統(tǒng)中,將無(wú)法保證編解碼程序運(yùn)行時(shí)獨(dú)占主機(jī),,但是可以使用上述方案用專門單片機(jī)作為編譯碼器,,將其嵌入系統(tǒng)中,這樣既克服了軟件編解碼程序獨(dú)占主機(jī)的缺點(diǎn),,又充分利用了軟件編解碼的優(yōu)點(diǎn),, 因此該方案也具有一定的通用性 。