用ZHX1010實(shí)現(xiàn)單片機(jī)之間的紅外通信
關(guān)鍵詞:紅外通信 單片機(jī) ZHX1010
引言
目前的單片機(jī)應(yīng)用系統(tǒng)之間一般都使用UART進(jìn)行通信,通過(guò)電平轉(zhuǎn)換口將信號(hào)變成RS232或RS485信號(hào)來(lái)進(jìn)行直接通信。這種有線通信的好處是通信誤碼率比較低,受干擾的機(jī)率相對(duì)較少,但對(duì)于要經(jīng)常插拔通信 線的系統(tǒng)來(lái)說(shuō),有線通信反而容易出現(xiàn)故障。筆者在開(kāi)發(fā)織機(jī)控制系統(tǒng)時(shí),要用一個(gè)手持式編程器來(lái)修改控制系統(tǒng)的工作參數(shù)。在實(shí)際使用過(guò)程中,由于工作人員要經(jīng)常插拔通信線,因此會(huì)經(jīng)常出現(xiàn)接觸不良、繞毀通信芯片的情況。筆者利用ZiLOG公司生產(chǎn)的IrDA芯片ZHX1010設(shè)計(jì)了一個(gè)紅外無(wú)線通信電路。
1 ZHX1010介紹
ZHX1010是一個(gè)符號(hào)IrDA SIR(Serial Infrared,串行紅外協(xié)議)的收發(fā)模塊,該模塊在1米范圍內(nèi)的最高速度可達(dá)115.2kbps。而且它的供電范圍較寬(2.4~5.5V),可方便地與各種電壓的CPU進(jìn)行接口。
ZHX1010在3V供電時(shí),其典型電流只有90μA,非常適用于電池供電產(chǎn)品。此外,ZHX1010體積小,僅有9.9mm×3.7mm,且其外圍元件少(只需一個(gè)電阻和一個(gè)電容)。
ZHX1010有6個(gè)引腳,依次是LEDA、TXD、RXD、SD、Vcc和GND。LEDA內(nèi)部與IRED紅外發(fā)光二極管相連,外部接一限流電阻到Vcc,以給紅外管提供工作電流。但應(yīng)注意提供的最大電流不能超過(guò)500mA(20%的占空比)。TXD是數(shù)據(jù)發(fā)送引腳,該腳內(nèi)部帶有下拉電阻,可以直接接到MCU的數(shù)據(jù)發(fā)送端,當(dāng)器件進(jìn)入省電模式時(shí),該下拉電阻開(kāi)路。RXD是接收到紅外數(shù)據(jù)后的輸出腳,它是一個(gè)三態(tài)輸出引腳,擺率控制的CMOS輸出驅(qū)動(dòng)器可驅(qū)動(dòng)標(biāo)準(zhǔn)CMOS或LSTTL負(fù)載。該引腳無(wú)需外接電阻。SD是省電模式控制腳,該引腳輸入高電平時(shí),ZHX1010進(jìn)入省電模式,此時(shí)的最大電流只有1μA。
2 ZHX1010與AT89C51的接口電路
AT89C51的工作電壓為5V,而ZHX1010的工作電壓范圍較寬,從2.4V到5.5V,因此可以直接相連。此外,AT89C51有一個(gè)UART,非常適合于傳輸串行數(shù)據(jù),當(dāng)使用22.1184MHz的晶振時(shí),其最高波特率可以達(dá)到115.2kbps。
圖1給出了ZHX1010與AT89C51的具體接口連接方式。
3 程序設(shè)計(jì)
使用ZHX1010的目的是在兩個(gè)單片機(jī)系統(tǒng)之間進(jìn)行無(wú)線數(shù)據(jù)通信,因此,AT89C51的UART應(yīng)工作于方式2,而且應(yīng)使其波特率可調(diào),以適用于不同通信距離的應(yīng)用場(chǎng)合。其工作方式初始化程序如下:
InitComm:
MOV TMOD,#21H
MOV TH1,#250 ;22.1184M晶振
MOV TL1,#250 ;9600bps
SETB TR1
MOV SCON,#50H
MOV 87H,#0H
CLR RI
SETB REN
SETB ES ;允許接收中斷
RET
為了避免數(shù)據(jù)丟失,接收紅外數(shù)據(jù)采用中斷方式,接收到的數(shù)據(jù)可保存在cReceBuffer中,中斷部分的具體程序如下:
cReceBuffer EQU 40H ;數(shù)據(jù)接收緩沖區(qū)
cReceLen EQU 50H ;數(shù)據(jù)接收長(zhǎng)度
CommIntProc:
PUSH ACC
PUSH R0
MOV A,#cReceBuffer ;計(jì)算要保存數(shù)據(jù)的當(dāng)前地址
ADD A,cReceLen
MOV R0,A
MOV A,SBUF
MOV @R0,A ;保存收到的數(shù)據(jù)
INC cReceLen ;收到的數(shù)據(jù)長(zhǎng)度加1
POP R0
POP ACC
RETI
數(shù)據(jù)收到后,便可根據(jù)不同的命令來(lái)完成不同的功能:
MOV A,cReceBuffer ;首字節(jié)是命令號(hào)
CJNE A,#1,Command1
;讀取設(shè)定的數(shù)據(jù)
…
Command1:
CJNE A,#2,Command2
;修改設(shè)定的數(shù)據(jù)
…
Command2:
;其他命令
RET
4 總結(jié)
在使用ZHX1010時(shí),要注意現(xiàn)場(chǎng)的環(huán)境情況。在筆者實(shí)際使用過(guò)程中,常常會(huì)出現(xiàn)收發(fā)誤碼率較高的情況,經(jīng)檢查發(fā)現(xiàn)是ZHX1010的紅外發(fā)送、接收頭比較臟,其原因是織造廠的環(huán)境比較惡劣,空氣比較潮濕,很容易在發(fā)送、接收端聚集灰塵,從而影響通信。另外,一個(gè)系統(tǒng)完成從發(fā)送到接收的狀態(tài)轉(zhuǎn)換時(shí),要經(jīng)過(guò)至少2ms的延時(shí)才能保證接收比較可靠。