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