多臺(tái)單片機(jī)的通信系統(tǒng),已有很多資料做了介紹,在這些系統(tǒng)中的數(shù)據(jù)通訊一般采用的是串行通信方式。串行通信可采用有線與無線兩種方式,作者根據(jù)單片機(jī)串行通信原理、脈沖編碼調(diào)制(PCM)技術(shù)和紅外無線通信技術(shù),開發(fā)設(shè)計(jì)了單片機(jī)編解碼紅外無線通信接口。用該接口構(gòu)成的新型無線抄表系統(tǒng),利用紅外線這種非電信號(hào)作為傳輸介質(zhì),來傳送數(shù)據(jù)信息,可以在那些不適合或不方便架設(shè)電纜線及電磁干擾較強(qiáng)的工作環(huán)境,來實(shí)現(xiàn)單相電度表的抄表系統(tǒng),完成電度表用電量的抄錄、設(shè)置表底數(shù)、電度表校準(zhǔn)等工作。本文就利用單片機(jī)紅外通信技術(shù)實(shí)現(xiàn)無線抄表系統(tǒng)做一介紹。
1.紅外線通信原理
在抄表機(jī)數(shù)據(jù)通信系統(tǒng)中,單片機(jī)之間的數(shù)據(jù)通信采用一對(duì)多的主從模式,利用波長(zhǎng)為940μm的遠(yuǎn)紅外波通信。其原理示意圖如圖1。主機(jī)(即抄表機(jī)單片
機(jī))負(fù)責(zé)發(fā)送從機(jī)(即電度表單片機(jī))地址、控制命令及調(diào)度,從機(jī)則負(fù)責(zé)收集現(xiàn)場(chǎng)信息,進(jìn)行一定的數(shù)據(jù)處理,根據(jù)主機(jī)的要求返回?cái)?shù)據(jù),并執(zhí)行主機(jī)發(fā)出的命令。抄表機(jī)單片機(jī)與電度表單片機(jī)之間的信息交換是通過串行通信來實(shí)現(xiàn)。在采用主從式多機(jī)串行通信系統(tǒng)中,從機(jī)不主動(dòng)發(fā)送命令或數(shù)據(jù),一切都由主機(jī)控制。由于發(fā)送和接收共用同一物理信道因此在任意時(shí)刻只允許一臺(tái)從機(jī)處于發(fā)送狀態(tài),其余的從機(jī)不能發(fā)送。只有被主機(jī)呼叫的從機(jī)才能占用總線,對(duì)主機(jī)做出應(yīng)答。
每臺(tái)從機(jī)均分配有一個(gè)唯一的從機(jī)地址,主機(jī)與從機(jī)通信時(shí),主機(jī)先呼叫某從機(jī)地址,喚醒被叫從機(jī)后,主、從兩機(jī)之間進(jìn)行數(shù)據(jù)交換,而未被呼叫的從機(jī)則繼續(xù)處于等待狀態(tài)。主機(jī)發(fā)送的信息可以傳到多個(gè)從機(jī)或指定的從機(jī),各從機(jī)發(fā)送的信息只能被主機(jī)接收。為了完成上述功能需通過設(shè)置單片機(jī)的串口控制寄存器SCON來實(shí)現(xiàn),在此將單片機(jī)設(shè)置在工作方式3,即SM0=1、SM1=1。
通信的數(shù)據(jù)格式為每幀11位,包括1位起始位、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位和1位停止位;片內(nèi)定時(shí)器T1作為波特率發(fā)生器,選擇傳送的波特率為1200bps,則定時(shí)器T1的初值應(yīng)設(shè)置為TL1=TH1=E8H,另外應(yīng)禁止定時(shí)器T1中斷,以免因定時(shí)器T1溢出而產(chǎn)生不必要的中斷錯(cuò)誤。當(dāng)主機(jī)發(fā)送一幀地址信息時(shí),應(yīng)保持這幀數(shù)據(jù)的第9位TB8為“1”;發(fā)送一幀數(shù)據(jù)信息時(shí),應(yīng)保持這幀數(shù)據(jù)的第9位TB8為“0”,所有從機(jī)最初均處于接收狀態(tài),即SM2=1狀態(tài),當(dāng)接收的一幀數(shù)據(jù)的9位為1,所有從機(jī)均產(chǎn)生中斷,接收這一幀地址數(shù)據(jù)并與各自的從機(jī)地址進(jìn)行比較,以判斷主機(jī)是否要與本機(jī)通訊。接收到的地址數(shù)據(jù)與從機(jī)地址相等的為被呼叫從機(jī),該從機(jī)將串行口控制寄存器SCON中的控制位SM2清0,去接收主機(jī)發(fā)來的數(shù)據(jù)幀(數(shù)據(jù)幀的第9位為0),此時(shí)不管接收到的第9位數(shù)據(jù)是否為1,都要產(chǎn)生串口中斷,保證了主機(jī)與被叫從機(jī)間的正常數(shù)據(jù)通訊。通訊結(jié)束后,該從機(jī)又重新將串行口控制寄存器SCON中的控制位SM置為1,為下一次與主機(jī)進(jìn)行通訊做好準(zhǔn)備。其它從機(jī)則一直在SM2=1下繼續(xù)自己的等待,不會(huì)受到其它從機(jī)與主機(jī)通訊的干擾。
在通信協(xié)議中規(guī)定:
(1)單片機(jī)以方式3進(jìn)行通信,一幀數(shù)據(jù)的第9位為“1”代表地址幀,為“0”代表數(shù)據(jù)幀。
(2)設(shè)定通信波特率為1200bps。迎訪問無由電子開發(fā)網(wǎng)(技術(shù)文章 在線閱讀 在線商城
(3)00H是以地址幀形式發(fā)送的一條對(duì)所有從機(jī)起作用的控制命令,命令各從機(jī)恢復(fù)SM2=1,等待接收狀態(tài)。
(4)主機(jī)與從機(jī)的聯(lián)絡(luò)過程為;
主機(jī)下發(fā)地址幀,被呼叫從機(jī)向主機(jī)返回地址幀,以便主機(jī)確定與從機(jī)聯(lián)絡(luò)上了。
主機(jī)下發(fā)控制命令,從機(jī)根據(jù)命令或接收主機(jī)的數(shù)據(jù)塊,或向主機(jī)發(fā)送數(shù)據(jù)塊。
(5)主機(jī)發(fā)送的控制命令代碼為:
AAH:設(shè)置表底數(shù);BBH:讀取表數(shù);CCH:開表設(shè)置;DDH: 關(guān)表設(shè)置
EEH:校驗(yàn)出錯(cuò);EDH:傳送結(jié)束符。
(6)數(shù)據(jù)塊組成格式為:數(shù)據(jù)塊最后一幀為結(jié)束符EDH,結(jié)束符之前本數(shù)據(jù)塊內(nèi)容可以是操作碼幀、地址碼幀和數(shù)據(jù)幀。
為了實(shí)現(xiàn)多機(jī)通信,所有發(fā)射電路的振蕩頻率和所有的接收電路的振蕩頻率都必須調(diào)整一致,為保證正常通信,防止自己發(fā)自己接,數(shù)據(jù)傳送方向必須為半雙工傳送,收發(fā)器在發(fā)射時(shí),必須屏蔽自己的接收中斷,發(fā)射結(jié)束后再開放中斷。
多機(jī)通信過程為:
(1)所有從機(jī)的SM2=1,處于地址幀接收狀態(tài)。
(2)主機(jī)發(fā)送一幀地址信息,其中包含8位地址,第9位為“1”,與所需的從機(jī)進(jìn)行聯(lián)絡(luò)。
(3)從機(jī)接收到地址信息后,各自將其與自己的地址相比較;對(duì)于地址相符的從機(jī)使RI=0,TB8=1,發(fā)送自身地址,并使SM2=0,TI=1,以等待接收主機(jī)隨后發(fā)來的所有信息;對(duì)于地址不相符的從機(jī)仍保持SM2=1狀態(tài),對(duì)主機(jī)隨后發(fā)來的數(shù)據(jù)不理睬直至發(fā)送新的一幀地址信息。
(4)主機(jī)接收到地址后將SCON第9位TB8清“0”,然后進(jìn)行地址校對(duì),若地址校對(duì)通過,說明從機(jī)已經(jīng)聯(lián)絡(luò)上,發(fā)送進(jìn)一步的通信控制命令信號(hào);地址校對(duì)出錯(cuò),說明從機(jī)沒有聯(lián)絡(luò)上,發(fā)送結(jié)束本次通信命令,修改SCON第9位,,將TB8置“1”。主機(jī)向被尋址的從機(jī)發(fā)送控制指令與數(shù)據(jù),一幀數(shù)據(jù)的第9位為“0”,表示發(fā)送的是數(shù)據(jù)或控制指令。
(5)被叫從機(jī)接收到命令后進(jìn)行命令分析,收集現(xiàn)場(chǎng)信息,進(jìn)行一定的數(shù)據(jù)處理,根據(jù)主機(jī)的要求返回?cái)?shù)據(jù),并執(zhí)行主機(jī)發(fā)出的命令。若為結(jié)束通信的命令,則立即置SM2=1,結(jié)束本次通信,等待下一次通信,否則執(zhí)行相應(yīng)的動(dòng)作,對(duì)于要求返回信息的命令,置TB8=0,返回正確的響應(yīng)信息后置SM2=1,恢復(fù)其只接收地址幀數(shù)據(jù)狀態(tài)。
(6)主機(jī)接收結(jié)束通信命令的返回信息后修改SCON第9位,將TB8置“1”,準(zhǔn)備進(jìn)行下一輪的通信。
2.硬件構(gòu)成
主要包括紅外發(fā)射電路和紅外接收電路兩部分:
紅外發(fā)射電路
在紅外數(shù)據(jù)傳輸?shù)男盘?hào)調(diào)制方式上,采用脈沖調(diào)制的二進(jìn)制不歸零碼。這種調(diào)制方式比較簡(jiǎn)單,編碼解碼都比較方便,有利于電路簡(jiǎn)化。紅外發(fā)射電路如圖2所示。
由455KHZ的晶振CRY,反相器74HC04及電阻、電容構(gòu)成的振蕩器產(chǎn)生455KHZ的方波信號(hào)。經(jīng)脈沖分頻器74LS92,六分頻成為75.83KHZ的脈沖信號(hào)。再經(jīng)過D觸發(fā)器構(gòu)成的2分頻/整形電路變成38KHZ的方波信號(hào)。由單片機(jī)的異步串行口TX輸出的串行數(shù)據(jù)信號(hào),送到與非門74HC00的輸入端。與非門的另一輸入端接38KHZ的載波信號(hào)。與非門的輸出信號(hào)用來控制三極管的開通或關(guān)斷,從而控制紅外發(fā)射管發(fā)送信息。這樣就達(dá)到了用串行口TX輸出的串行數(shù)據(jù)信號(hào)直接調(diào)制載波,進(jìn)行紅外數(shù)據(jù)傳輸?shù)哪康?。發(fā)射電路的調(diào)制采用的是時(shí)分制幅度鍵控調(diào)制方式。因單片機(jī)在復(fù)位后,TXD腳為高電平,為滿足同步的要求,采用低電平同步脈沖,經(jīng)與非門(U3)后變成高電平同步脈沖。所以單片機(jī)TXD發(fā)送的編碼應(yīng)是反碼。
紅外接收電路
設(shè)計(jì)中采用一種高效能的紅外接收器——德律風(fēng)根TFMS5380。德律風(fēng)根所開發(fā)的微型接收器TFMS5380是近期市場(chǎng)上最高效能的紅外接收器。同一組件內(nèi)已裝上了接收二級(jí)管和前置放大器。TFMS5380特點(diǎn):(1)單一的接收器和前置放大器的組合。(2)超敏感度和傳送距離。(3)內(nèi)置PCM頻率過濾器。(4)無外置組件需要。(5)特強(qiáng)光及電場(chǎng)干擾屏蔽。(6)TTL及CMOS兼容,適用于微處理器操作控制。(7)可選頻率由30KHZ至56KHZ。(8)低功耗。(9)ISO9000認(rèn)可。TFMS5380適用于數(shù)據(jù)傳送、電視機(jī)、錄像機(jī)、組合音響及衛(wèi)星接收器等。TFMS5380的內(nèi)部框圖及構(gòu)成的接收電路。如圖3所示。
該接收電路要求被接收的紅外光波長(zhǎng)在950μm左右,被調(diào)制信號(hào)的脈沖寬度不小于600μs。TFMS5380的應(yīng)用電路非常簡(jiǎn)單。實(shí)驗(yàn)證明,TFMS5380的性能良好,完全可以滿足數(shù)據(jù)傳輸?shù)男枰3C2410 ARM9開發(fā)板800元 SOC開發(fā)平臺(tái)360元 豪華單片機(jī)開發(fā)系統(tǒng)498元 單片機(jī)學(xué)習(xí)板138 無線nRF-9E5模塊100元 51單片機(jī)試驗(yàn)開發(fā)板238元 Genius NSP通用編程器260元 Mini ARM Debugger330元 LABTOOL-48UXP2800元 S3C2410 ARM9開發(fā)板800
3.軟件設(shè)計(jì)
該系統(tǒng)軟件設(shè)計(jì)主要包括手持抄表器主機(jī)軟件和電度表端從機(jī)軟件兩部分。在本設(shè)計(jì)中手持抄表器單片機(jī)發(fā)送字符與接受字符均采用查詢方式,發(fā)送前先讀取通信狀態(tài)寄存器,查詢發(fā)送保持寄存器空否,接收前先讀取通信狀態(tài)寄存器,查詢一幀數(shù)據(jù)收完否。電度表單片機(jī)采用中斷方式,即接收到地址幀后就進(jìn)行串行口中斷申請(qǐng),中斷響應(yīng)后,進(jìn)入中斷服務(wù)程序。
手持抄表器軟件設(shè)計(jì):
在紅外通信過程中,手持抄表器作為主機(jī),是通信的發(fā)起者,其發(fā)送和接收都是主動(dòng)的,它的具體工作過程為:不斷掃描鍵盤,若發(fā)現(xiàn)有命令鍵按下,則調(diào)用發(fā)送子程序發(fā)送相應(yīng)的操作命令,發(fā)送結(jié)束后即啟動(dòng)接收子程序,以接收電度表回送的信息,然后對(duì)接收到的信息進(jìn)行后續(xù)處理。手持抄表器通信程序包括初始化子程序和串行通訊程序,其流程如圖4所示。
初始化子程序SP-INIA,主要是對(duì)通訊波特率及方式的設(shè)置,程序源代碼如下:
SP_INIA:MOV TMOD,#20H ;選擇定時(shí)器T1模式2,計(jì)時(shí)方式
MOV TH1,#0E8H ;預(yù)置時(shí)間常數(shù)
MOV TL1,#0E8H
CLR ET1 ;禁止定時(shí)中斷
SETB TR1 ;啟動(dòng)計(jì)時(shí)器
MOV PCON,#80H ;SMOD=1
MOV SCON,#0D8H ;方式3,SM2=0,REN=1,TB8=1
SETB EA ;開總中斷
SETB ES ;開串口中斷
RET
抄表機(jī)串行通訊程序略;
電度表端軟件設(shè)計(jì):電度表端作為從機(jī),其軟件程序包括主程序和中斷服務(wù)程序,流程圖如圖5所示;
主程序源代碼為:
ORG 0023H
LJMP SUB_COM ;串口中斷服務(wù)程序入口
ORG 0050H
SM_COM:LCALL SP_INIB ;調(diào)串口初始化子程序
MOV 08H,#50H ;選工作寄存器區(qū)1
MOV 09H,#60H
SETB EA ;開總中斷
SETB ES ;開串口中斷
LOOP:SJMP $ ;等待中斷
SP_INIB:MOV TMOD,#20H ;選擇定時(shí)器T1模式2,計(jì)時(shí)方式
MOV TH1,#0E8H
MOV TL1,#0E8H
CLR ET1
SETB TR1
MOV PCON,#80H
MOV SCON,#0F0H ;方式3,SM2=1,REN=1
RET
中斷服務(wù)程序:限于篇幅,略。
4.結(jié)束語(yǔ)
本文介紹的應(yīng)用于電度表抄表系統(tǒng)中單片機(jī)紅外串行通信接口,具有硬件電路簡(jiǎn)單、成本低廉、編程方便、通信可靠性高的特點(diǎn)。利用手持抄表器可以方便地完成對(duì)電度表的抄錄和校準(zhǔn)等工作,大大提高了抄表工作的效率,而且抄表準(zhǔn)確度高并杜絕了估抄和誤抄的問題。本文提出的通訊協(xié)議能夠在多臺(tái)單片機(jī)間安全地傳送數(shù)據(jù),實(shí)現(xiàn)了通信雙方非接觸式的數(shù)據(jù)傳送,也可用于其他遙控、遙測(cè)的單片機(jī)應(yīng)用場(chǎng)合。