基于AT89C51的單線雙機(jī)通信協(xié)議
一、緒言
因工作需要,設(shè)計(jì)一單線雙向雙機(jī)通訊協(xié)議。要求主機(jī)通過(guò)其所帶的鍵盤(pán)能控制主機(jī)和從機(jī)的顯示,從機(jī)也能通過(guò)所帶的鍵盤(pán)控制主機(jī)和從機(jī)的顯示,主機(jī)和從機(jī)鍵盤(pán)所起的控制作用完全一致,顯示也完全一致。
另外,從機(jī)可以隨時(shí)脫離主機(jī)。當(dāng)從機(jī)從脫機(jī)狀態(tài)連上主機(jī)時(shí),要求從機(jī)能立即顯示主機(jī)的鍵盤(pán)信息,即雙機(jī)顯示一致。
二、設(shè)計(jì)概況
1.整體時(shí)序:
2.主機(jī)接收數(shù)據(jù)從機(jī)發(fā)送數(shù)據(jù)的時(shí)序:
3.主機(jī)發(fā)送數(shù)據(jù)從機(jī)接收數(shù)據(jù)的時(shí)序:
S :開(kāi)始位
A :響應(yīng)位
E :結(jié)束位
R :讀端口
W :寫(xiě)端口
Dx:數(shù)據(jù)
5.主從機(jī)同步原理:
由圖可知,主從機(jī)的讀寫(xiě)是互不沖突的,任意時(shí)刻只允許一個(gè)寫(xiě),但允許兩個(gè)都處于讀狀態(tài)。從整體上講,數(shù)據(jù)是按幀傳輸?shù)?,但從定時(shí)器中斷方面來(lái)說(shuō),數(shù)據(jù)是按位傳輸?shù)模驗(yàn)橐淮味〞r(shí)器中斷只傳送一個(gè)位,而不是完整的一幀數(shù)據(jù)。在數(shù)據(jù)未開(kāi)始傳輸前,從機(jī)IO口處于邊沿中斷接收狀態(tài),其定時(shí)器中斷是關(guān)閉的。主機(jī)永遠(yuǎn)處于定時(shí)中斷狀態(tài)。當(dāng)主機(jī)發(fā)出開(kāi)始位之后,若存在從機(jī),則從機(jī)會(huì)發(fā)出一個(gè)低電平響應(yīng);否則表示通訊失敗,幾個(gè)時(shí)鐘周期之后,主機(jī)會(huì)接著發(fā)起下一次數(shù)據(jù)傳輸?shù)拈_(kāi)始位。在通訊過(guò)程中,任意一個(gè)響應(yīng)位不成立均宣告通訊失敗,同時(shí)此次通訊結(jié)束。
綜上所述,在數(shù)據(jù)傳輸開(kāi)始時(shí),靠“外部邊沿中斷”同步,在數(shù)據(jù)傳輸開(kāi)始之后,靠“定時(shí)器中斷”同步。
6.協(xié)議的穩(wěn)健性
?。?)速度問(wèn)題:
以單放機(jī)、CD機(jī)等的現(xiàn)控為例,由于處理器的主要任務(wù)為信號(hào)處理,所以要求通訊占用的時(shí)間越少越好,而且通訊數(shù)據(jù)量也不大,該協(xié)議正是基于該類設(shè)計(jì)的。由于每次只發(fā)送一位數(shù)據(jù),故占用的MCU時(shí)間非常少.
(2)可靠性問(wèn)題:
在該協(xié)議中,存在兩個(gè)響應(yīng)位、一個(gè)結(jié)束位,還有標(biāo)志位,這些為數(shù)據(jù)的合法性的檢測(cè)提供了依據(jù)。另外,由于主從通訊只需傳輸單放機(jī)、CD機(jī)等的“按鍵”或“工作狀態(tài)”數(shù)據(jù),故數(shù)據(jù)量根本用不著8位,多余的位可用于校驗(yàn),例如采用奇偶校驗(yàn)、漢明碼等。
?。?)效果檢測(cè)
通過(guò)由兩塊AT89C51組成的單片機(jī)系統(tǒng)試驗(yàn),該協(xié)議工作完全正常,并具備即插即用功能,即在主機(jī)工作時(shí),從機(jī)可以隨時(shí)拔下插上而不會(huì)影響主從機(jī)工作狀態(tài)及其顯示。該協(xié)議已于國(guó)內(nèi)某知名企業(yè)的單放機(jī)的大批量生產(chǎn)中采用。
1.主機(jī)源程序
;主機(jī)程序
KBUF0 EQU 24H ;鍵值臨時(shí)緩沖
KBUF1 EQU 25H ;鍵值緩沖
KCNTEQU 26H ;鍵盤(pán)重復(fù)計(jì)數(shù)
DLYD0 EQU 27H ;延遲變量
DLYD1 EQU 28H ;延遲變量
DLYD2 EQU 29H ;延遲變量
RSCNT EQU 2AH
RSI BIT 00H ;收發(fā)開(kāi)始標(biāo)志
RSF BIT 01H ;收/發(fā)標(biāo)志
RSF0BIT 02H ;收發(fā)標(biāo)志0
RSF1BIT 03H ;收發(fā)標(biāo)志1
;SDFBIT 04H ;有數(shù)據(jù)發(fā)送標(biāo)志
RDF BIT 05H ;有接收數(shù)據(jù)標(biāo)志
STATE EQU 2BH
SDATX EQU 22H
RDATX EQU 23H
CTPIO BIT 0B2H
TSIOBIT 0B3H
ORG 00H
AJMPMAIN
ORG 0BH
AJMPI(yíng)NT_T0
ORG 100H
MAIN:
MOV SP,#50H
MOV KBUF0,#00H
MOV KBUF1,#00H
MOV KCNT,#00H
MOV STATE,#00H
MOV SDATX,#00H
MOV RDATX,#00H
MOV RSCNT,#00H
MOV 20H,#00H
MOV P0,#00H
CLR RSF
MOV TH0,#00H
MOV TL0,#00H
MOV TMOD,#02H ;工作模式為定時(shí)方式2
MOV TCON,#10H ;允許定時(shí)器0工作
MOV IE,#82H
LOOPX:
CALLKEYREAD ;讀鍵盤(pán)
CALLDLY2MS;延遲2ms
JMP LOOPX
;按鍵功能入口
FUNCTION:
MOV A,KBUF1
CJNEA,#07FH,FUN1;+1
;MOVA,STATE
;ADDA,#01H
MOV A,#01H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN1:
CJNEA,#0F7H,FUN2;+2
;MOVA,STATE
;ADDA,#02H
MOV A,#02H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN2:
CJNEA,#0BFH,FUN3;+4
;MOVA,STATE
;ADDA,#04H
MOV A,#03H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN3:
CJNEA,#0FBH,FUN4;+8
;MOVA,STATE
;ADDA,#08H
MOV A,#04H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN4:
CJNEA,#0DFH,FUN5;+16
;MOVA,STATE
;ADDA,#10H
MOV A,#05H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN5:
CJNEA,#0FDH,FUN6;+32
MOV A,STATE
;ADDA,#20H
XRL A,#08H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN6:
CJNEA,#0EFH,FUN7;+64
MOV A,STATE
ADD A,#40H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN7:
CJNEA,#0FEH,FUN8;+128
MOV A,STATE
ADD A,#80H
MOV STATE,A
CPL A
MOV P0,A
;SETB SDF
JMP LOOPX
FUN8:
JMP LOOPX
;==================================================================
KEYREAD:
CLR P2.7
SETBP2.6
MOV A,P2
ANL A,#0FH
MOV KBUF0,A
SETBP2.7
CLR P2.6
MOV A,P2
ANL A,#0FH
SWAPA
ORL A,KBUF0
MOV KBUF0,A
CJNEA,KBUF1,KEYRD4
MOV A,KCNT
CJNEA,#03H,KEYRD1
RET
KEYRD1:
INC A
INC KCNT
CJNEA,#03H,KEYRD5
MOV A,KBUF1
CJNEA,#0FFH,KEYRD2
RET
KEYRD2:
POP A
POP A
;MOVP0,A
KEYRD3:
JMP FUNCTION
KEYRD4:
MOV KBUF1,A
評(píng)論