基于單片機的多機無(wú)線(xiàn)短信通信系統設計
(3)應用層
本文引用地址:http://dyxdggzs.com/article/264813.htm應用層處于最高層,它為應用進(jìn)程提供了接入點(diǎn),直接為用戶(hù)的應用進(jìn)程提供服務(wù)。在此自定義為短信通信協(xié)議(Message Communication Protocol,MCP)。
3.1 定時(shí)器T2中斷模塊
中斷處理采用片內CCPI中斷捕捉方式,對外部接口引腳CCP上輸入的脈沖信號上升沿或下降沿進(jìn)行實(shí)時(shí)捕捉檢測。借助于這個(gè)強大的邊沿捕捉功能,很容易對信號的高電平時(shí)間進(jìn)行檢測,從而實(shí)現對WTP解讀功能。中斷服務(wù)程序流程如圖7所示。

在解讀WTP過(guò)程中只要判斷出同步碼,就對這一碼字進(jìn)行初始化,把脈沖個(gè)數計數器清O;然后每捕捉到一個(gè)高電平,脈沖個(gè)數計數器就加1并保存記錄該脈沖。捕捉到一個(gè)高電平后,若高電平時(shí)間寬度為409.6~819.2μs,就認為是窄脈沖;高電平時(shí)間寬度為819.2~1 228.8μs,就認為是寬脈沖;若高電平時(shí)間寬度小于409.6μs或大于1 228.8μs,則認為該脈沖為干擾信號,當低電平時(shí)間寬度大于819.2μs時(shí)也認為是干擾信號。收到干擾信號后將脈沖個(gè)數計數器清0,并把正在接收的碼字丟棄處理。當接收到25個(gè)脈沖后對前面16個(gè)脈沖進(jìn)行處理,若每個(gè)位碼不是由一個(gè)窄脈沖和一個(gè)寬脈沖組成的,就認為接收正常。接收正常后,通過(guò)一個(gè)接收到數據的標志位反饋到MCP(短信通信協(xié)議)上處理,通信協(xié)議會(huì )根據該標志位到接收緩存中取剛剛接收到的數值。
一個(gè)字節的數據波形如圖8所示。根據無(wú)線(xiàn)傳輸協(xié)議定義,發(fā)送的一個(gè)完整的碼字由數據碼、校驗碼、同步碼組成(圖中用虛線(xiàn)隔開(kāi)這3個(gè)部分)。數據碼和校驗碼都用寬度不同的脈沖來(lái)表示,2個(gè)窄脈沖表示“0”,2個(gè)寬脈沖表示“1”。每組字碼之間有同步碼隔開(kāi),同步碼用一個(gè)窄脈沖和一個(gè)比較寬的低電平表示。一個(gè)字碼由8位數據碼、4位校驗碼和1個(gè)窄脈沖組成。若每個(gè)位碼用2個(gè)脈沖來(lái)代表,則一個(gè)碼字就是由25個(gè)脈沖組成。無(wú)線(xiàn)傳輸協(xié)議定義窄脈沖時(shí)間寬度為 739.2μs,寬脈沖時(shí)間寬度為1 156.8μs,而脈沖之間的低電平時(shí)間統一為331.2μs,同步碼的低電平時(shí)間寬度為5 ms。
圖8表示發(fā)送~個(gè)十六進(jìn)制數“57H”,ASCII碼的“57H”表示字符“W”。圖中前16個(gè)脈沖表示“57H”的數據碼,二進(jìn)制表示為 “B01010111”;中間8個(gè)脈沖表示校驗碼,在該協(xié)議中校驗碼固定定義為半個(gè)字節的“AH”,二進(jìn)制表示為“B1010”;同步碼則為一個(gè)時(shí)間寬度為739.2μS的窄脈沖和一個(gè)時(shí)間寬度為5 ms的低電平。

該協(xié)議中從以下幾個(gè)方面來(lái)提高抗干擾能力:
?、倜總€(gè)碼字由25個(gè)脈沖組成;
?、诿總€(gè)位碼用2個(gè)脈沖來(lái)表示;
?、坌r灤a用“B1010”(“O”、“1”間隔)來(lái)排除干擾;
?、苋魯祿a大于7FH,則作為無(wú)效數據處理。
3.2 發(fā)送短信模塊
這個(gè)模塊實(shí)現MCP功能,編輯短信采用ASCII碼格式,短信內容取值范圍為ASCII碼的20H~7AH,ASCII碼內容可以參照ASCII碼表。 7CH~7FH作為特殊功能碼來(lái)處理。短信內容格式要求為3個(gè)字符的“名字+內容”。例如:要給名為L(cháng)ZX的通信器發(fā)短信,可寫(xiě)成“LZX:……”。應用層的短信通信協(xié)議要求發(fā)送機發(fā)送短信順序是:
?、侔l(fā)送短信開(kāi)始碼(即7FH);
?、诎l(fā)送短信的頭3個(gè)字符(即接收者的名字);
?、鄣却邮照叩亩绦砰_(kāi)始應答信號(即7DH);
?、苁盏綉鹦盘柡箝_(kāi)始發(fā)送短信內容;
?、荻绦艃热莅l(fā)完后發(fā)短信結束碼(即7EH);
?、薜却邮照叩亩绦沤Y束應答信號(即7CH)。
由于是無(wú)線(xiàn)發(fā)送與接收,有時(shí)會(huì )接收不到信號,所以當沒(méi)有收到短信開(kāi)始應答信號時(shí)就從第一步再開(kāi)始執行。若執行8次依舊沒(méi)有收到應答信號,就得出“無(wú)此人發(fā)送失敗”的結果。若沒(méi)有收到短信結束應答信號,就得出“發(fā)送中止失敗”的結果,否則就顯示“對方已收到”。
因為無(wú)線(xiàn)發(fā)射的特點(diǎn),第一組字碼非常容易受零電平干擾,往往會(huì )產(chǎn)生誤碼,所以剛開(kāi)始發(fā)射的短信開(kāi)始碼一般要發(fā)2~3次。如圖9所示,發(fā)送了5個(gè)碼字的數據:7FH,7FH,57H,44H,58H(分別為開(kāi)始碼、開(kāi)始碼、W、D、X,其中“WDX"’為萬(wàn)能名)。然后,等待接收者的短信開(kāi)始應答信號再發(fā)短信內容。

3.3 接收短信模塊
在這個(gè)模塊中實(shí)現對MCP解讀功能。根據MCP,在解讀中只要判斷出接收到短信開(kāi)始碼,就將收短信的標志位置1,并開(kāi)始設置一個(gè)通信超時(shí)值,然后繼續接收下3個(gè)字符再與本身名字或萬(wàn)能名比較。應用層的短信通信協(xié)議要求接收機接收短信順序是:
?、僖坏┙邮盏蕉绦砰_(kāi)始碼就進(jìn)入接收短信;
?、诮邮?個(gè)字符后與本身名或萬(wàn)能名比較,若同名就反饋應答信號,否則返回到①;
?、劾^續接收短信內容;
?、芙邮盏浇Y束碼后反饋應答信號,若沒(méi)收到結束碼且通信超時(shí)則返回到①。
在任何狀態(tài)收到短信的結束碼后,都會(huì )在液晶顯示屏的第一行顯示“receive a mess”,并以聲、光形式提示收到短信,由用戶(hù)手動(dòng)查閱新的短信。
3. 4編輯短信模塊
這個(gè)模塊實(shí)現對短信的編輯,類(lèi)似于手機編輯短信的模式;有單字刪除鍵、快速刪除鍵、全部清除鍵、標點(diǎn)符號鍵、輸入狀態(tài)大小寫(xiě)字母或數字的切換鍵,短信尾部可顯示光標。因為受液晶屏幕所限,規定一條短信內容長(cháng)度為70個(gè)字符,編輯時(shí)限制字數為67個(gè)字符,發(fā)送時(shí)軟件上自動(dòng)在短信尾部添加本機名并發(fā)送。液晶屏幕第一行顯示正在編輯狀態(tài)、現在的時(shí)間和大小寫(xiě)輸入狀態(tài)。在該模塊中,主要是要定位好顯示和編輯指針,然后對各個(gè)按鍵做處理。
結 語(yǔ)
本文闡述的設計方法集編碼和解碼技術(shù)、通信協(xié)議技術(shù)、抗干擾技術(shù)、編輯短信技術(shù)、液晶點(diǎn)陣顯示技術(shù)于一體。實(shí)現任意兩機之間可以互發(fā)70個(gè)ASCII碼字符的短信,可以像普通手機一樣編輯短信,機子可以由用戶(hù)命名以區別其他機子,實(shí)現一機對一機的通信,也可以用萬(wàn)能名(“WDX”)實(shí)現一機對多機的通信??梢源鎯σ粭l發(fā)送出去的短信,也可以存儲一條剛接收到的短信和舊的短信。整個(gè)系統人機交互界面友好,類(lèi)似于普通手機系統,有操作提示,易于操作。本設計中采用分層的協(xié)議可以很容易地把無(wú)線(xiàn)通信模塊用其他性能更好的無(wú)線(xiàn)模塊替換。
萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
蜂鳴器相關(guān)文章:蜂鳴器原理 脈寬調制相關(guān)文章:脈寬調制原理 燃氣報警器相關(guān)文章:燃氣報警器原理
評論