《計算機硬件技術(shù)基礎(chǔ)》實驗答案程序.._第1頁
《計算機硬件技術(shù)基礎(chǔ)》實驗答案程序.._第2頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 1 頁 共 31 頁實驗一:簡單程序設(shè)計實驗(1)編寫一個32位無符號數(shù)除法的程序, 要求將存放在NUM1中的32位無符號數(shù)與存放 在NUM2中的16位無符號數(shù)相除,結(jié)果存放在NUM3和NUM4中。程序流程圖略。參考源程序:DATASEGMENTNUM1 DD 2A8B7654HNUM2 DW 5ABCHNUM3 DW ?NUM4 DW ?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATA; 數(shù)據(jù)段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1MOV DX, WORD PTR NUM1+2DIV

2、NUM2MOV NUM3,AXMOV NUM4,DXMOV AH,4CH;正常返回 DOS 系統(tǒng)INT 21HCODEENDSEND START(2)編寫一個拆字程序。要求將存放在ARY單元的2位十六進(jìn)制數(shù)X1X2拆為X1和X2兩部分,并以0X1和0X2的形式分別存入ARY+1和ARY+2單元中。程序流程圖略。參考源程序:DATASEGMENTARY DB 2AH,?,?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARY;取 ARY 的偏移地址MOV AL,SI;取 16 進(jìn)

3、制數(shù)至 AL第 2 頁 共 31 頁;取 16 進(jìn)制數(shù)的高四位,即 X1;存 0X1; 取 16 進(jìn)制數(shù)的低四位,即 X2;存 0X2CODEMOV BL,ALAND AL,0F0HSHR AL,4MOV SI+1,ALMOV AL,BLAND AL,0FHMOV SI+2,ALMOV AH,4CHINT 21HENDSEND START第 3 頁 共 31 頁實驗二:分支程序設(shè)計實驗(1)編寫一個字符比較程序,比較3個無符號字節(jié)數(shù)A,B,C的大小,并根據(jù)比較結(jié)果對變量K賦值:如果3個數(shù)不相等,則K=0;如果3個數(shù)中有兩個相等,則K=1;如果3個數(shù)都相等,則K=2。 程序流程圖略。參考源程序:

4、DATA SEGMENTA DB 20HB DB 20HC DB 20HK DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,BJNE COMP2CMP AL,CJNE K1JMP K2COMP2: MOV BL,BCMP BL,CJE K1CMP AL,CJE K1K0:MOV K,0JMP EXITK1:MOV K,1JMP EXITK2:MOV K,2EXIT:MOV AH,4CH;定義待比較數(shù) A、B、C,比較結(jié)果 K;對 A、B 進(jìn)行比較,不相等則轉(zhuǎn)到 C0

5、MP2;相等則比較 A 、 C;A、C 不相等則 K=1 ;A 、 C 相等則 K=2;對 B、C 進(jìn)行比較,相等則 K=1;對 A、C 進(jìn)行比較,相等則 K=1第 4 頁 共 31 頁第 5 頁 共 31 頁INT 21HCODE ENDSEND START(2)編寫一個能實現(xiàn)下列表達(dá)式的程序:? A + BA WBN =?設(shè)A,B,C為小于128的正整數(shù)。?A - B +C A B程序流程圖略。參考源程序:DATA SEGMENTA DB 22H;定義 A 、B、 C、NB DB 10HC DB 01HN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, D

6、S:DATASTART: MOV AX,DATAMOV DS,AXMOV AL, ACMP AL, BJG CALCUL;A 小于或等于 B 則 N=A+BADD AL,BJMP EXITCALCUL: SUB AL, BADC AL, CEXIT: MOV N, ALMOV AH,4CHINT 21HCODE ENDSEND START第 5 頁 共 31 頁實驗三 循環(huán)程序設(shè)計實驗(1)將字符串STRN(以 “$結(jié)”尾)中的每一個字符均加上偶校驗位,并統(tǒng)計有多少個字符 因含有奇數(shù)個“1而加上了校驗位。統(tǒng)計結(jié)果存于N單元中。程序流程圖略。參考源程序:DATA SEGMENT STRN DB

7、What$COUNT EQU $-STRN NDB ?BUF DB COUNT DUP(?)DATA ENDS;任意定義一個字串,以“$”結(jié)尾CODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AX, DATAMOV ES, AXLEA SI, STRNLEA DI, BUF MOVCX, COUNTMOV AL, 0LP1: MOV BL, SIAND BL, BL JPNEXTINC ALOR BL, 80HNEXT: MOV DI, BLINC SIINC DILOOP LP1;逐個取字符進(jìn)行判斷;自己和

8、自己做與運算;根據(jù)PF標(biāo)志位的變化進(jìn)行跳轉(zhuǎn)MOV N, ALMOV AH, 4CHINT 21HCODE ENDSEND START2)在FIRST開始的一片連續(xù)的數(shù)據(jù)區(qū)中存放著100個數(shù)據(jù),編寫一個程序,統(tǒng)計第1第 5 頁 共 31 頁第 8 頁 共 31 頁個數(shù)據(jù) 0之前的數(shù)據(jù)個數(shù)。 程序流程圖略。 參考源程 序:DATA SEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H;任取9個數(shù)做演示COUNT EQU $-FIRSTNUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART

9、: MOV AX,DATAMOV DS,AXMOV DL, 0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1:MOV AL, BXCMP AL, 00HJNE NEXTJMP EXITNEXT: INC DLINC BXLOOP LP1EXIT: MOV NUM, DLMOV AH, 4CH INT 21HCODE ENDSEND START;計數(shù)值初始為0;每次取一個數(shù),與0比較;找到0則退出;沒找到0則計數(shù)值加1第 9 頁 共 31 頁實驗四:子程序設(shè)計實驗將BUF開始的10個單元中兩位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,并在屏幕上顯示出來。 要求碼型 轉(zhuǎn)換通過子程序HE

10、XASC實現(xiàn),參數(shù)傳送采用寄存器傳送方式。程序流程圖略。 參考源程序: (1)實現(xiàn)方法一:遠(yuǎn)過程調(diào)用DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF DATA ENDS;定義任意長度的一段BUFSTACK1 SEGMENT STACKDB 100 DUP(?);設(shè)置足夠深度的棧區(qū)STACK1 ENDSCODESTART:SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 MOV AX,DATAMOV DS,AXAGAIN:MOV SI,OFFSET BUFMOV

11、 CX,COUNTMOV AL,SIMOV BL,AL;逐個取數(shù)SHR AL,4AND AL,0FHCALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21H;先對高字節(jié)部分轉(zhuǎn)換(寄存器;調(diào)用子程序;顯示高字節(jié)部分對應(yīng)的字符AL傳參)MOV AL,BLAND AL,0FHCALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21H;再對低字節(jié)部分轉(zhuǎn)換(寄存器;調(diào)用子程序;顯示低字節(jié)部分對應(yīng)的字符AL傳參)MOV DL,20HMOV AH,02HINT 21H;顯示空格第 10 頁 共 31 頁INC SILOOP AGAINMOV

12、AH,4CHINT 21HCODE ENDSCODEB SEGMENTASSUME CS:CODEBHEXASC PROC FAR CMPAL,09H JA HEXATOFADD AL,30H JMPENDHEXHEXATOF:ADD AL,37HENDHEX: RETHEXASC ENDPCODEB ENDS END START;判斷是不是數(shù)字;是字母則轉(zhuǎn)到HEXATOF;是數(shù)字則對應(yīng)到數(shù)字的ASCII碼;是字母則對應(yīng)到字母的ASCII碼(2)實現(xiàn)方法二:近過程調(diào)用DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCO

13、UNT EQU $-BUF;定義任意長度的一段BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?)STACK1 ENDS;設(shè)置足夠深度的棧區(qū)CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,COUNTAGAIN: MOV AL,SI;逐個取數(shù)MOV BL,ALSHR AL,4AND AL,0FHCALL HEXASC;先對高字節(jié)部分做轉(zhuǎn)換第 11 頁 共 31 頁LOOP AGAINMOV AH,4CHINT 21H

14、HEXASC PROC NEARCMP AL,09HJA HEXATOFADD AL,30HJMP ENDHEX HEXATOF:ADD AL,37H ENDHEX: RET HEXASC ENDPCODE ENDSEND STARTMOV DL,ALMOV AH,02HINT 21H;顯示高字節(jié)部分對應(yīng)的字符MOVAL,BLAND AL,0FHCALL HEXASC;再對低字節(jié)部分做轉(zhuǎn)換MOV DL,ALMOV AH,02HINT 21H;顯示低字節(jié)部分對應(yīng)的字符MOV DL,20H;顯示空格MOV AH,02HINT 21HINC SI;繼續(xù)循環(huán)或退出第 12 頁 共 31 頁實驗五:DO

15、S 中斷調(diào)用實驗(1)如果從鍵盤上依次輸入的是一個數(shù)字和一個字母,則輸出“RIGHT”標(biāo)記后結(jié)束程序,否則輸出標(biāo)記 “ERROR”后轉(zhuǎn)向原出錯處重做。試編程實現(xiàn)該功能。程序流程圖略。參考源程序:DATA SEGMENTMSG DB 0AH,0DH,RIGHT,0AH,0DH,$WRN DB 0AH,0DH,ERROR,0AH,0DH,$ DATA ENDSEXIT:MOV DX,OFFSET MSGMOV AH,09H;顯示 “RIGHT并退出INT 21HMOV AH,4CHCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS

16、,AXAGAIN: MOV AH,01HINT 21HCMP AL,39HJA EMSGCMP AL,30HJB EMSGMOV AH,01HINT 21HCMP AL,AJB EMSGCMP AL,ZJB EXITCMP AL,aJB EMSGCMP AL,zJB EXITEMSG: LEA DX,WRNMOV AH,09HINT 21HJMP AGAIN;等待用戶輸入1個字符并顯示;判斷輸入是否是數(shù)字,不是則報錯;等待用戶輸入1個字符并顯示;判斷輸入是否是大寫字母, 不是則繼續(xù);判斷是不是小寫字母;不是字母則報錯,是字母則轉(zhuǎn)到EXIT第 13 頁 共 31 頁INT 21HCODEENDS

17、END START(2)編寫一程序分類統(tǒng)計字符個數(shù):即接收鍵入的一串字符(字符個數(shù)不超過5 0個 , 該 字符串用回車作為結(jié)束) ,并按數(shù)字、字母和其它字符分類計數(shù),然后將結(jié)果存入digit、letter和other 3個存儲單元中,并顯示結(jié)果。程序流程圖略。參考源程序:DATASEGMENTMSG1 DB 0AH, 0DH, Number of digit:,20H,$MSG2 DB 0AH, 0DH, Number of letters:, 20H,$MSG3 DB 0AH, 0DH, Number of other characters:, 20H, $BUF DB 50DB 0DB 5

18、0 DUP(?);設(shè)置足夠深的棧區(qū)DIGIT DB ?LETTER DB ?OTHER DB ?DATAENDSSTACK1SEGMENT STACKDB 100 DUP(?)STACK1ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AXMOV AH,0AH;等待用戶輸入字符串并顯示MOV DX,OFFSET BUFINT 21HMOV SI, OFFSET BUFMOV CL,SI+1MOV CH,00HMOV AL,00HMOV AH,00HMOV BH,00HAGAIN:MOV BL,SI+2

19、CMP BL,30HJB OTH;ASCII碼小于30H則歸類為 “其它 ”CMP BL,3AH第 14 頁共 31 頁JB DIGCMP BL,41HJB OTHCMP BL,5BHJB LETCMP BL,61HJB OTHCMP BL,7BHJB LET;ASCII碼大于等于30H小于3AH則歸類為;ASCII碼大于等于3AH小于41H則歸類為;ASCII碼大于等于41H小于5BH則歸類為;ASCII碼大于等于5BH小于61H則歸類為;ASCII碼大于等于61H小于7BH則歸類為“數(shù)字”“其它”“字母”“其它”字母”O(jiān)TH:INC AL;“其它”計數(shù)器加1JMP ENDLPDIG:INC

20、 AH; “數(shù)字”計數(shù)器加1JMP ENDLPLET:INC BH; “字母”計數(shù)器加1ENDLP:INC SI;繼續(xù)循環(huán)LOOP AGAINMOV DIGIT, AH;統(tǒng)計各類個數(shù)MOV LETTER, BHMOV OTHER, ALMOV DX, OFFSET MSG1MOV AH,09HINT 21H顯示數(shù)字”有多少個MOV AL, DIGITCALL DISPMOV DX, OFFSET MSG2MOV AH,09HINT 21HMOV AL, LETTERCALL DISP顯示字母”有多少個MOV DX, OFFSET MSG3MOV AH,09HINT 21H顯示其它”有多少個MO

21、V AL, OTHERCALL DISPMOV AH,4CHINT 21HDISP PROC NEAR;顯示子程序第 15 頁 共 31 頁MOV AH,00H MOV DH,0AH DIV DHMOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H ADD CH,30H MOV DL, CHMOV AH, 02H INT 21HRET ENDPENDSEND STARTDISPCODE第 16 頁 共 31 頁實驗六:擴展定時器 / 計數(shù)器接口實驗(1)計數(shù)器0工作于方式3,編寫初始化程序,觀察其輸出OUT0信號的波形。修改計數(shù)初值,觀察OU

22、TO信號的變化情況。硬件連接方法:8254計數(shù)器0的CLKO端接規(guī)則的脈沖輸入(頻率自選),OUT0接示波器的 正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATA SEGMENTDB 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,20FH;寫入計數(shù)器 0 的控制字MOV AL,00010110BOUT DX,ALMOV DX,20CH;寫入計數(shù)器 0 的計數(shù)初值MOV AL,05HOUT DX,ALMOV AH,4CHINT 21HCODE ENDSEND S

23、TART(2)將計數(shù)器1和計數(shù)器0級聯(lián)起來,二者均工作于方式3,編寫初始化程序,觀察OUT1和OUT0信號的波形,說明二者的關(guān)系。修改計數(shù)初值,觀察OUTO和OUT1輸出波形的變化情況。硬件連接方法:8254計數(shù)器1的CLK1端接規(guī)則的脈沖輸入(頻率自選),0UT1接8254計數(shù) 器0的CLK0,計數(shù)器0的輸出OUT0接示波器正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATASEGMENTDB 100 DUP(?)DATAENDSCODESEGMENT第 17 頁 共 31 頁ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,

24、20FHMOV AL,00010110B OUTDX,ALMOV DX,20CHMOV AL,05H OUT DX,ALMOV DX,20FHMOV AL,01010110B OUTDX,ALMOV DX,20DHMOV AL,02H OUT DX,ALMOV AH,4CHINT 21HCODE ENDSEND START;寫入計數(shù)器 0 的控制字;寫入計數(shù)器 0 的計數(shù)初值;寫入計數(shù)器 1 的控制字;寫入計數(shù)器 1 的計數(shù)初值第 18 頁 共 31 頁實驗七:并行輸入/輸出接口 8255A 簡單編程實驗(1)利用8255A的B口輸出控制兩組發(fā)光二級管L1,L3,L5,L7和L2,L4,L6,

25、L8亮滅交替變 化。分析:按照題目要求,當(dāng)8255A的B口輸出為01010101B(55H)時,發(fā)光二極管L1,L3,L5,L7會被點亮,當(dāng)8255A的B口輸出為10101010B (0AAH)時,發(fā)光二極管L2,L4,L6,L8會被點 亮。因此,通過延時改變8255A的 由于LED隨時出于準(zhǔn)備好的狀態(tài), 用,無需考慮。因此, 硬件連接方法:8255A的B口PB0PB7分別連接L1L8。 程序流程圖略。參考源程序:.486ASSUME CS:CODE, DS:DATA, SS:STACK1MOV AX,DATAMOV DS,AXMOV DX, PORT_CTRMOV AL, 10000000B

26、OUT DX, ALMOV BL, 01010101BMOV AL, BLB口輸出, 即可實現(xiàn)兩組發(fā)光二極管的亮滅交替變化。因此8255A的B口可工作于方式0輸出, 其它端口未使8255A的方式控制字為:10000000B(80H)。DATASEGMENTPORTA DW 208HPORTB DW 209HPORTC DW 20AHPORT_CTR DW 20BH;8255A 端口 A 地址;8255A 端口 B 地址;8255A 端口 C 地址;8255A 控制端口地址DATAENDSSTACK1 SEGMENT STACKSTACK1DB 100 DUP(?)ENDSCODESEGMENT

27、START:;8255A 初始化MOV DX, PORTBMOV AL, 00HOUT DX, AL;8255A 端口 B 清零,LED 初始化(全滅)LP0:第 19 頁 共 31 頁OUT DX, ALCALL DELAYNOT ALMOV BL, ALMOV AH, 01H;調(diào)用 BIOS 的 16H 功能判斷鍵盤是否有輸入INT 16HJNZ EXITJMP LP0EXIT:MOV AH, 4CHINT 21HDELAY PROC NEAR;延時子程序(可通過修改 NOP 指令數(shù)量改變延時時間)MOV ECX, 0FFFFFFFHLP2:NOPLOOPD LP2RETDELAY END

28、PCODE ENDSEND START(2)利用8255A的A口讀入8個開關(guān)K1K8的狀態(tài),當(dāng)只有K1合上時,L1L8顯示00000001B;當(dāng)只有K1和K2合上時,L1L8顯示00000010B;當(dāng)只有K1,K2和K3合上 時,L1L8顯示00000011B;當(dāng)只有K1,K2,K3和K4合上時,L1L8顯示00000100B; 直到所有開關(guān)合上時,L1L8顯示00001000B,并結(jié)束程序的運行。發(fā)光二極管的狀態(tài)通過8255A的B口進(jìn)行控制。分析:按照題目要求,可以通過查詢的方式讀取8255A的B口狀態(tài),并根據(jù)查詢的結(jié)果給A口送出相應(yīng)數(shù)據(jù),A口工作在方式0的輸入狀態(tài),B口工作在方式0輸出狀態(tài)

29、,C口不需要 考慮,所以8255A的方式控制字為:10010000B)硬件連接方法:(1)8255A的A口PA0PA7對應(yīng)連接K1K8;(2)8255A的B口PB0PB7對應(yīng)連接L1L8;源代碼:DATA SEGMENTLIST DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFHDATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1第 20 頁共 31 頁START: MOV AX, DATA第 21 頁 共 31 頁

30、MOV DS, AXMOV DX, 20BHMOV AL, 10010000BOUT DX, AL;8255A 初始化MOV DX, 209HMOV AL, 00HOUT DX, ALL0:MOV DX, 208HIN AL, DX;8255A 的 B 口清零,LED 初始化(全滅);讀 8255A 的 A 口,獲得開關(guān)狀態(tài)MOV BL, 00HMOV CX, 8MOV SI, OFFSET LISTL1:INC BLCMP AL, SIJZ FINDINC SI LOOP L1JMP L0FIND:MOV AL, BL;當(dāng)前開關(guān)狀態(tài)為表中所列狀態(tài)之一MOV DX, 209H;顯示 LED 狀

31、態(tài)OUT DX, ALCMP AL, 08HJNZ L0MOV AH, 4CHINT 21HCODE ENDSEND START第 22 頁 共 31 頁實驗八:并行輸入/輸出接口 8255A 綜合應(yīng)用實驗(1)利用8254計數(shù)器0、計數(shù)器1和8255A的B口實現(xiàn)對發(fā)光二極管的定時控制,讓8個發(fā)光二極管每隔1s從左到右依次點亮。(要求計數(shù)器1的時鐘脈沖頻率為250kHz)。分析:根據(jù)題目要求,需要利用8254進(jìn)行定時1s控制,定時到后,改變8255A的B口輸出。 可以利用中斷的方式實現(xiàn),8254定時到時向CPU申請中斷,CPU相應(yīng)中斷后在中斷程序中改變8255A的B口輸出。由于題目要求8254

32、的輸入脈沖頻率為250kHz,所以需要級聯(lián)計數(shù)器1和 計數(shù)器0實現(xiàn)1s定時(參考程序中利用計數(shù)器1進(jìn)行20ms定時,計數(shù)器0進(jìn)行50次計數(shù),計數(shù)次數(shù)到時由OUT0向CPU申請中斷)。8255A的B口控制LED,可工作在方式0輸出,A口未使用,為了選通實 驗板上的中斷輸入C口的PC7須輸出低電平,因此C口的高四位工作在方式0輸出。綜合上述 要求,8254和8255A的初始化參數(shù)為:8254計數(shù)器1的計數(shù)初值為:N=20ms/4 pS=5000D;方式控制字為:01110100B (74H)8254計數(shù)器0的計數(shù)初值為:N=50D;方式控制字為:00010100B (14H)8255A的方式控制字

33、:10000000B(80H);C口按位置位/復(fù)位控制字:00001110B(0EH)(使PC7復(fù)位,允許8254的OUT0中斷到達(dá)系統(tǒng)8259的IRQ3端)此外,利用中斷方式實現(xiàn)題目要求的功能還需要設(shè)置系統(tǒng)8259芯片的中斷屏蔽字和系統(tǒng)存儲器中的中斷向量表(修改中斷類型號為0BH的中斷向量)。硬件連接方法:(1)250kHz脈沖輸出接8254的CLK1,OUT1接CLK0,OUT0接IRQ;(2)8255A的B口PB0PB7對應(yīng)連接L1L8。程序流程圖略。參考源程序:DATASEGMENTPORT0 DW 20CH;8254 計數(shù)器 0 端口地址PORT1 DW 20DH;8254 計數(shù)器

34、1 端口地址PORT2 DW 20EH;8254 計數(shù)器 2 端口地址PORT3 DW 20FH;8254 控制寄存器端口地址PORTA DW 208H;8255A 的 A 口端口地址PORTB DW 209H;8255A 的 B 口端口地址PORTC DW 20AH;8255A 的 C 口端口地址PORT_CTR DW 20BH;8255A 的控制寄存器端口地址DATAENDSSTACK1SEGMENT STACKDB 100 DUP(0)STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1第 23 頁 共 31 頁

35、START: MOV AX, DATAMOV DS, AXMOV ES, AXMOV AL, 80HMOV DX, PORT_CTROUT DX, ALMOV AL, 0EHOUT DX, ALMOV AL, 00HMOV DX, PORTBOUT DX, ALMOV AX, 350BHINT 21HPUSH ESPUSH BXMOV AX, SEG INTPROCMOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21HAND AL, 0F7HOUT 21H, ALSTIMOV DX, PORT3MOV AL, 14HOUT

36、DX, ALMOV DX, PORT0MOV AL, 50DOUT DX, ALMOV DX, PORT3MOV AL, 74HOUT DX, ALMOV DX, PORT1MOV AX, 5000DOUT DX, ALMOV AL, AHOUT DX, AL;將程序要求的中斷向量寫入;設(shè)置 8259 的 IMR 寄存器,允許 IRQ3 中斷;開中斷,CPU 可以響應(yīng)外部可屏蔽中斷;8254 計數(shù)器 0 初始化;計數(shù)器 0 寫入計數(shù)初值 50D;8254 計數(shù)器 1 初始化;計數(shù)器 1 寫入計數(shù)初值 5000D;8255初始化,B 口方式 0輸岀,C口高 4位輸岀;PC7清零, 允許 8254

37、中斷到IRQ3第 24 頁 共 31 頁MOV BH, 80HMOV AL, BHMOV DX, PORTBOUT DX, AL;BH 存放當(dāng)前 8255A 的 B 口輸岀;8255A 的 B 口輸岀WAIT0:NOPNOPNOPMOV AH, 01H;判斷鍵盤上是否有鍵按下,若有則結(jié)束程序INT 16HJNZ EXITJMP WAIT0EXIT:POP DX;恢復(fù)中斷向量表中的原有 0BH 號中斷向量POP DSMOV AX, 250BHINT 21HMOV AH, 4CHINT 21HINTPROC PROC NEARMOV AL, BHROR AL,1MOV BH, ALMOV DX,

38、PORTBOUT DX, AL(2)8255A的A口與8個開關(guān)相連,工作于方式1下,要求:利用當(dāng)前的開關(guān)狀態(tài)通過B口控制L1L8的亮或滅。A口的/STBA選通信號由按鍵K發(fā)出,每按一次K鍵,讀入當(dāng)前開關(guān)狀態(tài)。 分析:8255A的B口用來控制LED的亮滅,可工作在方式0下。根據(jù)題意,可以通過查詢方式 不斷讀取8255A的C口狀態(tài)確定K鍵是否按下,也可以利用中斷方式,當(dāng)K鍵按下時,由INTRA(PC3)向CPU申請中斷。當(dāng)判斷K鍵按下后,讀取8255A的A口狀態(tài),并通過B口顯示到LED上。利用查詢方式實現(xiàn)時,僅需要給定方式選擇 控制字;利用中斷方式實現(xiàn)時,除控制字外還需設(shè)定INTEA為1,允許IN

39、TRA申請中斷。因此,8255A的方式控制字為:10110000B(0B0H);使INTEA(PC4)置1,其控制字為00001001B(09H)。注意:利用中斷方式實現(xiàn)時還需要置PC7為0,使INTRA能到達(dá)8259的IRQ3;向 8255A 的 B 口寫岀數(shù)據(jù),點亮對應(yīng) LEDMOV AL, 20HOUT 20H, ALIRET INTPROC ENDPCODE ENDSEND START;向 8259 發(fā)岀中斷結(jié)束命令第 25 頁 共 31 頁硬件連接與參考源程序:(1)利用查詢方式實現(xiàn)硬件連接:1) 8255A的A口PA0PA7與K1K8對應(yīng)相連;2) 8255A的B口PB0PB7與L

40、1L8對應(yīng)相連;3)按鍵K接8255A的C口PC4。參考源程序:CODESTART:SEGMENTASSUME CS:CODEMOV AL, 0B0HMOV DX, 20BHOUT DX, AL; 8255A 初始化,方式控制字 10110000BMOV DX, 209HMOV AL, 00HOUT DX, AL;LED 初始化AGAIN:MOV AH, 01HINT 16HJNZ EXIT;判斷計算機鍵盤上是否有鍵按下,若有結(jié)束程序MOV DX, 20AHIN AL, DX;讀入 8255A 的 C 口狀態(tài)TEST AL, 00010000BJNZ AGAIN;判斷 PC4=1 ? (K 鍵

41、是否按下 )MOV DX, 208HIN AL, DX;讀入 8255A 的 A 口狀態(tài)MOV DX, 209HOUT DX, ALJMP AGAIN;將 A 口狀態(tài)送 8255A 的 B 口EXIT:MOV AH, 4CHINT 21HCODEENDSEND START2)利用中斷方式實現(xiàn)硬件連接:1) 8255A的A口PA0PA7與K1K8對應(yīng)相連;2) 8255A的B口PB0PB7與L1L8對應(yīng)相連;3)按鍵K接8255A的C口PC4;4) 8255A的CDPC3(INTRA)接IRQ。參考源程序:DATA SEGMENTPORTA DW 208HPORTB DW 209HPORTC D

42、W 20AHPORT_CTR DW 20BHDATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(O)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START: MOV AX, DATAMOV DS, AXMOV ES, AXMOV DX, PORT_CTRMOV AL, 0B0HOUT DX, ALMOV AL, 09HOUT DX, ALMOV AL, 0EHOUT DX, ALMOV AX, 350BHINT 21HPUSH ESPUSH BXMOV AX, SEG INTPR

43、OCMOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21HAND AL, 0F7HOUT 21H, ALSTIWAIT0:MOV AH, 01HINT 16HJZ WAIT0;8255A 的 A 口地址;8255A 的 B 口地址;8255A 的 C 口地址;8255A 的控制口地址;寫入 8255A 方式控制字 OBOH;寫入 C 口按位置位控制字,PC4 置“ 1 ”;寫入 C 口按位復(fù)位控制字,PC7 置“ 0”,開 IRQ;保存系統(tǒng)原有中斷號為 0BH 的中斷向量到堆棧;向 0BH 號中斷寫入新的中斷向量;允許 82

44、59 的 IRQ3 中斷;允許 CPU 響應(yīng)可屏蔽中斷;判斷是否有鍵按下,若有則結(jié)束程序,若無則等待;恢復(fù)系統(tǒng)中斷向量表POP DX第 23 頁共 31 頁第 28 頁 共 31 頁POP DSMOV AX, 250BHINT 21HMOV AH, 4CHINT 21HINTPROC PROC NEARMOV DX, PORTA IN AL, DXMOV DX, PORTB OUT DX, ALMOV AL, 20HOUT 20H, ALIRETINTPROC ENDPCODE ENDSEND START;讀入 8255A 端口 A 的狀態(tài)(開關(guān)狀態(tài));從8255A 的 B 口輸岀開關(guān)狀態(tài),由

45、對應(yīng)的;給 8259 發(fā)中斷結(jié)束指令LED 顯示第 29 頁 共 31 頁實驗九:LED 顯示器接口實驗(1)編制一個從左到右循環(huán)顯示字符“8的程序,要求每個字位的停留時間約為1s,當(dāng)從標(biāo)準(zhǔn)鍵盤上按下任意鍵時結(jié)束程序。分析: 根據(jù)題意要求, 實驗板上的6位8段數(shù)碼管的段選信號均相同,為字符“8”的段碼(80H)。為了實現(xiàn)從左到右循環(huán)顯示且每個字位停留約1s的功能,只需要每隔一秒給位選信號賦值,選通/斷開相應(yīng)的位即可。當(dāng)循環(huán)顯示到最右端時,延時1s再從最左端開始顯示。為此,在該題中我們利用8255A的A口作為6位LED顯示器的段選口 (地址208H),8255A的B口作為6位LED顯示器的位選口

46、(地址209H)。8255A的控制字為:10000000B(80H)硬件連接:(1)8255A的A口PA0PA7分別對應(yīng)連接LED顯示器的段選輸入ah.(2)8255A的B口PB0PB5分別對應(yīng)連接LED1LED6顯示器的位選輸入。程序流程圖略。參考源程序:.486STACK1 SEGMENT STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK1START: MOV AL, 80H; 8255A 工作方式初始化, A 口方式 0 輸岀,B 口方式 0 輸岀MOV DX, 20BHOUT DX, ALMOV AL,

47、80H;8255A 的 A 口輸岀字符“ 8”的段碼 80HMOV DX, 208HOUT DX, AL;LED 顯示器位選信號存放在 BL 中,20H 表示最左邊一位 ;將 LED 位選信號輸岀到 8255A 的 B 口; 調(diào)研軟件延時程序;判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有則結(jié)束程序;LED 位選信號右移一位,選中下一位 LEDJMP L1;當(dāng)循環(huán)到最右邊一位 LED 時,重新填充 BL 值,開始新一輪循環(huán)L1:MOV BL, 20HL2:MOV AL, BLMOV DX, 209HOUT DX, ALCALL DELAYMOV AH, 01HINT 16HJNZ EXITSHR BL, 1

48、JNZ L2EXIT:MOV DX, 208H第 30 頁 共 31 頁MOV AL, 0FFHOUT DX, AL MOV DX, 209H MOV AL, 00H OUT DX, AL;關(guān)閉所有 LEDMOV AH, 4CHINT 21HDELAY PROC NEARMOV ECX, 0FFFFFFFHLP: LOOPD LPRET DELAY ENDP CODE ENDSEND START(2)完成多位LED顯示器的顯示, 即設(shè)計一個顯示字符串1234.56的程序, 當(dāng)標(biāo)準(zhǔn)鍵盤上有 任意鍵按下時結(jié)束程序?;舅枷耄?借助動態(tài)掃描、 分時顯示的辦法, 利用人眼視覺的滯留效應(yīng), 實現(xiàn)人眼看上

49、去的 各位 “同時”顯示。 分析:利用實驗操作面板上引出的8255A的分別A口和B口作為6位8段LED顯示器的位選口和段選口,從段選口依次輸出待顯示字符的段碼,并選通相應(yīng)的位實現(xiàn)對多位LED顯示器的刷新。8255A的A口和B口均工作在方式0的輸出方式,方式控制字為:1000000B(80H)。硬件連接:(1)8255A的A口PA0PA5對應(yīng)連接LED1LED6的位選;(2)8255A的B口PB0PB7對應(yīng)連接段選ah;程序流程圖略。參考源程序:DATASEGMENTSEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H;定義 0F 的段碼存儲區(qū)DB 99H, 92H, 82H, 0F

50、8HDB 80H, 98H, 88H, 83HDB 0C6H, 0A1H, 86H, 8EHDISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H;定義顯示緩沖區(qū)DATAENDSSTACK1SEGMENT STACKDB 100 DUP(0)STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1第 31 頁 共 31 頁START: MOV AX, DATA MOVDS, AX MOV AL,80H MOV DX,20BH OUT DX, ALL1: MOV AH, 20HLEA SI, DISPMEMLEA BX

51、, SEGTAB L2: MOVAL, SIXLATCMP AH, 04H JNENEXT AND AL, 7FH NEXT:MOV DX, 209HOUT DX, AL MOVDX, 208H MOV AL,AH OUT DX, ALMOV CX, 4000LP2: LOOP LP2 PUSH AXMOV AH, 01H INT16H JNZ EXIT POPAX INC SI SHR AH,1 JNZ L2 JMP L1;8255A 初始化, A 口輸出, B 口輸出;預(yù)置位選信號;SI 指向顯示緩沖區(qū);BX 指向段碼存儲區(qū); 第 4 位 LED 顯示小數(shù)點; 輸出段碼; 輸出位選信號;

52、延時; 判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有鍵按下則結(jié)束程序; 修改顯示緩沖區(qū)指針; 修改位選信號EXIT:MOV DX, 208HMOV AL, 00HOUT DX, ALMOV DX, 209HMOV AL, 0FFHOUT DX, AL; 關(guān)閉所有 LEDMOV AH, 4CHINT 21HCODE ENDSEND START第 32 頁 共 31 頁實驗十:鍵盤接口實驗編制1個用鍵盤控制模擬電動機轉(zhuǎn)動的程序,即用非編碼鍵盤上的A和B兩個鍵作轉(zhuǎn)、停控制,并在數(shù)碼顯示器上顯示F表示電機轉(zhuǎn)動,計算機屏幕上顯示笑臉符表示電機停,按回車鍵結(jié) 束程序執(zhí)行(笑臉符的ASCII碼為02H)。分析:根據(jù)題目

53、的要求,需要不斷掃描4總非編碼鍵盤,判斷鍵盤上A或B鍵(控制停轉(zhuǎn),在 屏幕上顯示笑臉)是否按下。若按下A鍵則在LED上顯示F,表示電機轉(zhuǎn)動;若按下B鍵則在計 算機屏幕(CRT顯示器)上顯示笑臉,表示電機停轉(zhuǎn)??梢杂?255A的C口作為非編碼鍵盤的行掃描信號,同時作為LED的位選信號,B口作為非編碼鍵盤的列掃描信號,A口作為LED的段選信號。8255A的C口工作在輸出方式,B口工作在輸入方式,A口工作在輸出方式,8255A的方式控制字為:10000010B(82H)硬件連接:(1)8255A的A口的PA0PA7接段選信號af;(2)8255A的B口的PB0PB3接非編碼鍵盤的列掃描端(J9)(3)8255A的C口的PC0PC5接LED的位選信號(同時也是非編碼鍵盤的行掃描線) 程序流程圖略。參考源程序:DATA SEGMENTDISPTAB

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論