于浩
(遼東學(xué)院)
【摘要】針對數(shù)據(jù)幀格式固定、校驗(yàn)方式單一以及傳輸速率不便于更改等問題,提出了一種通過 STC89C516RD+單片機(jī)實(shí)現(xiàn)的軟件編解碼方法。該方法通過定時(shí)器的延時(shí)來實(shí)現(xiàn)對數(shù)字信號的編碼;通過外部中斷與定時(shí)器相結(jié)合的方式進(jìn)行解碼,即利用接收到的脈沖信號的上升沿啟動(dòng)定時(shí)器工作,下降沿停止定時(shí)器工作并觸發(fā)外部中斷,然后讀取計(jì)數(shù)寄存器的值并識別數(shù)據(jù)。實(shí)驗(yàn)證明,該方法的數(shù)據(jù)幀格式及校驗(yàn)方式靈活多變,而且可以降低無線傳輸系統(tǒng)的成本,適用于無線控制、數(shù)據(jù)采集、故障報(bào)警等多種無線數(shù)據(jù)通信場合。
【關(guān)鍵詞】編碼 解碼 定時(shí)器 外部中斷
一、現(xiàn)有的編解碼技術(shù)
(一)硬件編解碼技術(shù)
目前有多種用于編碼和解碼的專用芯片,PT2262/PT2272是比較常用的一種。在通常的使用中,一般采用8位地址碼和4位數(shù)據(jù)碼,這時(shí)編碼芯片PT2262和解碼芯片PT2272的第1~8腳為地址設(shè)定腳。有三種狀態(tài)可供選擇:懸空、接正電源和接地,38為6561,所以地址編碼不重復(fù)度為6 561組,只有發(fā)射端PT2262和接收端PT2272的地址編碼完全相同時(shí),才能配對使用。當(dāng)編碼啟動(dòng)端TE接低電平時(shí),PT2262就將從數(shù)據(jù)輸入端D0~D3輸入的數(shù)據(jù)經(jīng)過編碼后從DOUT引腳串行輸出,數(shù)據(jù)幀的高8位為地址,低4位為數(shù)據(jù),發(fā)送時(shí)以先高位、后低位的順序逐次發(fā)送。每一幀發(fā)送4次,每幀數(shù)據(jù)中間由同步碼隔開。PT2272只有在連續(xù)2次檢測到相同的地址碼和數(shù)據(jù)碼時(shí)才會(huì)把數(shù)據(jù)碼中的“1”驅(qū)動(dòng)相應(yīng)的數(shù)據(jù)輸出端為高電平和驅(qū)動(dòng)VT引腳同步為高電平,將VT引腳反向后接入單片機(jī)的外部中斷輸入引腳,通過觸發(fā)中斷來通知單片機(jī)接收到數(shù)據(jù)了。PT2262/PT2272芯片功耗低、外部元器件少、工作電壓范圍寬。但這兩個(gè)芯片在應(yīng)用中必須對地址統(tǒng)一編碼,配對使用,而且需要通過改變硬件電路才能重新設(shè)置芯片地址;該編碼芯片的幀格式是固定的,不能隨意改動(dòng),而且編碼的脈沖寬度需要調(diào)節(jié)外接振蕩電阻大小才能改變。這些都給用戶的使用帶來了極大的不便。
(二)軟件編解碼技術(shù)
在利用單片機(jī)和無線傳輸模塊進(jìn)行無線數(shù)據(jù)傳輸?shù)倪^程中,使用軟件編解碼時(shí)通常會(huì)采用定時(shí)采樣的方式??傮w設(shè)計(jì)思想如下:發(fā)送端通過定時(shí)器延時(shí)產(chǎn)生不同寬度的脈沖或脈沖組合來實(shí)現(xiàn)對數(shù)據(jù)“0”和“1”的編碼。接收端對接收到的脈沖信號進(jìn)行定時(shí)采樣,然后通過計(jì)算識別出對應(yīng)的數(shù)據(jù)信號。通過定時(shí)采樣的方式進(jìn)行解碼時(shí),對采樣頻率具有比較嚴(yán)格的要求。根據(jù)奈奎斯特理論,只有采樣頻率高于發(fā)射信號最高頻率的2倍時(shí),才能把數(shù)字信號準(zhǔn)確還原。但是中斷的響應(yīng)與返回以及數(shù)據(jù)的判斷都會(huì)造成時(shí)間延遲,因此,發(fā)射信號的頻率不能太高,否則容易導(dǎo)致數(shù)據(jù)丟失。同時(shí)定時(shí)采樣需要多次調(diào)用中斷服務(wù)程序,增加了額外的時(shí)間開銷。這些都會(huì)降低無線數(shù)據(jù)傳輸?shù)乃俾省?/p>
二、軟件解碼原理及程序流程
解碼是用特定方法把數(shù)碼還原成它所代表的內(nèi)容,或?qū)㈦娒}沖信號轉(zhuǎn)換成它所代表的信息、數(shù)據(jù)等過程。本文采用定時(shí)器與外部中斷相結(jié)合的方法對接收到的脈沖信號進(jìn)行解碼,并利用接收到的校驗(yàn)和進(jìn)行校驗(yàn)。 將單片機(jī)的模式控制寄存器TMOD的門控位GATE置1,當(dāng)TR1=1時(shí),外部中斷INT1直接控制定時(shí)器1的啟動(dòng)、停止,即INT1由0變?yōu)?電平時(shí),啟動(dòng)計(jì)數(shù);當(dāng)INT1由1變?yōu)?電平時(shí),停止計(jì)數(shù)。這種情況常用來測量在INT1引腳上出現(xiàn)的正脈沖的寬度。無線接收電路,無線接收模塊將接收到的信號進(jìn)行解調(diào)、放大和整形,恢復(fù)出基帶信號,由引腳2輸出到單片機(jī)的INT1引腳上。設(shè)置外部中斷1為下降沿觸發(fā)方式,定時(shí)器/計(jì)數(shù)器1為16位定時(shí)器工作方式。當(dāng)INT1引腳上出現(xiàn)由高到低的負(fù)跳變時(shí)觸發(fā)中斷,定時(shí)器1停止計(jì)數(shù),讀取計(jì)數(shù)寄存器TL1和TH1中的值來判斷脈沖寬度,從而解碼接收到的數(shù)據(jù)信號。
由于在發(fā)送過程中重裝計(jì)數(shù)初值、接收數(shù)據(jù)以及中斷的響應(yīng)都需要時(shí)間,所以接收到的實(shí)際脈沖寬度大于發(fā)送的脈沖寬度。因此,如果接收到的高電平脈沖寬度大于300T則表示接收到同步位;若大于200T則表示接收到數(shù)據(jù)位“0”;否則表示接收到數(shù)據(jù)位“1”。軟件解碼流程圖,在接收到同步位后,開始接收數(shù)據(jù),直到再次接收到同步位的時(shí)候暫停接收。利用接收到的數(shù)據(jù)以及校驗(yàn)和進(jìn)行校驗(yàn),如果接收到的數(shù)據(jù)正確,則停止接收;如果不正確,則將之前接收到的數(shù)據(jù)全部丟棄,再重新開始接收。
實(shí)驗(yàn)證明,通過該方法進(jìn)行軟件編碼和解碼時(shí),可以根據(jù)不同的需要使用軟件編程來設(shè)置地址,接收端與發(fā)送端可以進(jìn)行多對多的無線數(shù)據(jù)通信,而不需要配對使用;改變定時(shí)器的計(jì)數(shù)寄存器初值就可以改變編碼的脈沖寬度,從而改變傳輸速率;解碼準(zhǔn)確快捷,占用CPU資源相對較少,便于操作;校驗(yàn)方式可選,數(shù)據(jù)幀格式靈活多變。 本實(shí)驗(yàn)中采用的是晶振頻率為12 MHz的石英晶體,以及具有CISC結(jié)構(gòu)的8位單片機(jī),它的一個(gè)機(jī)器周期要占用12個(gè)振蕩周期,執(zhí)行一條指令最少要一個(gè)機(jī)器周期,處理速度較慢,在一定程度上影響了無線傳輸速率??梢酝ㄟ^提高晶振頻率或者選擇速度較快的單片機(jī)作為控制芯片的方式來提高無線數(shù)據(jù)傳輸速率。如選擇具有流水線結(jié)構(gòu)的C8051F系列單片機(jī),或者是具有預(yù)取指令功能的AVR系列單片機(jī),它們可以在一個(gè)時(shí)鐘周期內(nèi)完成一條指令。也可以采用具有DW8051_core核的單片機(jī),它采用4個(gè)時(shí)鐘周期為1個(gè)指令周期的模式,在時(shí)鐘周期相同的情況下,處理能力是標(biāo)準(zhǔn)8051的3倍。采用這些高速度的單片機(jī)可以減少程序執(zhí)行所產(chǎn)生的延遲時(shí)間,從而縮短數(shù)據(jù)位編碼脈沖寬度,提高無線數(shù)據(jù)傳輸速率。