大地资源网视频在线观看新浪,日本春药精油按摩系列,成人av骚妻潮喷,国产xxxx搡xxxxx搡麻豆

武漢波仕電子有限公司
免費會員

純軟件實現單片機遠程通信

時間:2011-9-18閱讀:1014
分享:
  GMS972051是韓國LG公司生產的MW內部帶2K
  
  E2PROM的與MCS-51兼容的單片機。GMS97C2051省去了MCS-51的P0和P3口,
  
  但是多了一個內部硬件比較器。由于單片機的通信信號為TTL電平,如果不采取其它的措
  
  施,其在通信速率為9600bps時通信距離不超過5米。一般為了延長單片機的通信距離,
  
  采用RS-232/RS-485轉換器、RS-232/RS-422轉換器或光隔遠程收發器。本文介紹的方法
  
  可將GMS97C2051單片機之間通信距離延長到1200米以上,而且不需要添加任何硬件措施
  
  ,*用軟件來實現。
  
  要用純軟件方法實現GMS97C2051單片機之間的遠程通信,首先必須將單片
  
  機的TTL電平的軟件方法轉換為差分電平,其次要用普通I/O口線來構成軟件串行口,并
  
  且在軟件上進行正確的配合。
  
  TTL電平轉換成差分電平的純軟件方法
  
  GMS97C2051單片機的信號均為TTL電平。TTL電平信號傳輸距離非常有限,
  
  一般在9600bps傳輸率時傳輸距離不超過5米。而差分電平信號則是取決于兩種信號線之
  
  間的電平差值,如果某條信號線的電平高于另一條,則信號為1,否則為0。由于差分電
  
  平信號可以避免長距離傳輸導線上的電荷積累,并且具有更寬的電平范圍,所以傳輸距
  
  離遠得多。RS485差分電平信號在9600bps傳輸率時傳輸距離可達1200米。
  
  為了用純軟件實現差分電平傳輸就不能使用GMS97C2051本身的硬件串行口
  
  ,而是用普通I/O線來實現串行通信。差分電平要用兩條I/O口線來實現,比如P1.2和P1
  
  .3兩條線(見圖1)。當傳輸信號為1時,P1.2為+5V,而P1.3為0V。當傳輸信號為0時,
  
  P1.2為0V為0V,而P1.3為+5V。注意P1.2和P1.3不得同時置+5V或同時置0V。
  
  GMS97C2051單片機的P1.0和P1.1可以分別作為片內精密模擬電壓比較器的
  
  正輸入端(AIN0)和負輸入端(AINI),所以正好可以用于接收差分電平信號。內部電
  
  平比較器的輸出已經在芯片內部連到P3.6口,所以可以通過讀取P3.6口的值來得到差分
  
  電平信號。
  
  軟件串行口的實現方法
  
  由普通I/O口線來實現串行通信,習慣上稱為軟件串行口。采用差分電平通
  
  信的軟件串行口的硬件接線圖如圖2.A、B兩機均為GMS97C2051單片機。P1.2和P1.3用于
  
  發送,P1.0和P1.1口用于接收,P1.0同時接本機中INI0。軟件串行口一般全用標準的10
  
  位異步通信格式:1位起始位(信號0),8位數據位,1位停止位(信號1)。接收時均是
  
  低位數據在前,高位數據在后。
  
  軟件串行口接收和發關的工作原理和過程如下:單片機復位后,執行初始
  
  化程序時,定義P1口為位控方式,其中P1.0和P1.1定義為輸入,P1.2和P1.3定義為輸出
  
  。P1.2初始化為"1",P1.3初始化為"0",這樣發送信號處于停止位(差分電平"1")。定
  
  義INT0為負沿觸發。允許中斷且定義成高優先級,然后開中斷,兩機進入隨時可開始串
  
  行通信的等待狀態。A、B不通信時,兩機的收發均為"1",一旦某機(假設為A)需要與
  
  對方通信,A機以約定的波特率(假定為9600bps),通過P1.2和P1.3發送。發關和接收
  
  一個字節的過程如下:
  
  A機發送端首先發送起始位("0"電平),B機INT0引腳產生下跳沿后,產生
  
  中斷申請。B機CPU響應此中斷后,執行INT0中斷服務子程序。在中斷服務子程序開始,
  
  用位輸入指令讀入P3.6狀態,如果是"1"電平,則表明此次中斷是受干擾所致,因而取消
  
  此次接收過程,中斷返回;如果P3.6狀態讀入電產是"0",則表明本次中斷確系A機發送
  
  超始位所引起,經延時,在A機發送各數據位中間處進行采樣,獲得各數據位的狀態
  
  ,zui后生成一個字節,送有關單元之后中斷返回。雖然送往INT0的信號為TTL電平,但是
  
  由于它的傳輸速率非常之低,加上軟件抗干擾措施,所以仍然可以有效地傳輸1200米。
  
  軟件串行中遠程通信的關鍵是如何以較高的波特率可靠地實現數據的發送
  
  和接收。下面介紹一組以9600bps波特率設計,用MCS-51匯編語言編寫的具有很強抗干擾
  
  能力和很高可靠性的收發一個字節的子等等程序。
  
  軟件串行通信的編程
  
  串行通信要實現成功接收必須解決以下關鍵技術:(1)要準確、快速檢測
  
  出對方發出的超始位以及起始位負跳變的時刻;(2)保證在每個數據位中間采樣;(3
  
  )具有有效的校驗和查錯手段。
  
  我們針對性地采取以下措施:用定義成中斷的外中斷引腳下接收線相
  
  連,來及時捕捉起始位信息,并在確定采樣時刻的計算中扣除中斷響應滯后的延時時間
  
  ;精心設計、編寫程序,逐條計算指令實際執行時間,排除其他中斷干擾(關中斷),
  
  從而保證在每個數據位中間處進行采樣;每位重復采樣多次,確定各數據位的狀態,從
  
  而可大大減少遠程通信常見的瞬態干擾(其特點是幅度大、作用時間短、隨機性強)對
  
  通信的不良影響。綜合采用上述技術措施以中斷方式工作的接收(1幀)的中斷服務源程
  
  序見程序清單):
  
  以上指令共46個機器周期(T),加上中斷響應平均延時5個機器周期,所
  
  以程序執行到此,即A機發送起始位(開始變低)到此已經歷51T。由于MCS-51指令的1個
  
  機器周期(T)相當于12個時鐘周期,所以當用12MHz的晶振時,1個機器周期(1T)相當
  
  于是1μs。51T相當于51μs。
  
  從A機發出超始位到此共延時51T+4T+88T=143T,相當于143μs。
  
  傳輸率為9600bps時,每位費時104μs(即1s/9600)。從起始位開始到D0位
  
  中間1.5位,費時1.5×104μs=156μs。下面程序在156μs及其前后各11μs處對D0位進
  
  行共3次采樣,記錄D0采樣結果為0次數。如果3次采樣結果為0的次數小于等于1,則判斷
  
  D0=1。如果3次采樣結果為0的次數大于等于2,則判斷D0=0。這樣極大地增強了串行通信
  
  的可靠性。然后再經過延時后對其他各位數據進行同樣的三次采樣,直到D0~D7共8位數
  
  據全部采樣結束。
  
  以上程序執行用去40T,加上前面的143T,共花去183μs。每次返回NEXT3
  
  循環一次,讀入一位數據。在程序輸入NEXT3前,給R0賦值02H,就能保證以后各位數據
  
  位3次采樣的準確時刻。此中斷服務子程序段不僅能實現在每位數據采樣,而且還在中間
  
  時刻前后11μs各采樣1次。以3次數據的多數結果確定該位的值,可大大降低因干擾出錯
  
  的概率,因此在干擾嚴重的遠程通信中有很強的適應性。
  
  結語
  
  本文介紹的GMS97C2051單片機遠程通信的純軟件方法和程序也適合于ATME
  
  L公司的AT89C2051單片機,對其他單片機的遠程通信也具有一定的參考價值。文中提供
  
  的軟件接口方法和源程序經實際應用表明,該方法可延長通信距離至1200米(9600bps時
  
  )。本方法的不足之處在于軟件編程要求比較高,如果要實現即軟件編程簡單、又通用
  
  性好的單片機遠程通信,還是要使用RS-232/RS-485/RS-422轉換器或光隔遠程收發器。

會員登錄

×

請輸入賬號

請輸入密碼

=

請輸驗證碼

收藏該商鋪

X
該信息已收藏!
標簽:
保存成功

(空格分隔,最多3個,單個標簽最多10個字符)

常用:

提示

X
您的留言已提交成功!我們將在第一時間回復您~
在線留言
主站蜘蛛池模板: 牟定县| 托克逊县| 永善县| 聊城市| 扬州市| 密云县| 瑞昌市| 芦山县| 黄大仙区| 桦川县| 康乐县| 阿鲁科尔沁旗| 镇坪县| 张家川| 乌兰浩特市| 灯塔市| 婺源县| 靖西县| 江口县| 镇安县| 思茅市| 安国市| 泽州县| 荆门市| 云霄县| 东明县| 三门峡市| 北流市| 潮州市| 克什克腾旗| 宜章县| 焦作市| 德化县| 双鸭山市| 廊坊市| 云林县| 玛多县| 中江县| 湘潭县| 宁波市| 繁峙县|