《計算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序(共31頁)_第1頁
《計算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序(共31頁)_第2頁
《計算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序(共31頁)_第3頁
《計算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序(共31頁)_第4頁
《計算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序(共31頁)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)一:簡單程序設(shè)計實(shí)驗(yàn)(1)編寫一個 32 位無符號數(shù)除法的程序,要求將存放在 NUM1 中的 32 位無符號數(shù)與存放 在 NUM2 中的 16 位無符號數(shù)相除,結(jié)果存放在 NUM3 和 NUM4 中。程序流程圖略。 參考源程序:DATASEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ?NUM4 DW ? DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATA;數(shù)據(jù)段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1MOV DX, W

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

3、SI,OFFSET ARY;取ARY的偏移地址MOV AL,SI;取16進(jìn)制數(shù)至AL專心-專注-專業(yè)MOV BL,ALAND AL,0F0H;取16進(jìn)制數(shù)的高四位,即X1SHR AL,4MOV SI+1,AL;存0X1MOV AL,BLAND AL,0FH;取16進(jìn)制數(shù)的低四位,即X2MOV SI+2,AL;存0X2MOV AH,4CH INT 21HCODEENDSEND START實(shí)驗(yàn)二:分支程序設(shè)計實(shí)驗(yàn)(1)編寫一個字符比較程序,比較 3 個無符號字節(jié)數(shù) A,B,C 的大小,并根據(jù)比較結(jié)果 對變量 K 賦值:如果 3 個數(shù)不相等,則 K=0;如果 3 個數(shù)中有兩個相等,則 K=1; 如果

4、 3 個數(shù)都相等,則 K=2。程序流程圖略。 參考源程序:DATASEGMENT;定義待比較數(shù)A、B、C,比較結(jié)果KA DB 20H B DB 20H C DB 20H K DB ?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX MOV AL,ACMP AL,B;對A、B進(jìn)行比較,不相等則轉(zhuǎn)到COMP2JNE COMP2;相等則比較A、CCMP AL,CJNE K1;A、C不相等則K=1JMP K2;A、C相等則K=2COMP2: MOV BL,B CMP BL,CJE K1;對B、C進(jìn)行比較,相等則K

5、=1CMP AL,CJE K1;對A、C進(jìn)行比較,相等則K=1K0:MOV K,0JMP EXIT K1:MOV K,1JMP EXIT K2:MOV K,2EXIT:MOV AH,4CHINT 21HCODEENDSEND START(2)編寫一個能實(shí)現(xiàn)下列表達(dá)式的程序:N = A + BA B設(shè) A,B,C 為小于 128 的正整數(shù)。 A B + C程序流程圖略。 參考源程序:DATASEGMENTA > BA DB 22H;定義 A、B、C、N B DB 10HC DB 01H N DB ?DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA STA

6、RT: MOV AX,DATAMOV DS,AXMOV AL, A CMP AL, BJG CALCUL;A 小于或等于 B 則 N=A+BADD AL,B JMP EXITCALCUL: SUB AL, B ADC AL, CEXIT:MOV N, AL MOV AH,4CH INT 21HCODEENDSEND START實(shí)驗(yàn)三 循環(huán)程序設(shè)計實(shí)驗(yàn)(1)將字符串STRN(以“$”結(jié)尾)中的每一個字符均加上偶校驗(yàn)位,并統(tǒng)計有多少個字符 因含有奇數(shù)個“1”而加上了校驗(yàn)位。統(tǒng)計結(jié)果存于N單元中。程序流程圖略。 參考源程序:DATASEGMENTSTRN DB 'What$';任意定

7、義一個字串,以“$”結(jié)尾COUNT EQU $-STRN N DB ?BUF DB COUNT DUP(?) DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AX MOV AX, DATA MOV ES, AXLEA SI, STRN LEA DI, BUFMOV CX, COUNT MOV AL, 0LP1:MOV BL, SI;逐個取字符進(jìn)行判斷AND BL, BL;自己和自己做與運(yùn)算JP NEXT;根據(jù) PF 標(biāo)志位的變化進(jìn)行跳轉(zhuǎn)INC ALORBL, 80H NEXT:MOV DI, BLINC

8、SI INC DI LOOP LP1MOV N, AL MOV AH, 4CHINT 21HCODEENDSEND START(2)在 FIRST 開始的一片連續(xù)的數(shù)據(jù)區(qū)中存放著 100 個數(shù)據(jù),編寫一個程序,統(tǒng)計第 1個數(shù)據(jù)0之前的數(shù)據(jù)個數(shù)。 程序流程圖略。 參考源程序:DATASEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H;任取 9 個數(shù)做演示COUNT EQU $-FIRST NUM DB ?DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DATAMOV DS,AXM

9、OV DL, 0;計數(shù)值初始為 0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1:MOV AL, BX;每次取一個數(shù),與 0 比較CMP AL, 00H JNE NEXTJMP EXIT;找到 0 則退出NEXT:INC DL;沒找到 0 則計數(shù)值加 1INC BX LOOP LP1EXIT:MOV NUM, DL MOV AH, 4CH INT 21HCODEENDSEND START實(shí)驗(yàn)四:子程序設(shè)計實(shí)驗(yàn)將BUF開始的10個單元中兩位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,并在屏幕上顯示出來。要求碼型 轉(zhuǎn)換通過子程序HEXASC實(shí)現(xiàn),參數(shù)傳送采用寄存器傳送方式。程序流程圖略。

10、 參考源程序: (1)實(shí)現(xiàn)方法一:遠(yuǎn)過程調(diào)用 DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF;定義任意長度的一段 BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?);設(shè)置足夠深度的棧區(qū)STACK1 ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AXMOV SI,OFFSET BUF MOV CX,COUNTAGAIN:MOV AL,SI;逐個取數(shù)MO

11、V BL,ALSHR AL,4AND AL,0FH;先對高字節(jié)部分轉(zhuǎn)換(寄存器 AL 傳參)CALL FAR PTR HEXASC;調(diào)用子程序MOV DL,ALMOV AH,02H;顯示高字節(jié)部分對應(yīng)的字符INT 21HMOV AL,BLAND AL,0FH;再對低字節(jié)部分轉(zhuǎn)換(寄存器 AL 傳參)CALL FAR PTR HEXASC;調(diào)用子程序MOV DL,ALMOV AH,02H;顯示低字節(jié)部分對應(yīng)的字符INT 21HMOV DL,20HMOV AH,02H;顯示空格INT 21HINC SILOOP AGAINMOV AH,4CH INT 21HCODEENDSCODEBSEGMENT

12、 ASSUME CS:CODEBHEXASCPROC FARCMP AL,09H;判斷是不是數(shù)字JA HEXATOF;是字母則轉(zhuǎn)到 HEXATOFADD AL,30H;是數(shù)字則對應(yīng)到數(shù)字的 ASCII 碼JMP ENDHEXHEXATOF:ADD AL,37H;是字母則對應(yīng)到字母的 ASCII 碼ENDHEX: RET HEXASC ENDP CODEBENDSEND START(2)實(shí)現(xiàn)方法二:近過程調(diào)用DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF;定義任意長度的一段 BUF DAT

13、A ENDSSTACK1 SEGMENT STACKDB 100 DUP(?);設(shè)置足夠深度的棧區(qū)STACK1 ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AXMOV SI,OFFSET BUF MOV CX,COUNTAGAIN:MOV AL,SI;逐個取數(shù)MOV BL,ALSHR AL,4AND AL,0FH;先對高字節(jié)部分做轉(zhuǎn)換CALL HEXASCMOV DL,AL;顯示高字節(jié)部分對應(yīng)的字符MOV AH,02H INT 21HMOV AL,BLAND AL,0FH;再對低字節(jié)部分做轉(zhuǎn)換C

14、ALL HEXASCMOV DL,AL;顯示低字節(jié)部分對應(yīng)的字符MOV AH,02H INT 21HMOV DL,20H;顯示空格MOV AH,02H INT 21HINC SI;繼續(xù)循環(huán)或退出LOOP AGAINMOV AH,4CH INT 21HHEXASCPROC NEAR CMP AL,09HJA HEXATOF ADD AL,30H JMP ENDHEXHEXATOF:ADD AL,37H ENDHEX: RETHEXASCENDPCODEENDSEND START實(shí)驗(yàn)五:DOS 中斷調(diào)用實(shí)驗(yàn)(1)如果從鍵盤上依次輸入的是一個數(shù)字和一個字母,則輸出“RIGHT”標(biāo)記后結(jié)束程序, 否則

15、輸出標(biāo)記“ERROR”后轉(zhuǎn)向原出錯處重做。試編程實(shí)現(xiàn)該功能。程序流程圖略。 參考源程序:DATASEGMENTMSG DB 0AH,0DH,'RIGHT',0AH,0DH,'$' WRN DB 0AH,0DH,'ERROR',0AH,0DH,'$'DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DATAMOV DS,AXAGAIN:MOV AH,01H;等待用戶輸入 1 個字符并顯示INT 21HCMP AL,39H JA EMSG CMP AL,30HJB EMSG

16、;判斷輸入是否是數(shù)字,不是則報錯MOV AH,01H;等待用戶輸入 1 個字符并顯示INT 21H CMP AL,'A' JB EMSGCMP AL,'Z';判斷輸入是否是大寫字母,不是則繼續(xù)JB EXIT;判斷是不是小寫字母CMP AL,'a' JB EMSG CMP AL,'z'JB EXIT;不是字母則報錯,是字母則轉(zhuǎn)到 EXITEMSG:LEA DX,WRN MOV AH,09H INT 21HJMP AGAINEXIT:MOV DX,OFFSET MSGMOV AH,09H;顯示“RIGHT”并退出INT 21HMOV

17、AH,4CHINT 21H CODEENDSEND START(2)編寫一程序分類統(tǒng)計字符個數(shù):即接收鍵入的一串字符(字符個數(shù)不超過50個,該字 符串用回車作為結(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 0

18、AH, 0DH, 'Number of other characters:', 20H, '$' BUF DB 50DB 0DB 50 DUP(?);設(shè)置足夠深的棧區(qū)DIGIT DB ? LETTER DB ? OTHER DB ?DATAENDSSTACK1SEGMENT STACK DB 100 DUP(?)STACK1ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AXMOV AH,0AH;等待用戶輸入字符串并顯示MOV DX,OFFSET BUF INT 21

19、HMOV SI, OFFSET BUF MOV CL,SI+1MOV CH,00H MOV AL,00H MOV AH,00H MOV BH,00HAGAIN:MOV BL,SI+2 CMP BL,30HJB OTH;ASCII 碼小于 30H 則歸類為“其它”CMP BL,3AHJB DIG;ASCII 碼大于等于 30H 小于 3AH 則歸類為“數(shù)字” CMP BL,41HJB OTH;ASCII 碼大于等于 3AH 小于 41H 則歸類為“其它” CMP BL,5BHJB LET;ASCII 碼大于等于 41H 小于 5BH 則歸類為“字母” CMP BL,61HJB OTH;ASCII

20、 碼大于等于 5BH 小于 61H 則歸類為“其它” CMP BL,7BHJB LET;ASCII 碼大于等于 61H 小于 7BH 則歸類為“字母”O(jiān)TH:INC AL;“其它”計數(shù)器加 1DIG:JMP ENDLP INC AH;“數(shù)字”計數(shù)器加 1LET:JMP ENDLP INC BH;“字母”計數(shù)器加 1ENDLP:INC SILOOP AGAIN;繼續(xù)循環(huán)MOV LETTER, BH MOV OTHER, ALMOV DX, OFFSET MSG1MOV AH,09H INT 21HMOV AL, DIGIT CALL DISP;顯示“數(shù)字”有多少個MOV DX, OFFSET M

21、SG2MOV AH,09H INT 21HMOV AL, LETTER CALL DISP;顯示“字母”有多少個MOV DX, OFFSET MSG3MOV AH,09H INT 21HMOV AL, OTHER CALL DISP;顯示“其它”有多少個MOV AH,4CH INT 21HDISPPROC NEAR;顯示子程序MOV DIGIT, AH;統(tǒng)計各類個數(shù)MOV AH,00H MOV DH,0AH DIV DHMOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21HADD CH,30H MOV DL, CH MOV AH, 02H IN

22、T 21HRET DISPENDPCODEENDSEND START實(shí)驗(yàn)六:擴(kuò)展定時器/計數(shù)器接口實(shí)驗(yàn)(1)計數(shù)器0工作于方式3,編寫初始化程序,觀察其輸出OUT0信號的波形。修改計數(shù)初 值,觀察OUT0信號的變化情況。 硬件連接方法:8254計數(shù)器0的CLK0端接規(guī)則的脈沖輸入(頻率自選),OUT0接示波器的 正極;示波器負(fù)極接地。程序流程圖略。 參考源程序:DATA SEGMENTDB 100 DUP(?) DATA ENDSCODESEGMENTASSUME CS:CODE, DS:DATA START: MOV AX,DATAMOV DS,AXMOV DX,20FH;寫入計數(shù)器0的控制

23、字MOV AL,B OUT DX,ALMOV DX,20CH;寫入計數(shù)器0的計數(shù)初值MOV AL,05H OUT DX,ALMOV AH,4CH INT 21HCODEENDSEND START(2)將計數(shù)器1和計數(shù)器0級聯(lián)起來,二者均工作于方式3,編寫初始化程序,觀察OUT1 和OUT0信號的波形,說明二者的關(guān)系。修改計數(shù)初值,觀察OUT0和OUT1輸出波形的變 化情況。 硬件連接方法:8254計數(shù)器1的CLK1端接規(guī)則的脈沖輸入(頻率自選),OUT1接8254計數(shù) 器0的CLK0,計數(shù)器0的輸出OUT0接示波器正極;示波器負(fù)極接地。程序流程圖略。 參考源程序:DATASEGMENT DB

24、100 DUP(?)DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV DX,20FHMOV AL,B;寫入計數(shù)器0的控制字OUT DX,ALMOV DX,20CH;寫入計數(shù)器0的計數(shù)初值MOV AL,05H OUT DX,ALMOV DX,20FHMOV AL,B;寫入計數(shù)器1的控制字OUT DX,ALMOV DX,20DH;寫入計數(shù)器1的計數(shù)初值MOV AL,02H OUT DX,ALMOV AH,4CH INT 21HCODEENDSEND START實(shí)驗(yàn)七:并行輸入/輸出接口 8255A 簡

25、單編程實(shí)驗(yàn)(1)利用 8255A 的 B 口輸出控制兩組發(fā)光二級管 L1,L3,L5,L7 和 L2,L4,L6,L8 亮滅交替變 化。分析:按照題目要求,當(dāng) 8255A 的 B 口輸出為 B(55H)時,發(fā)光二極管 L1,L3,L5,L7 會被點(diǎn)亮,當(dāng) 8255A 的 B 口輸出為 B (0AAH)時,發(fā)光二極管 L2,L4,L6,L8 會被點(diǎn) 亮。因此,通過延時改變 8255A 的 B 口輸出,即可實(shí)現(xiàn)兩組發(fā)光二極管的亮滅交替變化。 由于 LED 隨時出于準(zhǔn)備好的狀態(tài),因此 8255A 的 B 口可工作于方式 0 輸出,其它端口未使 用,無需考慮。因此,8255A 的方式控制字為:B(80

26、H)。硬件連接方法:8255A 的 B 口 PB0PB7 分別連接 L1L8。 程序流程圖略。參考源程序:.486DATASEGMENTPORTA DW 208H;8255A端口A地址 PORTB DW 209H;8255A端口B地址 PORTC DW 20AH;8255A端口C地址 PORT_CTR DW 20BH;8255A控制端口地址DATAENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1START: MOV AX,DATA MOV DS,AXMOV

27、 DX, PORT_CTR MOV AL, B;8255A初始化;控制字OUT DX, ALMOV DX, PORTB MOV AL, 00H OUT DX, AL;8255A端口B清零,LED初始化(全滅)LP0:MOV BL, B MOV AL, BLOUT DX, AL CALL DELAYNOT ALMOV BL, ALMOV AH, 01H;調(diào)用BIOS的16H功能判斷鍵盤是否有輸入INT 16H JNZ EXIT JMP LP0EXIT:MOV AH, 4CH INT 21HDELAYPROC NEAR;延時子程序(可通過修改NOP指令數(shù)量改變延時時間) MOV ECX, 0FFF

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

29、口送出相應(yīng)數(shù)據(jù),A 口工作在方式 0 的輸入狀態(tài),B 口工作在方式 0 輸出狀態(tài),C 口不需要 考慮,所以 8255A 的方式控制字為:B)硬件連接方法:(1)8255A 的 A 口 PA0PA7 對應(yīng)連接 K1K8;(2)8255A 的 B 口 PB0PB7 對應(yīng)連接 L1L8; 源代碼:DATASEGMENTLISTDB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFH DATAENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STAC

30、K1START: MOV AX, DATAMOV DS, AXMOV DX, 20BH;8255A初始化MOV AL, B OUT DX, ALMOV DX, 209H;8255A的B口清零,LED初始化(全滅) MOV AL, 00HOUT DX, ALL0:MOV DX, 208H;讀8255A的A口,獲得開關(guān)狀態(tài)IN AL, DXMOV BL, 00H MOV CX, 8MOV SI, OFFSET LIST L1:INC BLCMP AL, SI JZ FIND INC SILOOP L1JMP L0FIND:MOV AL, BL MOV DX, 209H;當(dāng)前開關(guān)狀態(tài)為表中所列狀態(tài)之

31、一;顯示LED狀態(tài)OUT DX, AL CMP AL, 08H JNZ L0MOV AH, 4CH INT 21HCODEENDSEND START實(shí)驗(yàn)八:并行輸入/輸出接口 8255A 綜合應(yīng)用實(shí)驗(yàn)(1)利用8254計數(shù)器0、計數(shù)器1和8255A的B口實(shí)現(xiàn)對發(fā)光二極管的定時控制,讓8個發(fā)光 二極管每隔1s從左到右依次點(diǎn)亮。(要求計數(shù)器1的時鐘脈沖頻率為250kHz)。分析: 根據(jù)題目要求,需要利用8254進(jìn)行定時1s控制,定時到后,改變8255A的B口輸出??梢岳弥袛嗟姆绞綄?shí)現(xiàn),8254定時到時向CPU申請中斷,CPU相應(yīng)中斷后在中斷程序中改變8255A的B口輸出。 由于題目要求8254的

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

33、置位/復(fù)位控制字:B (0EH)(使PC7復(fù)位,允許8254的OUT0中斷到達(dá)系統(tǒng)8259的IRQ3端)此外,利用中斷方式實(shí)現(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ù)器1端口地址PORT2 DW 20EH;8254計數(shù)器2端口地址PORT3 DW 20FH

34、;8254控制寄存器端口地址PORTA DW 208H;8255A的A口端口地址PORTB DW 209H;8255A的B口端口地址PORTC DW 20AH;8255A的C口端口地址DATAPORT_CTR DW 20BH ENDS;8255A的控制寄存器端口地址程序流程圖略。 參考源程序:STACK1 SEGMENT STACK DB 100 DUP(0)STACK1 ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START: MOV AX, DATA MOV DS, AX MOV ES, AXMOV AL, 80H;

35、8255初始化, B口方式0輸出,C口高4位輸出MOV DX, PORT_CTR OUT DX, ALMOV AL, 0EH;PC7清零,允許8254中斷到IRQ3OUT DX, ALMOV AL, 00H;發(fā)光二極管初始化(全滅) MOV DX, PORTBOUT DX, ALMOV AX, 350BH;保存系統(tǒng)原有0BH號中斷的中斷向量至堆棧INT 21H PUSH ES PUSH BXMOV AX, SEG INTPROC MOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BH;將程序要求的中斷向量寫入INT 21HIN AL, 21H;設(shè)置8259的

36、IMR寄存器,允許IRQ3中斷AND AL, 0F7H OUT 21H, ALSTI;開中斷,CPU可以響應(yīng)外部可屏蔽中斷MOV DX, PORT3;8254計數(shù)器0初始化MOV AL, 14H OUT DX, ALMOV DX, PORT0;計數(shù)器0寫入計數(shù)初值50DMOV AL, 50D OUT DX, ALMOV DX, PORT3;8254計數(shù)器1初始化MOV AL, 74H OUT DX, ALMOV DX, PORT1;計數(shù)器1寫入計數(shù)初值5000DMOV AX, 5000D OUT DX, AL MOV AL, AH OUT DX, ALMOV BH, 80H;BH存放當(dāng)前825

37、5A的B口輸出MOV AL, BHMOV DX, PORTB;8255A的B口輸出OUT DX, ALWAIT0:NOP NOP NOPMOV AH, 01H;判斷鍵盤上是否有鍵按下,若有則結(jié)束程序INT 16H JNZ EXIT JMP WAIT0EXIT:POP DX;恢復(fù)中斷向量表中的原有0BH號中斷向量POP DSMOV AX, 250BH INT 21HMOV AH, 4CH INT 21HINTPROC PROC NEAR MOV AL, BH ROR AL,1MOV BH, ALMOV DX, PORTB;向8255A的B口寫出數(shù)據(jù),點(diǎn)亮對應(yīng)LED OUT DX, ALMOV A

38、L, 20H;向8259發(fā)出中斷結(jié)束命令OUT 20H, AL IRETINTPROC ENDP CODEENDSEND START(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上。利用查

39、詢方式實(shí)現(xiàn)時,僅需要給定方式選擇 控制字;利用中斷方式實(shí)現(xiàn)時,除控制字外還需設(shè)定INTEA為1,允許INTRA申請中斷。因此,8255A的方式控制字為:B(0B0H);使 INTEA(PC4)置1,其控制字為B(09H)。注意:利用中斷方式實(shí)現(xiàn)時還需要置PC7為0,使INTRA能到達(dá)8259的IRQ3硬件連接與參考源程序:(1)利用查詢方式實(shí)現(xiàn) 硬件連接:1)8255A的A口PA0PA7與K1K8對應(yīng)相連;2)8255A的B口PB0PB7與L1L8對應(yīng)相連;3)按鍵K接8255A的C口PC4。 參考源程序:CODESEGMENT ASSUME CS:CODESTART: MOV AL, 0B0

40、H; 8255A初始化,方式控制字BMOV DX, 20BH OUT DX, ALMOV DX, 209H;LED初始化MOV AL, 00H OUT DX, ALAGAIN:MOV AH, 01H;判斷計算機(jī)鍵盤上是否有鍵按下,若有結(jié)束程序INT 16H JNZ EXITMOV DX, 20AH;讀入8255A的C口狀態(tài)IN AL, DXTEST AL, B;判斷PC4=1?(K鍵是否按下) JNZ AGAINMOV DX, 208H;讀入8255A的A口狀態(tài)IN AL, DXMOV DX, 209H;將A口狀態(tài)送8255A的B口OUT DX, AL JMP AGAINEXIT:MOV AH

41、, 4CH INT 21HCODEENDSEND START(2)利用中斷方式實(shí)現(xiàn) 硬件連接:1)8255A的A口PA0PA7與K1K8對應(yīng)相連;2)8255A的B口PB0PB7與L1L8對應(yīng)相連;3)按鍵K接8255A的C口PC4;4)8255A的C口PC3(INTRA)接IRQ。 參考源程序:DATASEGMENTPORTA DW 208H; 8255A的A口地址PORTB DW 209H; 8255A的B口地址PORTC DW 20AH; 8255A的C口地址DATAPORT_CTR DW 20BH ENDS; 8255A的控制口地址STACK1 SEGMENT STACKDB 100

42、DUP(0) STACK1 ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START: MOV AX, DATA MOV DS, AX MOV ES, AXMOV DX, PORT_CTR;寫入8255A方式控制字0B0H MOV AL, 0B0HOUT DX, ALMOV AL, 09H;寫入C口按位置位控制字,PC4置“1”O(jiān)UT DX, ALMOV AL, 0EH;寫入C口按位復(fù)位控制字,PC7置“0”,開IRQ OUT DX, ALMOV AX, 350BH;保存系統(tǒng)原有中斷號為0BH的中斷向量到堆棧INT 21H

43、PUSH ES PUSH BXMOV AX, SEG INTPROC;向0BH號中斷寫入新的中斷向量MOV DS, AXMOV DX, OFFSET INTPROC MOV AX, 250BHINT 21HIN AL, 21H;允許8259的IRQ3中斷AND AL, 0F7H OUT 21H, ALSTI;允許CPU響應(yīng)可屏蔽中斷WAIT0:MOV AH, 01H;判斷是否有鍵按下,若有則結(jié)束程序,若無則等待INT 16H JZ WAIT0POP DX;恢復(fù)系統(tǒng)中斷向量表POP DSMOV AX, 250BH INT 21HMOV AH, 4CH INT 21HINTPROC PROC NE

44、ARMOV DX, PORTA;讀入8255A端口A的狀態(tài)(開關(guān)狀態(tài))IN AL, DXMOV DX, PORTB;從8255A的B口輸出開關(guān)狀態(tài),由對應(yīng)的LED顯示OUT DX, ALMOV AL, 20H;給8259發(fā)中斷結(jié)束指令OUT 20H, AL IRETINTPROC ENDPCODEENDSEND START實(shí)驗(yàn)九:LED 顯示器接口實(shí)驗(yàn)(1)編制一個從左到右循環(huán)顯示字符“8”的程序,要求每個字位的停留時間約為1s,當(dāng)從標(biāo) 準(zhǔn)鍵盤上按下任意鍵時結(jié)束程序。分析: 根據(jù)題意要求,實(shí)驗(yàn)板上的6位8段數(shù)碼管的段選信號均相同,為字符“8”的段碼(80H)。為了實(shí)現(xiàn)從左到右循環(huán)顯示且每個字位

45、停留約1s的功能,只需要每隔一秒給位選信號賦值, 選通/斷開相應(yīng)的位即可。當(dāng)循環(huán)顯示到最右端時,延時1s再從最左端開始顯示。為此,在 該題中我們利用8255A的A口作為6位LED顯示器的段選口(地址208H),8255A的B口作為6 位LED顯示器的位選口(地址209H)。8255A的控制字為:B(80H)硬件連接:(1)8255A的A口PA0PA7分別對應(yīng)連接LED顯示器的段選輸入ah.(2)8255A的B口PB0PB5分別對應(yīng)連接LED1LED6顯示器的位選輸入。 程序流程圖略。參考源程序:.486STACK1 SEGMENT STACK DB 100 DUP(0)STACK1 ENDSC

46、ODESEGMENTASSUME CS:CODE, SS:STACK1START: MOV AL, 80H; 8255A工作方式初始化,A口方式0輸出,B口方式0輸出MOV DX, 20BH OUT DX, ALMOV AL, 80H;8255A的A口輸出字符“8”的段碼80H MOV DX, 208HOUT DX, ALL1:MOV BL, 20H;LED顯示器位選信號存放在BL中,20H表示最左邊一位L2:MOV AL, BL;將LED位選信號輸出到8255A的B口MOV DX, 209H OUT DX, ALCALL DELAY;調(diào)研軟件延時程序MOV AH, 01H;判斷標(biāo)準(zhǔn)鍵盤上是否

47、有鍵按下,若有則結(jié)束程序INT 16H JNZ EXITSHR BL, 1;LED位選信號右移一位,選中下一位LEDJNZ L2JMP L1;當(dāng)循環(huán)到最右邊一位LED時,重新填充BL值,開始新一輪循環(huán)EXIT:MOV DX, 208HMOV AL, 0FFH OUT DX, AL MOV DX, 209H MOV AL, 00HOUT DX, AL;關(guān)閉所有LEDMOV AH, 4CH INT 21HDELAYPROC NEARMOV ECX, 0FFFFFFFH LP:LOOPDLPRET DELAY ENDP CODEENDSEND START(2)完成多位LED顯示器的顯示,即設(shè)計一個顯

48、示字符串1234.56的程序,當(dāng)標(biāo)準(zhǔn)鍵盤上有 任意鍵按下時結(jié)束程序?;舅枷耄?借助動態(tài)掃描、分時顯示的辦法,利用人眼視覺的滯留效應(yīng),實(shí)現(xiàn)人眼看上去的各位“同時”顯示。 分析:利用實(shí)驗(yàn)操作面板上引出的8255A的分別A口和B口作為6位8段LED顯示器的位選口和 段選口,從段選口依次輸出待顯示字符的段碼,并選通相應(yīng)的位實(shí)現(xiàn)對多位LED顯示器的刷 新。8255A的A口和B口均工作在方式0的輸出方式,方式控制字為:B(80H)。 硬件連接:(1)8255A的A口PA0PA5對應(yīng)連接LED1LED6的位選;(2)8255A的B口PB0PB7對應(yīng)連接段選ah; 程序流程圖略。參考源程序:DATASEGM

49、ENTSEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H;定義0F的段碼存儲區(qū)DB 99H, 92H, 82H, 0F8H DB 80H, 98H, 88H, 83HDB 0C6H, 0A1H, 86H, 8EHDISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H;定義顯示緩沖區(qū)DATAENDSSTACK1 SEGMENT STACK DB 100 DUP(0)STACK1 ENDS CODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1START: MOV AX, DATA MOV DS, AXMOV AL, 80H

50、;8255A初始化,A口輸出,B口輸出MOV DX, 20BH OUT DX, ALL1:MOV AH, 20H;預(yù)置位選信號LEA SI, DISPMEM;SI指向顯示緩沖區(qū)LEA BX, SEGTAB;BX指向段碼存儲區(qū)L2:MOV AL, SI XLATCMP AH, 04H JNE NEXTAND AL, 7FH;第4位LED顯示小數(shù)點(diǎn)NEXT:MOV DX, 209H;輸出段碼OUT DX, ALMOV DX, 208H;輸出位選信號MOV AL, AH OUT DX, ALMOV CX, 4000;延時LP2:LOOP LP2PUSH AXMOV AH, 01H;判斷標(biāo)準(zhǔn)鍵盤上是否

51、有鍵按下,若有鍵按下則結(jié)束程序INT 16H JNZ EXIT POP AXINC SI;修改顯示緩沖區(qū)指針SHR AH, 1;修改位選信號JNZ L2JMP L1EXIT:MOV DX, 208H MOV AL, 00H OUT DX, AL MOV DX, 209H MOV AL, 0FFHOUT DX, AL;關(guān)閉所有LEDMOV AH, 4CH INT 21HCODEENDSEND START實(shí)驗(yàn)十:鍵盤接口實(shí)驗(yàn)編制1個用鍵盤控制模擬電動機(jī)轉(zhuǎn)動的程序,即用非編碼鍵盤上的A和B兩個鍵作轉(zhuǎn)、停控制, 并在數(shù)碼顯示器上顯示F表示電機(jī)轉(zhuǎn)動,計算機(jī)屏幕上顯示笑臉符表示電機(jī)停,按回車鍵結(jié) 束程序執(zhí)行(笑臉符的ASCII碼為02H)。分析: 根據(jù)題目的要求,需要不斷掃描4×4非編碼鍵盤,判斷鍵盤上A或B鍵(控制停轉(zhuǎn),在屏幕上顯示笑臉)是否按下。若按下A鍵則在LED上顯示F,表示電機(jī)轉(zhuǎn)動;若按下B鍵則在計 算機(jī)屏幕(CRT顯示器)上顯示笑臉,表示電機(jī)停轉(zhuǎn)。可以用8255A的C口作為非編碼鍵盤的行掃描信號,同時作為LED的位選信號,B口作為 非編碼鍵盤的列掃描信號,A口作為LED的段選信號。8255A的C口工作在輸出方式,B口工 作在輸入方式,A口工作在輸出方式,8255A的方式控制字為:B(82H) 硬件連接:(1

溫馨提示

  • 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

提交評論