80C51單片機(jī)雙機(jī)通信與多機(jī)通信的使用方法
80C51單片機(jī)之間的串行通信主要可分為雙機(jī)通信和多機(jī)通信,本節(jié)舉例說明雙機(jī)通信與多機(jī)通信的使用方法。1.雙機(jī)通信硬件電路
如果兩個80C51單片機(jī)系統(tǒng)距離較近,那么就可以將它們的串行口直接相連,實現(xiàn)雙機(jī)通信,如圖1所示。
圖1 雙機(jī)異步通信接口電路
為了增加通信距離,減少通道和電源干擾,可以在通信線路上采用光電隔離的方法,利用RS-422A標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信,實用的接口電路如圖2所示。
圖2 RS-422A雙機(jī)異步通信接口電路
2.雙機(jī)通信軟件編程
對于雙機(jī)通信采用兩種方法:查詢方式和中斷方式。
(1)查詢方式
例 在雙機(jī)通信中,設(shè)置串行口工作于方式3,波特率為9600,定時器T1工作于方式2,允許接收,單片機(jī)主頻fosc=6MHZ,編寫初始化編程序。
分析:
①設(shè)置SCON寄存器
串行口工作于方式3,SM0SM1=11。雙機(jī)通信不需要發(fā)送地址,SM2=0。允許接收REN=1。所以SCON=11010000B=0D0H。
②計算定時器T1計數(shù)初值,波特率不加倍,smod=0。
由 可寫出:
COUNT=254=0FEH
③初始化程序
例 當(dāng)1號機(jī)開始發(fā)送時,先送出一個“A1”信號,2號機(jī)收到后回答一個“B2”信號,表示同意接收。當(dāng)1號機(jī)收到“B2”信號后,開始發(fā)送數(shù)據(jù),每發(fā)送一次求一個“校驗和,以提高通信的可靠性。設(shè)數(shù)據(jù)塊為10個字節(jié),數(shù)據(jù)緩沖區(qū)的起始地址是40H,數(shù)據(jù)塊發(fā)完后馬上發(fā)送“校驗和”。2號機(jī)接收數(shù)據(jù)并將其轉(zhuǎn)存到40H開始的緩沖區(qū),每接收到一個數(shù)據(jù)也求一次“校驗和”,數(shù)據(jù)塊收完后,再接收1號機(jī)發(fā)來的“校驗和”,并與2號機(jī)求出的結(jié)果相比較。如二者相等,說明接收正確,2號機(jī)回答“00H”;若兩者不等,說明接收錯誤,2號機(jī)回答“0FFH”,請求重發(fā)。1號機(jī)收到“00H”的回答后,結(jié)束發(fā)送。若收到的答復(fù)非零,則將數(shù)據(jù)重發(fā)一次。假定雙方約定的傳輸波特率為1200bps,振蕩頻率為11.0592Hz,T1工作在方式2。
解:
查表可知,TH1=TL1=0E8H,PCON的SMOD位為0。程序流程圖如圖所示,程序清單如下。
(2)中斷方式
為提高CPU的利用效率,大多數(shù)的通信程序特別是接收程序使用中斷方法。
例 單工形式的雙機(jī)通信。 假定甲乙機(jī)以方式1進(jìn)行串行數(shù)據(jù)通信,其波特率為1200, 甲機(jī)發(fā)送,發(fā)送數(shù)據(jù)在外部RAM 4000H-401FH單元中。乙機(jī)接收,并把接收到的數(shù)據(jù)塊首末地址和數(shù)據(jù)依次放入外部RAM 5000H開始的區(qū)域中。
分析:
①設(shè)甲、乙機(jī)的時鐘頻率均為6MHz,從而機(jī)器周期為2μs。
②smod波特率不倍增,從而PCON=00H,至于smod什么時候為0,什么時候為1,可以根據(jù)需要來決定,具體地說,波特率較大,則smod=1,否則smod=0
③由公式可知波特率為:
計數(shù)初值=COUNT=243=F3H
④串行數(shù)據(jù)的發(fā)送(或接收)的內(nèi)容包括數(shù)據(jù)塊首末地址和數(shù)據(jù)兩部分內(nèi)容。對數(shù)據(jù)塊首末地址以查詢方式傳送,而數(shù)據(jù)則以中斷方式傳送。因此在程序中要先禁止串行中斷,后允許串行中斷。
甲機(jī)發(fā)送主程序:
甲機(jī)中斷服務(wù)程序:
ACINT: CLR TI ;清發(fā)送中斷
MOVX A,@DPTR ;讀數(shù)據(jù)
MOV SBUF,A ;發(fā)送字符
INC DPTR
DJNZ R7, LOOP ;未發(fā)送完轉(zhuǎn)LOOP
CLR ES ;禁止串行中斷
CLR TR1 ;定時器1停止計數(shù)
LOOP: RETI ;中斷返回
乙機(jī)接收主程序:
注意:上述程序4個接收地址的程序段可用一個循環(huán)程序來代替,此處為了與發(fā)送程序?qū)?yīng)故分為4段書寫。
乙機(jī)中斷服務(wù)程序:
在實驗過程中,應(yīng)先執(zhí)行乙機(jī)的接收程序,然后執(zhí)行甲機(jī)的發(fā)送程序。
編輯:admin 最后修改時間:2018-06-27