關(guān) 閉

新聞中心

EEPW首頁(yè) > 安全與國(guó)防 > 設(shè)計(jì)應(yīng)用 > 基于AT89C51的單線雙機(jī)通信協(xié)議

基于AT89C51的單線雙機(jī)通信協(xié)議

作者: 時(shí)間:2008-03-07 來(lái)源:網(wǎng)絡(luò) 收藏

  一、緒言

  因工作需要,設(shè)計(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)信息,即顯示一致。

  二、設(shè)計(jì)概況

  1.整體時(shí)序:

  2.主機(jī)接收數(shù)據(jù)從機(jī)發(fā)送數(shù)據(jù)的時(shí)序:

  3.主機(jī)發(fā)送數(shù)據(jù)從機(jī)接收數(shù)據(jù)的時(shí)序:

  4.

  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組成的試驗(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 ;鍵值緩沖

  KCNTEQU 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)志

  RSF0BIT 02H ;收發(fā)標(biāo)志0

  RSF1BIT 03H ;收發(fā)標(biāo)志1

  ;SDFBIT 04H ;有數(shù)據(jù)發(fā)送標(biāo)志

  RDF BIT 05H ;有接收數(shù)據(jù)標(biāo)志

  

  STATE EQU 2BH

  SDATX EQU 22H

  RDATX EQU 23H

  

  

   BIT 0B2H

  TSIOBIT 0B3H

  

  ORG 00H

  AJMPMAIN

  

  ORG 0BH

  AJMPI(yíng)NT_T0

  

  ORG 100H

  MAIN:

   SP,#50H

   KBUF0,#00H

   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:

  CALLKEYREAD ;讀鍵盤(pán)

  CALLDLY2MS;延遲2ms

  JMP LOOPX

  ;按鍵功能入口

  FUNCTION:

  MOV A,KBUF1

  CJNEA,#07FH,FUN1;+1

  ;MOVA,STATE

  ;ADDA,#01H

  MOV A,#01H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN1:

  CJNEA,#0F7H,FUN2;+2

  ;MOVA,STATE

  ;ADDA,#02H

  MOV A,#02H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN2:

  CJNEA,#0BFH,FUN3;+4

  ;MOVA,STATE

  ;ADDA,#04H

  MOV A,#03H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN3:

  CJNEA,#0FBH,FUN4;+8

  ;MOVA,STATE

  ;ADDA,#08H

  MOV A,#04H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN4:

  CJNEA,#0DFH,FUN5;+16

  ;MOVA,STATE

  ;ADDA,#10H

  MOV A,#05H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN5:

  CJNEA,#0FDH,FUN6;+32

  MOV A,STATE

  ;ADDA,#20H

  XRL A,#08H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN6:

  CJNEA,#0EFH,FUN7;+64

  MOV A,STATE

  ADD A,#40H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN7:

  CJNEA,#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

  SETBP2.6

  MOV A,P2

  ANL A,#0FH

  MOV KBUF0,A

  SETBP2.7

  CLR P2.6

  MOV A,P2

  ANL A,#0FH

  SWAPA

  ORL A,KBUF0

  MOV KBUF0,A

  CJNEA,KBUF1,KEYRD4

  MOV A,KCNT

  CJNEA,#03H,KEYRD1

  RET

  KEYRD1:

  INC A

  INC KCNT

  CJNEA,#03H,KEYRD5

  MOV A,KBUF1

  CJNEA,#0FFH,KEYRD2

  RET

  KEYRD2:

   A

   A

  ;MOVP0,A

  KEYRD3:

  JMP FUNCTION

  KEYRD4:

  MOV KBUF1,A


上一頁(yè) 1 2 3 4 5 6 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉