純軟件實(shí)現單片機遠程通信
軟件串行口接收和發(fā)關(guān)的工作原理和過(guò)程如下:單片機復位后,執行初始化程序時(shí),定義P1口為位控方式,其中P1.0和P1.1定義為輸入,P1.2和P1.3定義為輸出。P1.2初始化為1, P1.3初始化為0,這樣發(fā)送信號處于停止位(差分電平1)。定義INT0為負沿觸發(fā)。允許中斷且定義成高優(yōu)先級,然后開(kāi)中斷,兩機進(jìn)入隨時(shí)可開(kāi)始串行通信的等待狀態(tài)。A、B不通信時(shí),兩機的收發(fā)均為1,一旦某機(假設為A)需要與對方通信,A機以約定的波特率(假定為9600bps),通過(guò) P1.2和P1.3發(fā)送。發(fā)關(guān)和接收一個(gè)字節的過(guò)程如下:
A 機發(fā)送端首先發(fā)送起始位(0電平),B機INT0引腳產(chǎn)生下跳沿后,產(chǎn)生中斷申請。B機CPU響應此中斷后,執行INT0中斷服務(wù)子程序。在中斷服務(wù)子程序開(kāi)始,用位輸入指令讀入P3.6狀態(tài),如果是1電平,則表明此次中斷是受干擾所致,因而取消此次接收過(guò)程,中斷返回;如果P3.6狀態(tài)讀入電產(chǎn)是0,則表明本次中斷確系A機發(fā)送超始位所引起,經(jīng)精確延時(shí),在A(yíng)機發(fā)送各數據位中間處進(jìn)行采樣,獲得各數據位的狀態(tài),最后生成一個(gè)字節,送有關(guān)單元之后中斷返回。雖然送往INT0的信號為T(mén)TL電平,但是由于它的傳輸速率非常之低,加上軟件抗干擾措施,所以仍然可以有效地傳輸1200米。
軟件串行中遠程通信的關(guān)鍵是如何以較高的波特率可靠地實(shí)現數據的發(fā)送和接收。下面介紹一組以9600bps波特率設計,用MCS-51匯編語(yǔ)言編寫(xiě)的具有很強抗干擾能力和很高可靠性的收發(fā)一個(gè)字節的子等等程序。
軟件串行通信的編程
串行通信要實(shí)現成功接收必須解決以下關(guān)鍵技術(shù):(1)要準確、快速檢測出對方發(fā)出的超始位以及起始位負跳變的時(shí)刻;(2)保證在每個(gè)數據位中間采樣;(3)具有有效的校驗和查錯手段。
我們針對性地采取以下措施:用定義成高級中斷的外中斷引腳下接收線(xiàn)相連,來(lái)及時(shí)捕捉起始位信息,并在確定采樣時(shí)刻的計算中扣除中斷響應滯后的延時(shí)時(shí)間;精心設計、編寫(xiě)程序,逐條計算指令實(shí)際執行時(shí)間,排除其他中斷干擾(關(guān)中斷),從而保證在每個(gè)數據位中間處進(jìn)行采樣;每位重復采樣多次,確定各數據位的狀態(tài),從而可大大減少遠程通信常見(jiàn)的瞬態(tài)干擾(其特點(diǎn)是幅度大、作用時(shí)間短、隨機性強)對通信的不良影響。綜合采用上述技術(shù)措施以中斷方式工作的接收(1 幀)的中斷服務(wù)源程序見(jiàn)程序清單):
以上指令共46個(gè)機器周期(T),加上中斷響應平均延時(shí)5個(gè)機器周期,所以程序執行到此,即A機發(fā)送起始位(開(kāi)始變低)到此已經(jīng)歷51T。由于MCS-51指令的1個(gè)機器周期(T)相當于12個(gè)時(shí)鐘周期,所以當用12MHz的晶振時(shí),1個(gè)機器周期(1T)相當于是1μs。51T相當于51μs。
從A機發(fā)出超始位到此共延時(shí)51T+4T+88T=143T,相當于143μs。
傳輸率為9600bps時(shí),每位費時(shí)104μs(即1s/9600)。從起始位開(kāi)始到D0 位中間1.5位,費時(shí)1.5×104μs=156μs。下面程序在 156μs及其前后各11μs處對D0位進(jìn)行共3次采樣,記錄D0采樣結果為0次數。如果3次采樣結果為0的次數小于等于1,則判斷D0=1。如果3次采樣結果為0的次數大于等于2,則判斷D0=0。這樣極大地增強了串行通信的可靠性。然后再經(jīng)過(guò)延時(shí)后對其他各位數據進(jìn)行同樣的三次采樣,直到D0~D7共 8位數據全部采樣結束。
以上程序執行用去40T,加上前面的143T,共花去183μs。每次返回NEXT3循環(huán)一次,讀入一位數據。在程序輸入NEXT3前,給R0賦值02H,就能保證以后各位數據位3次采樣的準確時(shí)刻。此中斷服務(wù)子程序段不僅能實(shí)現在每位數據采樣,而且還在中間時(shí)刻前后11μs各采樣1次。以3次數據的多數結果確定該位的值,可大大降低因干擾出錯的概率,因此在干擾嚴重的遠程通信中有很強的適應性。
結語(yǔ)
本文介紹的GMS97C2051單片機遠程通信的純軟件方法和程序也適合于A(yíng)TMEL公司的AT89C2051單片機,對其他單片機的遠程通信也具有一定的參考價(jià)值。文中提供的軟件接口方法和源程序經(jīng)實(shí)際應用表明,該方法可延長(cháng)通信距離至 1200米(9600bps時(shí))。本方法的不足之處在于軟件編程要求比較高,如果要實(shí)現即軟件編程簡(jiǎn)單、又通用性好的單片機遠程通信,還是要使用RS- 232/RS-485/RS-422轉換器或光隔遠程收發(fā)器。
評論