2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  摘 要</b></p><p>  本課程設(shè)計要求完成的任務(wù)是實現(xiàn)兩臺PC機之間1K數(shù)據(jù)的并行傳輸。為了使程序編寫簡單并便于進行調(diào)試,本設(shè)計采用DOS功能調(diào)用,由鍵盤輸入字符串來模擬要傳輸?shù)?K數(shù)據(jù)。因為傳輸包括發(fā)送和接收兩方面內(nèi)容,所以程序采用模塊化思想,將整個程序分為發(fā)送和接收兩個功能模塊分別來進行編寫,然后通過調(diào)用來實現(xiàn)整體的功能。程序設(shè)計的關(guān)鍵部分是8

2、255A的編程控制,本設(shè)計按要求采用方式2,在傳輸過程中通過查詢相關(guān)端口來判斷是否發(fā)送或接收完畢,從而實現(xiàn)1K數(shù)據(jù)的接收與發(fā)送。關(guān)鍵詞:并行通訊 發(fā)送 接收 8255A DOS功能調(diào)用</p><p>  1 問題的描述與分析</p><p>  題目要求:由甲乙兩臺微機之間并行傳送1K字節(jié)數(shù)據(jù)。先甲機發(fā)送,乙機接收,后乙機發(fā)送,甲機接收。甲乙雙方的8255A均采用方式2工作。8255

3、A控制口地址為303。</p><p>  本題屬于雙機并行通訊問題,應(yīng)分為發(fā)送和接收兩方面分別來進行研究。由于程序需要對地址進行直接操作,所以選擇匯編語言來編寫較為簡單方便。在寫程序的過程中,由于要用8255A芯片作為并行傳輸芯片,所以要熟練掌握8255A的控制方法;此外,程序多處還要用到DOS功能調(diào)用,所以還要對DOS的各種功能進行系統(tǒng)的學(xué)習(xí)。</p><p>  兩臺PC各與一個82

4、55A芯片相連,程序分為兩部分,分別運行與兩臺PC機上以實現(xiàn)并行傳輸。連接圖如下:</p><p>  圖1-1 雙機通訊的連接圖</p><p>  程序分為兩個部分,分別在甲機和乙機上面運行。甲機運行的程序是先發(fā)送后接收,乙機上運行的程序時先接收后發(fā)送,實現(xiàn)先從甲機到乙機傳輸1KB的數(shù)據(jù),后從乙機到甲機傳輸1KB的數(shù)據(jù)的功能。我們在兩臺微機的內(nèi)存中各開辟一個1KB的字符區(qū)BUF1,象征

5、性的輸入少許字符,來模擬要傳輸?shù)?KB的數(shù)據(jù)。再各開辟一個1KB的字符區(qū)BUF2用來存儲接收到的1KB數(shù)據(jù)。</p><p>  2 8255A芯片的介紹</p><p>  2.1 8255A簡介及引腳功能</p><p>  8255A是一種通用的可編程并行I/O接口芯片,廣泛用于幾乎所有系列的微機系統(tǒng)中,如8086、MCS51、Z80等。8255A具有3個帶鎖

6、存或緩沖的數(shù)據(jù)端口,可與外設(shè)并行進行數(shù)據(jù)交換。每個端口都有一個數(shù)據(jù)輸入寄存器和一個數(shù)據(jù)輸出寄存器,輸入時端口有三態(tài)緩沖器的功能,輸出時端口有數(shù)據(jù)鎖存器功能??刂艫、B和C3個端口的工作方式,A組控制A口和C口的上半部(PC7~PC4),B組控制B口和C口的下半部(PC3~PC0)的工作方式和輸入/輸出。作用:指定3個并行端口(PA、PB、PC)是作輸入還是作輸出端口以及選擇8255的工作方式。利用按位置位/復(fù)位控制字可以使PC口的8根線

7、中的任意一根置成高電平輸出或低電平輸出。</p><p>  8255A的芯片引腳圖見圖2-1:</p><p>  圖2-1 8255A的芯片引腳圖</p><p>  RESET:復(fù)位輸入線,當(dāng)該輸入端外于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。 </p><p>  PA0~PA7:端口A輸入輸

8、出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器,一個8位的數(shù)據(jù)輸入鎖存器。 </p><p>  PB0~PB7:端口B輸入輸出線,一個8位的I/O鎖存器,一個8位的輸入輸出緩沖器。 </p><p>  PC0~PC7:端口C輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器,一個8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設(shè)定而分成2個4位的端口,每個4位的端口包含一個4位的鎖存器,分別與端口A和端

9、口B配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。 </p><p>  CS:片選信號線,當(dāng)這個輸入引腳為低電平時,表示芯片被選中,允許8255A與CPU進行通訊。 </p><p>  RD:讀信號線,當(dāng)這個輸入引腳為低電平時,允許8255A通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU從8255讀取信息或數(shù)據(jù)。 </p><p>  WR:寫入信號,當(dāng)這個

10、輸入引腳為低電平時,允許CPU將數(shù)據(jù)或控制字寫入8255A。 </p><p>  D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255A與CPU數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時,通過它實現(xiàn)8位數(shù)據(jù)的讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。</p><p>  A1、A0:端口地址總線,8255A中有端口A、B、C和一個內(nèi)部控制字寄存器,共4個端口,由A0、A1輸入地址信號來尋址。(

11、A0、A1的組合與端口關(guān)系,見表2-1)</p><p>  表2-1 A0、A1的組合與端口關(guān)系</p><p>  2.2 8255A的編程</p><p>  所謂8255A編程,就是用戶在使用8255A前,可用軟件來定義端口的工作方式,選擇所需要的功能。</p><p>  8255A是將所有端口分為兩組來控制的,因此方式控制字也分為

12、了兩部分:A組控制D6~D3和B組控制D2~D0。其具體格式見表2-2。</p><p>  表2-2 8255A的方式控制字</p><p>  此外,方式控制字未規(guī)定C口的工作方式,只規(guī)定了C口數(shù)據(jù)的傳輸方向,這就表明C口要么作為聯(lián)絡(luò)線用,要么就只工作在方式0。</p><p>  此外,8255A還有一個特殊的功能,即對C口直接進行置“1”或清“0”操作,這種

13、方法使C口的控制變得更加簡單、方便。其具體格式見表2-4。</p><p>  表2-4 8255A的C口控制字</p><p>  2.3 8255A的工作方式</p><p>  8255A有三種工作方式:</p><p>  方式0——基本輸入/輸出方式</p><p>  方式1——選通輸入/輸出方式</

14、p><p>  方式2——雙向傳輸方式</p><p>  方式0基本特點:方式0是一種基本輸入或輸出方式,該方式適合于通信雙方不需要聯(lián)絡(luò)信號(應(yīng)答信號)的簡 單輸入/輸出場合,CPU可以隨時用輸入/輸出指令對指定端口進行讀寫操作。</p><p>  方式1基本特點:方式1為選通輸入/輸出方式,即可借助于選通(應(yīng)答式)聯(lián)絡(luò)信號的I/O方式。PC3~PC0、PC6、PC

15、7作為控制口。A口工作于方式1輸出,所用的聯(lián)絡(luò)信號 線為PC7、PC6和PC3,而B口工作于方式1輸出時,使用PC2~PC0作其聯(lián)絡(luò)信號線。</p><p>  方式2基本特點:方式2是一種雙向選通輸入/輸出方式,它把A口作為雙向輸入/輸出口,把C口的5根線(PC3~PC7)作為專用應(yīng)答線,所以,8255A只有A口才有2方式。</p><p>  由于本題要求工作在方式2,所以這里只重點

16、介紹方式2的工作原理。</p><p>  方式2的雙向傳輸方式是指在同一端口內(nèi)分時進行輸入/輸出的操作,可用來在兩臺處理機之間實現(xiàn)雙向并行通信。它需要5個控制信號進行“聯(lián)絡(luò)”,這5個控制信號由C口提供。由于方式2的A口既能發(fā)送,也能接收數(shù)據(jù),所以A口的引腳在“空閑”狀態(tài)下是三態(tài)的。A口在某一時刻下,輸入或輸出是由相應(yīng)“聯(lián)絡(luò)”線確定的。工作時可用軟件查詢方式,也可用中斷方式。A口工作在方式2時,C口的“聯(lián)絡(luò)”線既

17、要提供A口的輸入“聯(lián)絡(luò)”線和,又要提供A口的輸出“聯(lián)絡(luò)”線和,具體聯(lián)絡(luò)信號定義見圖2-2,同時還要有一個處理A口中斷的中斷申請線,具體端口分配見表2-5。</p><p>  圖2-2 方式2下的A口聯(lián)絡(luò)線</p><p><b>  I/O</b></p><p><b>  INTRA</b></p>&

18、lt;p><b>  OBFA</b></p><p><b>  ACKA</b></p><p><b>  STBA</b></p><p><b>  IBFA</b></p><p>  當(dāng)8255A的A口工作在方式2時,輸入和輸出共用同一

19、個中斷請求信號線。所以,當(dāng)使用中斷方式傳輸數(shù)據(jù)時,可以通過C口置“1”/清“0”控制字來設(shè)置中斷屏蔽觸發(fā)器INTE1和INTE2,實現(xiàn)對中斷源的控制,禁止/允許輸入時中斷或輸出時中斷。</p><p>  表2-5 8255A的方式控制字</p><p>  ——A口的中斷請求信號。當(dāng)其有效時,8255A的A口向CUP申請中斷。</p><p>  ——A口的選通信

20、號(外設(shè)發(fā)出,低電平有效)。當(dāng)其有效時,外設(shè)把數(shù)據(jù)輸入A口的輸入緩沖器。</p><p>  ——A口的輸入緩沖器“滿”信號。當(dāng)其有效時,表示A口的輸入緩沖器已經(jīng)暫存一個有效數(shù)據(jù)。</p><p>  ——外設(shè)應(yīng)答信號。由外設(shè)發(fā)出,低電平時有效。當(dāng)其有效時,表示外設(shè)已經(jīng)接收數(shù)據(jù)。</p><p>  ——A口的輸出緩沖器“滿”信號。當(dāng)其有效時表示A口的輸出緩沖器已經(jīng)

21、暫存一個有效數(shù)據(jù)。</p><p>  3 DOS常用功能的介紹</p><p>  DOS是美國Microsoft公司為IBM PC研制的磁盤操作系統(tǒng)。DOS不僅為用戶提供了許多使用命令,而且還有用戶可以直接調(diào)用的上百個常用子程序。對這些子程序的調(diào)用,稱為系統(tǒng)功能調(diào)用。這些子程序的功能主要是進行磁盤讀/寫、控制管理、內(nèi)存管理、基本輸入/輸出管理等。在使用時,用戶不需要了解各種I/O接口硬

22、件的詳細情況就能直接完成對I/O接口的控制和管理。</p><p><b>  其調(diào)用過程為:</b></p><p>  DOS功能調(diào)用號送AH寄存器。</p><p>  如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù))。</p><p>  寫入中斷指令“INT 21H”。</p><p&g

23、t;  調(diào)用結(jié)束,按功能使用其輸出參數(shù)。</p><p>  DOS系統(tǒng)啟動時,DOS層功能模塊從系統(tǒng)盤被裝入內(nèi)存。調(diào)用這些功能模塊稱為DOS功能調(diào)用。DOS功能調(diào)用可以完成文件管理、存儲管理、作業(yè)管理和設(shè)備管理等。表3-1列出了一些常用的DOS功能調(diào)用。</p><p>  表3-1 常用DOS功能調(diào)用</p><p><b>  4 系統(tǒng)方框圖<

24、/b></p><p>  編寫的程序有兩種類型:甲機是先發(fā)送后接收類型,乙機是先接收后發(fā)送類型。這兩種類型程序非常相似,只是在調(diào)用發(fā)送、接收子函數(shù)時,順序有所不同。甲機程序的系統(tǒng)方框圖如圖4-1所示。</p><p>  圖4-1 甲機程序的系統(tǒng)方框圖</p><p><b>  5 各部分程序設(shè)計</b></p><

25、;p>  5.1 甲機源程序見附錄1</p><p>  5.2 乙機源程序見附錄2</p><p><b>  5.3 發(fā)送子程序</b></p><p><b>  OUT1 PROC</b></p><p>  MOV DX,303H ;

26、對控制端口進行初始化</p><p>  MOV AL,0C9H </p><p>  OUT DX,AL</p><p>  MOV AL,0FH ;將OBFA置1</p><p>  OUT DX,AL </p>

27、<p>  MOV CX,1024 ;設(shè)置循環(huán)次數(shù)</p><p><b>  L1: </b></p><p>  MOV DX,300H ;開始傳輸字符</p><p>  MOV AL,[SI]</p><p

28、>  OUT DX,AL </p><p><b>  INC SI</b></p><p><b>  L11: </b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,80H

29、 ;測試OBFA</p><p>  JZ L11 ;OBFA有效,說明前一個數(shù)還未傳送完,則繼續(xù)等待,否則傳送下一個數(shù)</p><p><b>  LOOP L1</b></p><p><b>  RET</b>&l

30、t;/p><p>  OUT1 ENDP </p><p><b>  5.4 接收子程序</b></p><p>  IN1 PROC</p><p>  MOV DX,303H ;對控制端口進行初始化</p><p>  MOV AL,0F

31、9H</p><p>  OUT DX,AL</p><p>  MOV AL,0AH ;將IBFA置0</p><p>  OUT DX,AL </p><p>  MOV CX,1024 ;設(shè)置循環(huán)次數(shù)</p>

32、<p><b>  L2:</b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,10H ;測試IBFA,看是否收到數(shù)</p><p><b>  JZ L2&l

33、t;/b></p><p>  MOV DX,300H ;讀一個數(shù)</p><p>  IN AL,DX</p><p>  MOV [DI],AL</p><p><b>  INC DI</b></p><p><b&

34、gt;  K2:</b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,10H ;測試IBFA,看是已存好數(shù)</p><p><b>  JNZ K2</b></p&g

35、t;<p><b>  LOOP L2</b></p><p><b>  RET</b></p><p>  IN1 ENDP</p><p><b>  6 硬件連線</b></p><p>  6.1 8086CPU芯片引腳見圖6-1</p>

36、;<p>  6-1 8086CPU引腳圖</p><p>  針對本次設(shè)計只介紹以下幾個引腳功能:</p><p>  AD15-AD0——分時復(fù)用的地址數(shù)據(jù)總線。傳送地址時以三態(tài)輸出,傳送數(shù)據(jù)時可以以雙向三態(tài)輸入/輸出。</p><p>  A19/S6、A18/S5、A17/S4、A16/S3——分時復(fù)用的地址/狀態(tài)線。當(dāng)它作為地址線用時可以構(gòu)成

37、訪問存儲器的20位物理地址。</p><p>  M/——存儲器或I/O端口訪問信號(三態(tài)輸出)。M/為高電平時,表示當(dāng)前CPU正在訪問存儲器;M/為低電平時,表示當(dāng)前CPU正在訪問I/O端口。</p><p>  ——讀信號(三態(tài)輸出,低電平有效),表示當(dāng)前CPU正在讀存儲器或I/O端口。</p><p>  ——寫信號(三態(tài)輸出,低電平有效),表示當(dāng)前CPU正在

38、寫存儲器或I/O端口。</p><p>  INTR——中斷請求信號(由外部輸入,電平觸發(fā),高電平有效)。INTR有效時,表示外部設(shè)備向CPU發(fā)出中斷請求,CPU在每條指令的最后一個時鐘周期對INTR進行測試,一旦測試到有中斷請求,并且當(dāng)中斷允許標(biāo)志IF=1時,則暫停執(zhí)行下條指令轉(zhuǎn)入中斷響應(yīng)周期。</p><p>  VCC(電源)——8086CPU只需要單一的+5V電源,由VCC輸入。&

39、lt;/p><p>  6.2 74LS138芯片引腳見圖6-2</p><p>  圖6-2 74LS138引腳圖</p><p>  A0、A1、A2——二進制輸入端,它們共有8種狀態(tài)的組合,即可譯出8個輸出信號Y0-Y7。</p><p>  、、E3——三個使能輸入端,其中當(dāng)E1=0、E2=0、E3=1時,譯碼器才能正常工作。</p

40、><p>  Y0-Y7——8個輸出端。</p><p>  VCC、GND——分別為電源和和接地線。</p><p>  74LS138譯碼器功能表見表6-1。</p><p>  表6-1 74LS138功能表</p><p><b>  6.3 電路連接圖</b></p><

41、p>  由題目所給的控制口地址303H,可知8255A的A口地址為300H,由此可得如圖6-3的硬件連線圖。</p><p>  圖6-3 電路連線圖</p><p>  其中,A19-A0為8086CPU的地址線。</p><p><b>  7 程序調(diào)試</b></p><p>  7.1 命令提示符窗口簡介&

42、lt;/p><p>  命令提示符窗口(cmd.exe)是Windows的“標(biāo)配”組件,它可以實現(xiàn)用戶與操作系統(tǒng)的直接交流,并負責(zé)用戶輸入的所有命令的解釋和支持。使用命令提示符進行的操作往往更具有專業(yè)性——實際上很多Windows中的操作只能通過命令來實現(xiàn)。命令提示符也就是Windows95/98下的“MS-DOS方式”,雖然隨著計算機的發(fā)展,Windows操作系統(tǒng)的應(yīng)用越來越廣泛,DOS面臨著被淘汰的命運,但是因為

43、它運行安全、穩(wěn)定,有的用戶還在使用,所以一般操作系統(tǒng)的各種版本都與之兼容,用戶可以在Windows系統(tǒng)下運行DOS,另外,中文版的Windows XP的命令提示符進一步提高了與DOS下的操作命令的兼容性,用戶可以在命令提示符中直接輸入中文調(diào)用文件。</p><p><b>  7.2 匯編源程序</b></p><p>  匯編源程序檢查程序?qū)﹀e并生成obj文件,見圖

44、7-1。</p><p>  圖7-1 匯編源程序</p><p><b>  7.3 程序調(diào)試</b></p><p>  程序調(diào)試見圖7-2。</p><p><b>  圖7-2 程序調(diào)試</b></p><p>  從程序調(diào)試結(jié)果可以看出兩機實現(xiàn)并行發(fā)送/接收1KB數(shù)

45、據(jù)基本可以實現(xiàn),故本次設(shè)計完成。</p><p><b>  8 小結(jié)與體會</b></p><p>  本次課程設(shè)計中,有一些知識是我們在課堂上所沒有講過的,因此就需要我們查閱各種資料。通過這短短一周半的實踐,我感覺到自己學(xué)到了很多有用的理論和實踐知識。從程序的設(shè)計到調(diào)試、運行,任何一個步驟都是對自己的考驗。通過本次課程設(shè)計,我熟練的掌握了8255A芯片的使用方法,

46、了解了雙機并行通訊的原理,還學(xué)會了程序編寫的一般步驟以及匯編語言的使用,更重要的時,本次課設(shè)很好的鍛煉了我的思維嚴(yán)謹性,因為任何一個錯誤都會導(dǎo)致程序運行失敗。</p><p>  總之,通過本次課設(shè),我感覺自己受益匪淺。</p><p><b>  參考文獻</b></p><p>  [1] 邵玉祥. 匯編語言程序設(shè)計. 北京:科學(xué)出版社.2

47、005</p><p>  [2] 陽平. 匯編語言與微機原理. 北京:中國水利水電出版社.2006</p><p>  [3] 胡薔. 微機原理及應(yīng)用. 北京:機械工業(yè)出版社.2006</p><p>  [4] 錢曉捷 . 新版匯編語言程序設(shè)計. 北京:電子工業(yè)出版社.2007</p><p>  [5] 周佩玲. 微機原理與接

48、口技術(shù). 北京:電子工業(yè)出版社.2007</p><p>  [6] 朱金鈞. 微機計算機原理及應(yīng)用技術(shù). 機械工業(yè)出版社.2006</p><p>  [7] 楊記文. 匯編語言程序設(shè)計教程. 北京. 清華大學(xué)出版社</p><p>  [8] 姚君遺. 匯編語言程序設(shè)計. 南京. 南京大學(xué)出版社</p><p>  [9] (美)埃爾溫.

49、 Assembly language for intel-board computers. 清華大學(xué)出版社</p><p>  [10] (美)布魯姆. Professional Assembly Language 機械工業(yè)出版社</p><p>  附錄1:甲機原程序代碼</p><p>  ;*********************************

50、**************************************</p><p>  ; 主程序:由甲乙兩臺微機之間并行傳送1K字節(jié)數(shù)據(jù)。甲機發(fā)送,乙機接收。 *</p><p>  ; 甲乙雙方的8255A均采用方式2工作。 *</p><p>  ; 825

51、5A控制口地址為303 *</p><p>  ;***********************************************************************</p><p>  DATA SEGMENT</p><p>  BUF DB 100

52、 ;表示1KB的數(shù)據(jù)緩沖區(qū)</p><p><b>  DB ?</b></p><p>  DB 100 dup(1)</p><p>  BUF1 DB 1024 DUP(0) ;表示甲PC要傳輸?shù)?KB數(shù)據(jù)</p

53、><p>  BUF2 DB 1024 DUP(0) ;表示甲PC接收的1KB數(shù)據(jù)</p><p>  PUT1 DB 0ah,0dh,'if you want to quit ,please press Q/q! '</p><p>  DB 0ah,0dh,'press other

54、 key to start',0ah,0dh,' $'</p><p>  PUT2 DB 0aH,0dH,'input some words for transfer:'</p><p>  DB 0ah,0dh,'$'</p><p>  DATA ENDS</p><p>

55、;  STACK1 SEGMENT STACK</p><p>  DB 1024 DUP(?)</p><p>  STACK1 ENDS</p><p>  CODE SEGMENT</p><p>  ASSUME DS:DATA,SS:STACK1,CS:CODE</p><p>  START: MO

56、V AX,DATA</p><p>  MOV DS,AX </p><p>  T1: LEA DX,PUT1 ;輸入提示信息PUT1</p><p><b>  MOV AH,9</b></p><p><b>  INT 21h<

57、/b></p><p>  MOV AH,08h ;從鍵盤輸入單個字符</p><p>  INT 21h </p><p>  CMP AL,'Q' ;輸入字符與Q進行比較</p><p>  JE ex

58、it</p><p>  cmp al,'q' ;輸入字符與q進行比較</p><p><b>  je exit</b></p><p>  T2: lea dx,PUT2 ;輸入提示信息PUT2

59、 </p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><p>  lea dx,BUF ;輸入一串字符到緩沖區(qū)以供</p><p>&

60、lt;b>  傳輸?shù)揭襭c機</b></p><p>  mov ah,10</p><p><b>  int 21h</b></p><p>  lea di,BUF+2 ;將緩沖區(qū)中字符串的偏移</p><p><b>  地址賦

61、予di</b></p><p>  lea si,BUF1</p><p>  next1: mov dl,[di] ;將緩沖區(qū)的字符移到寄存器dl</p><p><b>  inc di</b></p><p>  cmp dl,0dh

62、 ;檢測寄存器中的字符是否為回車</p><p>  jne aa1 ;不是回車就跳轉(zhuǎn)到aa1</p><p>  jmp T ;是回車就跳轉(zhuǎn)到T</p><p>  aa1: mo

63、v [si],dl</p><p><b>  inc si</b></p><p>  jmp next1</p><p>  T: LEA SI,BUF1 ;甲機開始傳輸數(shù)據(jù)</p><p><b>  CALL OUT1</b&g

64、t;</p><p>  LEA DI,BUF2 ;甲機開始接收數(shù)據(jù)</p><p><b>  CALL IN1</b></p><p><b>  JMP T1 </b></p><p>  exit: MOV AH,4CH

65、 ;退出程序</p><p><b>  INT 21H </b></p><p>  OUT1 PROC</p><p>  MOV DX,303H ;對控制端口進行初始化</p><p>  MOV AL,0C9H

66、 </p><p>  OUT DX,AL</p><p>  MOV AL,0FH ;將OBFA置1</p><p>  OUT DX,AL </p><p>  MOV CX,1024

67、 ;設(shè)置循環(huán)次數(shù)</p><p><b>  L1: </b></p><p>  MOV DX,300H ;開始傳輸字符</p><p>  MOV AL,[SI]</p><p>  OUT DX,AL </p><p><b

68、>  INC SI</b></p><p><b>  L11: </b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,80H ;測試OBFA</p><

69、;p>  JZ L11 ;OBFA有效,說明前一個數(shù)還未傳 送完,則繼續(xù)等待,否則傳送下一個數(shù)</p><p><b>  LOOP L1</b></p><p><b>  RET</b></p><p>  OUT1 ENDP </p&g

70、t;<p>  IN1 PROC</p><p>  MOV DX,303H ;對控制端口進行初始化</p><p>  MOV AL,0F9H</p><p>  OUT DX,AL</p><p>  MOV AL,0AH

71、 ;將IBFA置0</p><p>  OUT DX,AL </p><p>  MOV CX,1024 ;設(shè)置循環(huán)次數(shù)</p><p><b>  L2:</b></p><p>  MOV DX,302H</p><p

72、>  IN AL,DX</p><p>  AND AL,10H ;測試IBFA,看是否收到數(shù)</p><p><b>  JZ L2</b></p><p>  MOV DX,300H ;讀一個數(shù)</p>&l

73、t;p>  IN AL,DX</p><p>  MOV [DI],AL</p><p><b>  INC DI</b></p><p><b>  K2:</b></p><p>  MOV DX,302H</p><p>  IN AL,D

74、X</p><p>  AND AL,10H ;測試IBFA,看是已存好數(shù)</p><p><b>  JNZ K2</b></p><p><b>  LOOP L2</b></p><p><b>  RET</b>

75、</p><p>  IN1 ENDP</p><p>  CODE ENDS</p><p>  END START</p><p>  附錄2:乙機原程序代碼</p><p>  ;***********************************************************

76、************</p><p>  ; 主程序:由甲乙兩臺微機之間并行傳送1K字節(jié)數(shù)據(jù)。乙機發(fā)送,甲機接收。 *</p><p>  ; 甲乙雙方的8255A均采用方式2工作。 *</p><p>  ; 8255A控制口地址為303

77、 * </p><p>  ;***********************************************************************</p><p>  DATA SEGMENT</p><p>  BUF DB 100

78、 ;表示1KB的數(shù)據(jù)緩沖區(qū)</p><p><b>  DB ?</b></p><p>  DB 100 dup(1)</p><p>  BUF1 DB 1024 DUP(0) ;表示乙PC要傳輸?shù)?KB數(shù)據(jù)</p><p>  BUF2

79、 DB 1024 DUP(0) ;表示乙PC接收的1KB數(shù)據(jù)</p><p>  PUT1 DB 0ah,0dh,'if you want to quit ,please press Q/q! '</p><p>  DB 0ah,0dh,'press other key to start',0ah

80、,0dh,' $'</p><p>  PUT2 DB 0aH,0dH,'input some words for transfer:'</p><p>  DB 0ah,0dh,'$'</p><p>  DATA ENDS</p><p>  STACK1 SEGMENT STAC

81、K</p><p>  DB 1024 DUP(?)</p><p>  STACK1 ENDS</p><p>  CODE SEGMENT</p><p>  ASSUME DS:DATA,SS:STACK1,CS:CODE</p><p>  START: MOV AX,DATA</p>

82、<p>  MOV DS,AX </p><p>  T1: lea dx,PUT1 ;輸入提示信息PUT1</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><

83、p>  mov ah,08h ;從鍵盤輸入單個字符</p><p>  int 21h </p><p>  cmp al,'Q' ;輸入字符與Q進行比較</p><p>  JE exit</p><p>

84、;  cmp al,'q' ;輸入字符與q進行比較</p><p><b>  je exit</b></p><p>  T2: lea dx,PUT2 ;輸入提示信息PUT2 &l

85、t;/p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><p>  lea dx,BUF ;輸入一串字符到緩沖區(qū)以供</p><p><b>  傳輸?shù)郊譸c機</b&g

86、t;</p><p>  mov ah,10</p><p><b>  int 21h</b></p><p>  lea di,BUF+2 ;將緩沖區(qū)中字符串的</p><p><b>  偏移地址賦予di</b></p>&

87、lt;p>  lea si,BUF1</p><p>  next1: mov dl,[di] ;將緩沖區(qū)的字符移到寄存器dl</p><p><b>  inc di</b></p><p>  cmp dl,0dh

88、 ;檢測寄存器中的字符是否為回車</p><p>  jne aa1 ;不是回車就跳轉(zhuǎn)到aa2</p><p>  jmp T ;是回車就跳轉(zhuǎn)到T</p><p>  aa1: mov [si],dl</p><p

89、><b>  inc si</b></p><p>  jmp next1</p><p>  T: LEA DI,BUF2 ;乙機開始接收數(shù)據(jù)</p><p><b>  CALL IN1</b></p><p>  LEA S

90、I,BUF1 ;乙機開始傳輸數(shù)據(jù)</p><p><b>  CALL OUT</b></p><p><b>  JMP T1 </b></p><p>  exit: MOV AH,4CH ;退出程序</p&g

91、t;<p><b>  INT 21H </b></p><p>  OUT1 PROC</p><p>  MOV DX,303H ;對控制端口進行初始化</p><p>  MOV AL,0C9H </p>

92、<p>  OUT DX,AL</p><p>  MOV AL,0FH ;將OBFA置1</p><p>  OUT DX,AL </p><p>  MOV CX,1024 ;設(shè)置循環(huán)次數(shù)</p><p><b&g

93、t;  L1: </b></p><p>  MOV DX,300H ;開始傳輸字符</p><p>  MOV AL,[SI]</p><p>  OUT DX,AL </p><p><b>  INC SI</b></p><

94、;p><b>  L11: </b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,80H ;測試OBFA</p><p>  JZ L11

95、 ;OBFA有效,說明前一個數(shù)還未傳送完,則繼續(xù)等待,否則傳送下一個數(shù)</p><p><b>  LOOP L1</b></p><p><b>  RET</b></p><p>  OUT1 ENDP </p><p>  IN1 PROC</p>&

96、lt;p>  MOV DX,303H ;對控制端口進行初始化</p><p>  MOV AL,0F9H</p><p>  OUT DX,AL</p><p>  MOV AL,0AH ;將IBFA置0</p><p>  O

97、UT DX,AL </p><p>  MOV CX,1024 ;設(shè)置循環(huán)次數(shù)</p><p><b>  L2:</b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  A

98、ND AL,10H ;測試IBFA,看是否收到數(shù)</p><p><b>  JZ L2</b></p><p>  MOV DX,300H ;讀一個數(shù)</p><p>  IN AL,DX</p><p>

99、  MOV [DI],AL</p><p><b>  INC DI</b></p><p><b>  K2:</b></p><p>  MOV DX,302H</p><p>  IN AL,DX</p><p>  AND AL,10H

100、 ;測試IBFA,看是已存好數(shù)</p><p><b>  JNZ K2</b></p><p><b>  LOOP L2</b></p><p><b>  RET</b></p><p>  IN1 ENDP</

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論