80C51單片機雙機通信與多機通信的使用方法
80C51單片機之間的串行通信主要可分為雙機通信和多機通信,本節舉例說明雙機通信與多機通信的使用方法。1.雙機通信硬件電路
如果兩個80C51單片機系統距離較近,那么就可以將它們的串行口直接相連,實現雙機通信,如圖1所示。

圖1 雙機異步通信接口電路
為了增加通信距離,減少通道和電源干擾,可以在通信線路上采用光電隔離的方法,利用RS-422A標準進行雙機通信,實用的接口電路如圖2所示。

圖2 RS-422A雙機異步通信接口電路
2.雙機通信軟件編程
對于雙機通信采用兩種方法:查詢方式和中斷方式。
(1)查詢方式
例 在雙機通信中,設置串行口工作于方式3,波特率為9600,定時器T1工作于方式2,允許接收,單片機主頻fosc=6MHZ,編寫初始化編程序。
分析:
①設置SCON寄存器
串行口工作于方式3,SM0SM1=11。雙機通信不需要發送地址,SM2=0。允許接收REN=1。所以SCON=11010000B=0D0H。
②計算定時器T1計數初值,波特率不加倍,smod=0。
由
可寫出:
COUNT=254=0FEH
③初始化程序

例 當1號機開始發送時,先送出一個“A1”信號,2號機收到后回答一個“B2”信號,表示同意接收。當1號機收到“B2”信號后,開始發送數據,每發送一次求一個“校驗和,以提高通信的可靠性。設數據塊為10個字節,數據緩沖區的起始地址是40H,數據塊發完后馬上發送“校驗和”。2號機接收數據并將其轉存到40H開始的緩沖區,每接收到一個數據也求一次“校驗和”,數據塊收完后,再接收1號機發來的“校驗和”,并與2號機求出的結果相比較。如二者相等,說明接收正確,2號機回答“00H”;若兩者不等,說明接收錯誤,2號機回答“0FFH”,請求重發。1號機收到“00H”的回答后,結束發送。若收到的答復非零,則將數據重發一次。假定雙方約定的傳輸波特率為1200bps,振蕩頻率為11.0592Hz,T1工作在方式2。
解:

查表可知,TH1=TL1=0E8H,PCON的SMOD位為0。程序流程圖如圖所示,程序清單如下。

(2)中斷方式
為提高CPU的利用效率,大多數的通信程序特別是接收程序使用中斷方法。
例 單工形式的雙機通信。 假定甲乙機以方式1進行串行數據通信,其波特率為1200, 甲機發送,發送數據在外部RAM 4000H-401FH單元中。乙機接收,并把接收到的數據塊首末地址和數據依次放入外部RAM 5000H開始的區域中。
分析:
①設甲、乙機的時鐘頻率均為6MHz,從而機器周期為2μs。
②smod波特率不倍增,從而PCON=00H,至于smod什么時候為0,什么時候為1,可以根據需要來決定,具體地說,波特率較大,則smod=1,否則smod=0
③由公式可知波特率為:
計數初值=COUNT=243=F3H
④串行數據的發送(或接收)的內容包括數據塊首末地址和數據兩部分內容。對數據塊首末地址以查詢方式傳送,而數據則以中斷方式傳送。因此在程序中要先禁止串行中斷,后允許串行中斷。
甲機發送主程序:

甲機中斷服務程序:
ACINT: CLR TI ;清發送中斷
MOVX A,@DPTR ;讀數據
MOV SBUF,A ;發送字符
INC DPTR
DJNZ R7, LOOP ;未發送完轉LOOP
CLR ES ;禁止串行中斷
CLR TR1 ;定時器1停止計數
LOOP: RETI ;中斷返回
乙機接收主程序: 
注意:上述程序4個接收地址的程序段可用一個循環程序來代替,此處為了與發送程序對應故分為4段書寫。
乙機中斷服務程序:


在實驗過程中,應先執行乙機的接收程序,然后執行甲機的發送程序。

編輯:admin 最后修改時間:2018-06-27


