關(guān) 閉

        新聞中心

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

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

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

          一、緒言

          因工作需要,設(shè)計(jì)一單線雙向通訊協(xié)議。要求主機(jī)通過其所帶的鍵盤能控制主機(jī)和從機(jī)的顯示,從機(jī)也能通過所帶的鍵盤控制主機(jī)和從機(jī)的顯示,主機(jī)和從機(jī)鍵盤所起的控制作用完全一致,顯示也完全一致。

          另外,從機(jī)可以隨時(shí)脫離主機(jī)。當(dāng)從機(jī)從脫機(jī)狀態(tài)連上主機(jī)時(shí),要求從機(jī)能立即顯示主機(jī)的鍵盤信息,即顯示一致。

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

          1.整體時(shí)序:

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

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

          4.

          S :開始位

          A :響應(yīng)位

          E :結(jié)束位

          R :讀端口

          W :寫端口

          Dx:數(shù)據(jù)

          5.主從機(jī)同步原理:

          由圖可知,主從機(jī)的讀寫是互不沖突的,任意時(shí)刻只允許一個(gè)寫,但允許兩個(gè)都處于讀狀態(tài)。從整體上講,數(shù)據(jù)是按幀傳輸?shù)模珡亩〞r(shí)器中斷方面來說,數(shù)據(jù)是按位傳輸?shù)模驗(yàn)橐淮味〞r(shí)器中斷只傳送一個(gè)位,而不是完整的一幀數(shù)據(jù)。在數(shù)據(jù)未開始傳輸前,從機(jī)IO口處于邊沿中斷接收狀態(tài),其定時(shí)器中斷是關(guān)閉的。主機(jī)永遠(yuǎn)處于定時(shí)中斷狀態(tài)。當(dāng)主機(jī)發(fā)出開始位之后,若存在從機(jī),則從機(jī)會(huì)發(fā)出一個(gè)低電平響應(yīng);否則表示通訊失敗,幾個(gè)時(shí)鐘周期之后,主機(jī)會(huì)接著發(fā)起下一次數(shù)據(jù)傳輸?shù)拈_始位。在通訊過程中,任意一個(gè)響應(yīng)位不成立均宣告通訊失敗,同時(shí)此次通訊結(jié)束。

          綜上所述,在數(shù)據(jù)傳輸開始時(shí),靠“外部邊沿中斷”同步,在數(shù)據(jù)傳輸開始之后,靠“定時(shí)器中斷”同步。

          6.協(xié)議的穩(wěn)健性

          (1)速度問題:

          以單放機(jī)、CD機(jī)等的現(xiàn)控為例,由于處理器的主要任務(wù)為信號(hào)處理,所以要求通訊占用的時(shí)間越少越好,而且通訊數(shù)據(jù)量也不大,該協(xié)議正是基于該類設(shè)計(jì)的。由于每次只發(fā)送一位數(shù)據(jù),故占用的MCU時(shí)間非常少.

          (2)可靠性問題:

          在該協(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)、漢明碼等。

          (3)效果檢測(cè)

          通過由兩塊AT89C51組成的試驗(yàn),該協(xié)議工作完全正常,并具備即插即用功能,即在主機(jī)工作時(shí),從機(jī)可以隨時(shí)拔下插上而不會(huì)影響主從機(jī)工作狀態(tài)及其顯示。該協(xié)議已于國內(nèi)某知名企業(yè)的單放機(jī)的大批量生產(chǎn)中采用。

          1.主機(jī)源程序

          ;主機(jī)程序

          KBUF0 EQU 24H ;鍵值臨時(shí)緩沖

          KBUF1 EQU 25H ;鍵值緩沖

          KCNTEQU 26H ;鍵盤重復(fù)計(jì)數(shù)

          DLYD0 EQU 27H ;延遲變量

          DLYD1 EQU 28H ;延遲變量

          DLYD2 EQU 29H ;延遲變量

          

          RSCNT EQU 2AH

          

          RSI BIT 00H ;收發(fā)開始標(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INT_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 ;讀鍵盤

          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


        上一頁 1 2 3 4 5 6 下一頁

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 长汀县| 南安市| 宜昌市| 贵德县| 普宁市| 孙吴县| 巴东县| 台南市| 汝阳县| 会理县| 北京市| 天等县| 名山县| 禄丰县| 岫岩| 花莲县| 邢台县| 文安县| 耿马| 壶关县| 青河县| 毕节市| 株洲市| 泗洪县| 刚察县| 建始县| 任丘市| 黄平县| 周宁县| 青海省| 蓬溪县| 晋城| 宜州市| 花莲市| 景德镇市| 福泉市| 家居| 太仆寺旗| 当阳市| 灵宝市| 奉节县|