通過紅外接口實(shí)現(xiàn)單片機(jī)之間的通信
紅外線是波長在750nm~lmm的電磁波,它的頻率高于微波而低于可見光,是一種人的眼睛看不到的光線。紅外通信一般采用紅外波段內(nèi)的近紅外線,波長在0.75μm~25μm,目前無線電波和微波已被廣泛地應(yīng)用在長距離的無線通信之中。但由于紅外線的波長較短,對障礙物的衍射能力差,所以更適合應(yīng)用在需要短距離無線通信的場合,進(jìn)行點(diǎn)對點(diǎn)的直線數(shù)據(jù)傳輸,從應(yīng)用領(lǐng)域來看,紅外通信主要應(yīng)用于遙控和數(shù)據(jù)通信這兩方面。紅外通信口一般數(shù)據(jù)傳輸速率可達(dá)2400bit/s~115.2kbit/s,有些甚至可達(dá)4Mbit/s。
本設(shè)計(jì)實(shí)現(xiàn)單片機(jī)之間通過紅外接口進(jìn)行通信。通信雙方約定發(fā)送方為甲機(jī),接收方為乙機(jī)。甲機(jī)向乙機(jī)發(fā)送一組數(shù)據(jù),如果乙機(jī)接收到的數(shù)據(jù)正確,就向甲機(jī)發(fā)送0x55;如果乙機(jī)接收到的數(shù)據(jù)不正確,就向甲機(jī)發(fā)送0xFF,甲收方收到0xFF后重傳數(shù)據(jù)。
紅外通信技術(shù)主要是利用紅外發(fā)射器和紅外接收器來完成信號的無線收發(fā)工作。在發(fā)射端,對發(fā)送的數(shù)字信號經(jīng)過適當(dāng)?shù)恼{(diào)制后,送入電光變換電路、驅(qū)動(dòng)紅外發(fā)光二極管發(fā)射紅外光脈沖;在接收端,紅外接收器對收到的紅外信號進(jìn)行光電逆變換,并進(jìn)行相應(yīng)的解調(diào)后、恢復(fù)出原信號,如下圖所示。
紅外通信的硬件電路由發(fā)射電路和接收電路兩個(gè)部分組成。如下圖所示,圖中的上半部分為發(fā)射部分電路,下半部分為接收部分電路。當(dāng)然作為通信的另一方,也有類似的一組收發(fā)電路。
由于系統(tǒng)中采用的紅外線接收模塊TSOP1838的光響應(yīng)頻率為38kHz,為降低數(shù)據(jù)交換的誤碼率,紅外線發(fā)射部分的載波頻率也應(yīng)調(diào)整為38kHz。該載波信號由單片機(jī)89C51的內(nèi)部定時(shí)器產(chǎn)生,載波信號從Pl.0引腳輸出經(jīng)74HC08與門對發(fā)送數(shù)據(jù)輸出端TXD調(diào)制后,經(jīng)過三極管T1放大,由發(fā)射管TSAL6200發(fā)出脈動(dòng)的紅外光,其發(fā)射功率可通過調(diào)整其限流電阻R3來改變。
紅外線接收電路為了改善接收信號的波形,將其輸出信號經(jīng)過兩級反相整形。本接收電路用一個(gè)與門的目的是如果系統(tǒng)還有其他的通信接口,那么該通信接口的數(shù)據(jù)接收端也可通過該與門將數(shù)據(jù)送入RXD引腳。當(dāng)然,用戶也可以不用該與門電路,而直接將第二級非門的輸出接RXD引腳。
紅外通信與常規(guī)的有線通信相比,只是利用了不同的傳輸介質(zhì)而已,因此通信的程序與前面描述的類似,不同的只是紅外通信還存在著載波的問題,因此,程序只包括串口初始化、定時(shí)器初始化、定時(shí)中斷服務(wù)程序、通信的收、發(fā)程序等。
1.串口初始化程序init()
串口初始化程序如下,串行口工作在方式1,波特率為9600bit/s。單片機(jī)的定時(shí)器T0定時(shí)中斷產(chǎn)生38kHz的載波信號,Tl定時(shí)器作為波特率發(fā)生器。
程序利用定時(shí)器T0產(chǎn)生一定頻率的中斷,在中斷服務(wù)程序里控制引腳輸出高低電平,
以此來產(chǎn)生載波信號,定時(shí)器TO的中斷服務(wù)程序代碼如下:
說明:程序編寫時(shí),只有在發(fā)送時(shí)才打開產(chǎn)生載波頻率的定時(shí)中斷,當(dāng)發(fā)送完畢后,關(guān)掉中斷,置Pl.0為0。
2.甲機(jī)發(fā)送子程序voidsend()
甲機(jī)發(fā)送子程序send0完成甲機(jī)發(fā)送數(shù)據(jù)功能。計(jì)算校驗(yàn)和并發(fā)送數(shù)據(jù),等待乙機(jī)響應(yīng),若乙機(jī)響應(yīng)正確則從子程序中返回,否則再次發(fā)送數(shù)據(jù)并等待乙機(jī)響應(yīng),程序代碼如下:
3.乙機(jī)接收程序voidrecv()
乙機(jī)接收程序根據(jù)制定的聯(lián)絡(luò)信號接收數(shù)據(jù)。接收數(shù)據(jù)并計(jì)算校驗(yàn)和,若校驗(yàn)正確則發(fā)送0x55表明數(shù)據(jù)正確,否則發(fā)送0xFF說明數(shù)據(jù)接收錯(cuò)誤。程序代碼如下:
在紅外通信的設(shè)計(jì)、使用時(shí),應(yīng)注意如下幾個(gè)問題。
·距離與功率問題:紅外通信的距離主要取決于發(fā)射的強(qiáng)度(電流)。
·通信的速度問題:由于調(diào)制的載波頻率為38kHz,為很好地接收到發(fā)射的信號,建議單片機(jī)設(shè)置的數(shù)據(jù)傳輸速率不要超過9600bit/s。
·在使用時(shí),應(yīng)考慮發(fā)射管與接收管的角度問題,角度越大,接收距離將越近,甚至接收不到。
·對于單工方式下,發(fā)送方只保留發(fā)送部分電路,而接收方只保留接收部分電路,如不需要返回信息的主動(dòng)遙控器,只有發(fā)送電路,而被動(dòng)接收的控制器,只有接收電路。
·載波頻率也可由其他可產(chǎn)生振蕩方波信號的電路獲得,如555電路。
·目前市場上還有專用的收發(fā)一體的紅外模塊、只發(fā)不收的發(fā)射模塊、只收不發(fā)的接收模塊等,這些模塊內(nèi)部大都集成了調(diào)制、驅(qū)動(dòng)、解調(diào)等電路,用戶只需選好型號并掌握其接口關(guān)系即可。