<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          雙機(jī)并口通信

          共 11234字,需瀏覽 23分鐘

           ·

          2021-09-21 18:40

          一、設(shè)計(jì)內(nèi)容及要求

          a)通過8255芯片進(jìn)行雙機(jī)通信

          b)通過一個(gè)機(jī)器的鍵盤輸入,另一個(gè)機(jī)器的數(shù)碼管進(jìn)行輸出,每次傳輸一個(gè)數(shù)字,可以連續(xù)傳輸

          二、設(shè)計(jì)思想

          雙機(jī)均使用8255實(shí)現(xiàn)數(shù)據(jù)的讀入和輸出。

          發(fā)送端使用A端口方式0輸入來接收鍵盤上的值,C口高四位輸入,B口方式1輸出(B口通過數(shù)據(jù)線與接收端的B口相連,實(shí)現(xiàn)兩個(gè)機(jī)器之間的通信)

          接收端使用B端口方式1輸入,接收來自發(fā)送端的數(shù)據(jù),然后通過A端口方式0輸出到數(shù)碼管,控制數(shù)碼管顯示傳輸來的數(shù)字,C口高四位輸出。

          三、所用芯片的工作原理

          8255A并行接口芯片

          8255A 是 Intel 公司生產(chǎn)的通用并行 I/O 接口芯片,它具有 A、B、C 三個(gè)并行接口,用+5V 單電源供電,能在以下三種方式下工作:

          • 方式 0—基本輸入輸出
          • 方式 1—選通輸入輸出
          • 方式 2—雙向選通工作方式

          8255A 的引腳圖,工作方式控制字和 C 口按位置位復(fù)位控制字格式如下所示

          四、系統(tǒng)接線圖

          發(fā)送端接線圖
          接收端接線圖

          五、軟件設(shè)計(jì)

          總體設(shè)計(jì)分為「發(fā)送端」「接收端」兩個(gè)程序;

          「發(fā)送端:」

          • SEND:發(fā)送子程序,通過B口讀取鍵盤值,然后通過C口檢測(cè)接收端是否目前是否空閑,空閑則可以發(fā)送數(shù)據(jù),然后跳轉(zhuǎn)回初始狀態(tài);
          • CCSCAN:鍵盤掃描子程序,不停的進(jìn)行鍵盤掃描,如果有輸入則暫停,發(fā)送到8255中;
          • 主程序:當(dāng)鍵盤掃描子程序檢測(cè)到按鍵按下時(shí),將數(shù)據(jù)通過B口進(jìn)來,放進(jìn)3000-3003緩沖區(qū),然后判斷按鍵值為多少,判斷完成后調(diào)用SEND子程序?qū)⒕彺鎱^(qū)中的數(shù)據(jù)發(fā)送出去。

          「接收端:」

          • RECEIVE:接收子程序,首先讀取C口數(shù)據(jù),當(dāng)輸入緩沖區(qū)有數(shù)據(jù)時(shí)就講數(shù)據(jù)送往B口,調(diào)用顯示子程序,并向發(fā)送端發(fā)送回應(yīng)信號(hào),表示數(shù)據(jù)已經(jīng)送往外設(shè)。
          • DIS:顯示子程序,將接收到的數(shù)據(jù)顯示到數(shù)碼管上。

          六、運(yùn)行結(jié)果及分析

          發(fā)送端鍵盤輸入1,接收端數(shù)碼管顯示
          發(fā)送端輸入4,接收端數(shù)碼管輸出4

          七、心得體會(huì)

          通過本次課程設(shè)計(jì),我們實(shí)際動(dòng)手設(shè)計(jì)了雙機(jī)并口通信和計(jì)算器,深入理解了微機(jī)原理與接口這門課程的使用性,實(shí)踐出真知,在這次課程設(shè)計(jì)中,我們出現(xiàn)了很多問題,遇到了很多困難,在不斷的失敗不斷的嘗試中,我們終于成功完成了這兩個(gè)設(shè)計(jì)。

          通過這學(xué)期的學(xué)習(xí)和實(shí)踐,我們對(duì)匯編語(yǔ)言,各種芯片的作用有了比較深入的理解,對(duì)計(jì)算機(jī)的運(yùn)行機(jī)制有了更加深入的認(rèn)識(shí),我們將繼續(xù)努力學(xué)習(xí)相關(guān)知識(shí),希望可以在專業(yè)領(lǐng)域更上一層樓!

          八、程序源代碼

          Send

          IOY0         EQU   0600H          ;片選IOY0對(duì)應(yīng)的端口始地址
          MY8255_A     EQU   IOY0+00H*2     ;8255的A口地址
          MY8255_B     EQU   IOY0+01H*2     ;8255的B口地址
          MY8255_C     EQU   IOY0+02H*2     ;8255的C口地址
          MY8255_CON   EQU   IOY0+03H*2     ;8255的控制寄存器地址

          SSTACK SEGMENT
          DW   256 DUP(?)
          SSTACK ENDS

          DATA   SEGMENT
          DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
            DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
          DATA   ENDS

          CODE SEGMENT
          ASSUME CS:CODE,DS:DATA
          START: 
           MOV AX,DATA
           MOV DS,AX
           MOV DX,MY8255_CON 
           MOV AL,8DH                  ;使A端口方式0辥??o,C高四位輸入,B口方式1輸出
           OUT DX,AL
           MOV DX,MY8255_CON 
           MOV AL,05H                  ;使ACK置1,數(shù)據(jù)未送外設(shè),即PC2=1
           OUT DX,AL
          BEGIN:
           CALL DALLY
           CALL CCSCAN      ;掃描
           JNZ  INK1
           JMP  BEGIN
          INK1:
           CALL DALLY
           CALL CCSCAN
           JNZ  INK2      ;有鍵按下,轉(zhuǎn)到INK2
           JMP  BEGIN
          ;確定按下鍵的位置
          INK2: 
           MOV CH,0FEH
           MOV CL,00H
          COLUM: 
           MOV AL,CH
           MOV DX,MY8255_A 
           OUT DX,AL
           MOV DX,MY8255_C 
           IN  AL,DX
           and al,0f0h
          L1: 
           TEST AL,10H            ;is L1?
           JNZ L2
           MOV AL,00H             ;L1
           JMP KCODE
          L2:  
           TEST AL,20H            ;is L2?
           JNZ  L3
           MOV  AL,04H             ;L2
           JMP  KCODE
          L3:  
           TEST AL,40H            ;is L3?
           JNZ  L4
           MOV  AL,08H             ;L3
           JMP  KCODE
          L4:  
           TEST AL,80H            ;is L4?
           JNZ  NEXT
           MOV  AL,0CH             ;L4
          KCODE: 
           ADD  AL,CL
           CALL SEND                       ;鍵盤值發(fā)送
          KRET:
           PUSH AX
          KON: 
           CALL CCSCAN
           JNZ  KON
           POP  AX
          NEXT: 
           INC  CL
           MOV  AL,CH
           TEST AL,80H
           JZ   KERR
           ROL  AL,1
           MOV  CH,AL
           JMP  COLUM
          KERR: 
           JMP BEGIN
          ;發(fā)送子程序:將3000-3005緩沖區(qū)的內(nèi)容發(fā)送給接收機(jī)
          SEND:
           MOV DX,MY8255_B  
           OUT DX,AL                   ;把鍵盤值送端口B
           MOV DX,MY8255_C  
           IN  AL,DX                 ;讀端口C中的數(shù)據(jù)
           AND AL,04H                 ;測(cè)試ACK=0
           JZ  KRET                   ;ACK為0跳轉(zhuǎn),表示數(shù)據(jù)已送到外設(shè),可以再次輸入
           MOV DX,MY8255_A
           MOV AL,00H                 ;將OBF置0,表明已向指定的端口輸出了數(shù)據(jù),
           OUT DX,AL                   ;等待外設(shè)取走數(shù)據(jù)
           CALL DALLY
           ret                   ;無(wú)條件跳轉(zhuǎn)到BEGIN
           
          CCSCAN:
           MOV AL,00H     ;鍵盤掃描子程序
           MOV DX,MY8255_A  
           OUT DX,AL
           MOV DX,MY8255_C 
           IN  AL,DX
           NOT AL
           AND AL,0F0H
           RET
          DALLY: 
           PUSH CX      ;延時(shí)子程序
           MOV  CX,0006H
          T1: 
           MOV  AX,009FH
          T2: 
           DEC  AX
           JNZ  T2
           LOOP T1
           POP  CX
           RET

          CODE ENDS
          END START 

          RECEIVE

          IOY0         EQU   0600H          ;片選IOY0對(duì)應(yīng)的端口始地址
          MY8255_A     EQU   IOY0+00H*2     ;8255的A口地址
          MY8255_B     EQU   IOY0+01H*2     ;8255的B口地址
          MY8255_C     EQU   IOY0+02H*2     ;8255的C口地址
          MY8255_CON   EQU   IOY0+03H*2     ;8255的控制寄存器地址

          SSTACK SEGMENT
          DW   256 DUP(?)
          SSTACK ENDS

          DATA   SEGMENT
          DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
            DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
          DATA   ENDS

          CODE SEGMENT
          ASSUME CS:CODE,DS:DATA
          START: 
           MOV AX,DATA
           MOV DS,AX
           MOV SI,3000H
           MOV AL,00H
           MOV [SI],AL      ;清顯示緩沖
           ;MOV [SI+1],AL
           ;MOV DI,3001H
           MOV DX,MY8255_CON 
           MOV AL,8EH                  ;使A端口方式0輸出,C高四位輸出,B口方式1輸入
           OUT DX,AL
           MOV DX,MY8255_C
           MOV AL,40H                  ;使STB為1,輸入緩沖器為空
           OUT DX, AL
           CALL CLEAR 
          RECEIVE: 
           MOV  DX,MY8255_C                ;讀C口數(shù)據(jù)
           IN   AL,DX
           AND  AL,40H                     ;測(cè)試STB=0?
           JNZ  RECEIVE                   ;STB為1則跳轉(zhuǎn),表明輸入緩沖器為空
           MOV  DX,MY8255_B
           IN   AL,DX                      ;接收到的數(shù)據(jù)保存在端口B,讀B口的數(shù)據(jù) 
           CALL PUTBUF                     ;數(shù)據(jù)保存到指定緩沖中
           CALL DIS                        ;調(diào)用顯示子程庍
           MOV  DX,MY8255_CON
           MOV  AL,01H                     ;將IBF置1,向發(fā)送端發(fā)送回應(yīng)信號(hào),表明數(shù)據(jù)已送到外設(shè),但尚未取走
           OUT  DX,AL
           CALL DELAY                      ;延時(shí)
           MOV  AL,00H                     ;將IBF重新置0,等待接收新的數(shù)據(jù)被送到外設(shè)
           OUT  DX,AL
           JMP  RECEIVE
           
          CLEAR:
           MOV DX,MY8255_A       ;清屏子程序
           MOV AL,00H
           OUT DX,AL
           RET
          DIS:
           CALL CLEAR 
           PUSH AX         ;顯示子程序
           MOV  SI,3000H
           ;MOV  DL,0F7H
           ;MOV  AL,DL
          ;AGAIN:
           PUSH DX
           ;MOV  DX,MY8255_C               ;控制顯示在哪個(gè)數(shù)碼管,x4-x1
           ;OUT  DX,AL
           ;MOV  SI,DI
           MOV  AL,[SI]
           MOV  BX,OFFSET DTABLE
           AND  AX,00FFH
           ADD  BX,AX
           MOV  AL,[BX]
           MOV  DX,MY8255_A               ;A口輸出,顯示在數(shù)碼管 
           OUT  DX,AL
           
           CALL DELAY
           ;INC  SI
           POP  DX
           ;MOV  AL,DL
           ;TEST AL,04H                    ;2?μ?λ£?????????o???
           ;JZ   OUT1
           ;ROR  AL,1
           ;MOV  DL,AL
           ;JMP  AGAIN
          ;OUT1:
           POP  AX
           RET
          PUTBUF:
           ;MOV SI,DI      ;存鍵盤值到相應(yīng)位的緩沖中
           MOV [SI],AL
           ;DEC DI
           ;CMP DI,2FFFH
           ;JNZ GOBACK
           ;MOV DI,3001H
          ;GOBACK:
           RET
          DELAY: 
           PUSH CX       ;延時(shí)子程序
           MOV  CX,0006H
          T1: 
           MOV  AX,009FH
          T2: 
           DEC  AX
           JNZ  T2
           LOOP T1
           POP  CX
           RET
          CODE ENDS
          END START

          結(jié)語(yǔ)

          代碼均為原創(chuàng)

          版權(quán)歸原作者所有

          僅供小伙伴們學(xué)習(xí)參考使用

          請(qǐng)勿用作其余用途!

          創(chuàng)作不易

          如果您覺得寫得不錯(cuò)的話

          「點(diǎn)贊+在看+收藏」 ??

          寫留言

          瀏覽 136
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色老板在线观看免费视频 | 热99视频66 | 7799天天综合网精品 | 影音成人 | 成人五月激情 |