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

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)一:簡單程序設(shè)計(jì)實(shí)驗(yàn)(1)編寫一個(gè) 32 位無符號(hào)數(shù)除法的程序,要求將存放在NUM1 中的 32 位無符號(hào)數(shù)與存放在 NUM2 中的 16 位無符號(hào)數(shù)相除,結(jié)果存放在程序流程圖略。參考源程序:DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE NUM3 和 NUM4 中。START: MOV AX,DATA ;數(shù)據(jù)段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD P

2、TR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回 DOS系統(tǒng) INT 21H CODE ENDS END START (2)編寫一個(gè)拆字程序。要求將存放在ARY 單元的 2 位十六進(jìn)制數(shù)X 1X 2 拆為 X 1 和 X 2 兩部分,并以0X 1 和 0X 2 的形式分別存入ARY+1 和 ARY+2 單元中。程序流程圖略。參考源程序:DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MO

3、V DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,SI ;取16進(jìn)制數(shù)至 ALMOV BL,AL AND AL,0F0H ;取16進(jìn)制數(shù)的高四位,即X1SHR AL,4 MOV SI+1,AL ;存0X 1MOV AL,BL AND AL,0FH ;取16進(jìn)制數(shù)的低四位,即X2MOV SI+2,AL ;存0X 2MOV AH,4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)二:分支程序設(shè)計(jì)實(shí)驗(yàn)(1)編寫一個(gè)字符比較程序,比較3 個(gè)無符號(hào)字節(jié)數(shù)A,B,C 的大小,并根據(jù)比較結(jié)果對(duì)變量 K 賦值:如果 3 個(gè)數(shù)不相等,則 K=0 ;如果

4、3 個(gè)數(shù)中有兩個(gè)相等,則 K=1;如果 3 個(gè)數(shù)都相等,則 K=2 。程序流程圖略。參考源程序:DATA SEGMENT ;定義待比較數(shù)A 、B、C,比較結(jié)果 KA DB 20H B DB 20H C DB 20H K DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,A CMP AL,B ;對(duì) A 、B進(jìn)行比較,不相等則轉(zhuǎn)到COMP2 JNE COMP2 ;相等則比較A 、CCMP AL,C JNE K1 ;A 、C不相等則 K=1 JMP K2 ;A 、C相等則 K=

5、2COMP2: MOV BL,B CMP BL,C JE K1 ;對(duì) B、 C進(jìn)行比較,相等則K=1 CMP AL,C K0: JE K1 ;對(duì) A 、C進(jìn)行比較,相等則K=1MOV K,0 JMP EXIT K1: MOV K,1 JMP EXIT K2: MOV K,2 EXIT: MOV AH,4CH INT 21H CODE ENDS END START (2)編寫一個(gè)能實(shí)現(xiàn)下列表達(dá)式的程序:? A + BN = ?A - B + CA B設(shè) A,B, C 為小于 128 的正整數(shù)。A B程序流程圖略。參考源程序:DATA SEGMENT;定義 A 、B、C、N A DB 22H B

6、DB 10H C DB 01H N DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL, A CMP AL, B JG CALCUL ;A 小于或等于B 則 N=A+B ADD AL,B JMP EXIT CALCUL: SUB AL, B ADC AL, C EXIT: MOV N, AL MOV AH,4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)三 循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)(1)將字符串 STRN (以 “$”結(jié)尾)中的每一個(gè)字符均加上偶校驗(yàn)位,并統(tǒng)計(jì)

7、有多少個(gè)字符 因含有奇數(shù)個(gè) “1”而加上了校驗(yàn)位。統(tǒng)計(jì)結(jié)果存于 N單元中。程序流程圖略。參考源程序:DATA SEGMENT ;任意定義一個(gè)字串,以“ $” 結(jié)尾STRN DB What$ COUNT EQU $-STRN N DB ? BUF DB COUNT DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, DATA MOV ES, AX LEA SI, STRN LEA DI, BUF MOV CX, COUNT MOV AL, 0 LP1: MOV B

8、L, SI ;逐個(gè)取字符進(jìn)行判斷AND BL, BL ;自己和自己做與運(yùn)算JP NEXT ;根據(jù) PF 標(biāo)志位的變化進(jìn)行跳轉(zhuǎn) INC AL OR BL, 80H NEXT: MOV DI, BL INC SI INC DI LOOP LP1 MOV N, AL MOV AH, 4CH INT 21H CODE ENDS END START (2)在 FIRST 開始的一片連續(xù)的數(shù)據(jù)區(qū)中存放著100 個(gè)數(shù)據(jù),編寫一個(gè)程序,統(tǒng)計(jì)第1個(gè)數(shù)據(jù) 0之前的數(shù)據(jù)個(gè)數(shù)。程序流程圖略。參考源程序:DATA SEGMENT DATA FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36

9、H,41H ;任取 9 個(gè)數(shù)做演示 COUNT EQU $-FIRST NUM DB ? ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL, 0 ;計(jì)數(shù)值初始為0 MOV CX,COUNT MOV BX, OFFSET FIRST LP1: MOV AL, BX ;每次取一個(gè)數(shù),與0 比較CMP AL, 00H JNE NEXT NEXT: JMP EXIT ;找到 0 則退出1INC DL ;沒找到 0 則計(jì)數(shù)值加INC BX LOOP LP1 EXIT: MOV NUM, DL MOV

10、 AH, 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)四:子程序設(shè)計(jì)實(shí)驗(yàn)將BUF 開始的 10個(gè)單元中兩位十六進(jìn)制數(shù)轉(zhuǎn)換成 ASCII 碼,并在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序 HEXASC 實(shí)現(xiàn),參數(shù)傳送采用寄存器傳送方式。程序流程圖略。參考源程序 : (1)實(shí)現(xiàn)方法一:遠(yuǎn)過程調(diào)用DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定義任意長度的一段BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;設(shè)置足

11、夠深度的棧區(qū)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV CX,COUNT AGAIN: MOV AL,SI ;逐個(gè)取數(shù)MOV BL,AL SHR AL,4 AND AL,0FH ;先對(duì)高字節(jié)部分轉(zhuǎn)換(寄存器AL 傳參)CALL FAR PTR HEXASC ;調(diào)用子程序MOV DL,AL MOV AH,02H ;顯示高字節(jié)部分對(duì)應(yīng)的字符INT 21H MOV AL,BL AND AL,0FH ;再對(duì)低字節(jié)部分轉(zhuǎn)換(寄存器A

12、L 傳參)CALL FAR PTR HEXASC ;調(diào)用子程序MOV DL,AL MOV AH,02H ;顯示低字節(jié)部分對(duì)應(yīng)的字符INT 21H MOV DL,20H MOV AH,02H ;顯示空格INT 21H INC SI LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS CODEB SEGMENT ASSUME CS:CODEB HEXASC PROC FAR ;判斷是不是數(shù)字CMP AL,09H JA HEXATOF ;是字母則轉(zhuǎn)到HEXATOFADD AL,30H ;是數(shù)字則對(duì)應(yīng)到數(shù)字的ASCII 碼JMP ENDHEX HEXATOF:ADD AL,

13、37H ;是字母則對(duì)應(yīng)到字母的ASCII 碼ENDHEX: RET HEXASC ENDP CODEB ENDS END START (2)實(shí)現(xiàn)方法二:近過程調(diào)用DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定義任意長度的一段BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;設(shè)置足夠深度的棧區(qū) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV

14、AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV CX,COUNT AGAIN: MOV AL,SI ;逐個(gè)取數(shù)MOV BL,AL SHR AL,4 AND AL,0FH ;先對(duì)高字節(jié)部分做轉(zhuǎn)換 CALL HEXASC MOV DL,AL ;顯示高字節(jié)部分對(duì)應(yīng)的字符 MOV AH,02H INT 21H MOV AL,BL AND AL,0FH ;再對(duì)低字節(jié)部分做轉(zhuǎn)換 CALL HEXASC MOV DL,AL ;顯示低字節(jié)部分對(duì)應(yīng)的字符 MOV AH,02H INT 21H MOV DL,20H ;顯示空格MOV AH,02H INT 21H INC SI ;繼

15、續(xù)循環(huán)或退出LOOP AGAIN MOV AH,4CH INT 21H HEXASC PROC NEAR CMP AL,09H JA HEXATOF ADD AL,30H JMP ENDHEX HEXATOF:ADD AL,37H ENDHEX: RET HEXASC ENDP CODE ENDS END START 實(shí)驗(yàn)五:DOS 中斷調(diào)用實(shí)驗(yàn)(1)如果從鍵盤上依次輸入的是一個(gè)數(shù)字和一個(gè)字母,則輸出“RIGHT”標(biāo)記后結(jié)束程序,否則輸出標(biāo)記 “ ERROR ” 后轉(zhuǎn)向原出錯(cuò)處重做。試編程實(shí)現(xiàn)該功能。程序流程圖略。參考源程序 : DATA SEGMENT MSG DB 0AH,0DH,RIGH

16、T,0AH,0DH,$ WRN DB 0AH,0DH,ERROR,0AH,0DH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX AGAIN: MOV AH,01H ;等待用戶輸入1 個(gè)字符并顯示INT 21H CMP AL,39H JA EMSG CMP AL,30H JB EMSG ;判斷輸入是否是數(shù)字,不是則報(bào)錯(cuò)MOV AH,01H ;等待用戶輸入 1 個(gè)字符并顯示INT 21H CMP AL,A JB EMSG CMP AL,Z ;判斷輸入是否是大寫字母,不是則繼續(xù)JB EXIT

17、 ;判斷是不是小寫字母CMP AL,a JB EMSG CMP AL,z EMSG: JB EXIT ;不是字母則報(bào)錯(cuò),是字母則轉(zhuǎn)到EXIT LEA DX,WRN MOV AH,09H INT 21H JMP AGAIN EXIT: MOV DX,OFFSET MSG ;顯示 “RIGHT”并退出MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START (2)編寫一程序分類統(tǒng)計(jì)字符個(gè)數(shù):即接收鍵入的一串字符(字符個(gè)數(shù)不超過 50個(gè),該字 符串用回車作為結(jié)束) ,并按數(shù)字、字母和其它字符分類計(jì)數(shù),然后將結(jié)果存入 digit、letter

18、和other 3個(gè)存儲(chǔ)單元中,并顯示結(jié)果。程序流程圖略。參考源程序 : SEGMENT DATA MSG1 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 50 DB 0 DB 50 DUP(?) ;設(shè)置足夠深的棧區(qū) DIGIT DB ? LETTER DB ? OTHER DB ? DATA ENDS STACK1 SEGMENT STACK DB 100 DU

19、P(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV AH,0AH ;等待用戶輸入字符串并顯示MOV DX,OFFSET BUF INT 21H MOV SI, OFFSET BUF MOV CL,SI+1 MOV CH,00H MOV AL,00H MOV AH,00H MOV BH,00H AGAIN: MOV BL,SI+2 CMP BL,30H JB OTH ;ASCII 碼小于 30H 則歸類為 “其它 ”CMP BL,3AH JB DIG ;AS

20、CII 碼大于等于30H 小于 3AH 則歸類為 “ 數(shù)字 ” CMP BL,41H JB OTH ; ASCII 碼大于等于3AH 小于 41H 則歸類為 “其它 ” CMP BL,5BH JB LET ;ASCII 碼大于等于41H 小于 5BH 則歸類為 “字母 ” CMP BL,61H JB OTH ; ASCII 碼大于等于5BH 小于 61H 則歸類為 “其它 ” CMP BL,7BH OTH:JB LET ;ASCII 碼大于等于61H 小于 7BH 則歸類為 “ 字母 ”INC AL;“其它 ”計(jì)數(shù)器加 1JMP ENDLP DIG:INC AH;“數(shù)字 ” 計(jì)數(shù)器加 1LET

21、:JMP ENDLP ;“ 字母 ”計(jì)數(shù)器加 1INC BHENDLP: INC SI ;繼續(xù)循環(huán)LOOP AGAIN MOV DIGIT, AH ;統(tǒng)計(jì)各類個(gè)數(shù)MOV LETTER, BH MOV OTHER, ALMOV DX, OFFSET MSG1 MOV AH,09H INT 21H MOV AL, DIGIT CALL DISPMOV DX, OFFSET MSG2 MOV AH,09H INT 21H MOV AL, LETTER CALL DISPMOV DX, OFFSET MSG3 MOV AH,09H INT 21H MOV AL, OTHER CALL DISPMOV

22、AH,4CH INT 21H;顯示 “數(shù)字 ” 有多少個(gè);顯示 “字母 ” 有多少個(gè);顯示 “其它 ” 有多少個(gè)DISPPROC NEAR;顯示子程序MOV AH,00H MOV DH,0AH DIV DH MOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H ADD CH,30H MOV DL, CH MOV AH, 02H INT 21H RET DISP ENDP CODE ENDS END START 實(shí)驗(yàn)六:擴(kuò)展定時(shí)器 / 計(jì)數(shù)器接口實(shí)驗(yàn)(1)計(jì)數(shù)器 0工作于方式 3,編寫初始化程序,觀察其輸出OUT0 信號(hào)的波形。修改計(jì)數(shù)初值,觀

23、察 OUT0 信號(hào)的變化情況。硬件連接方法:8254計(jì)數(shù)器 0的CLK0 端接規(guī)則的脈沖輸 入(頻率自選),OUT0接示波器的 正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATA SEGMENT DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,20FH ;寫入計(jì)數(shù)器 0的控制字MOV AL,00010110B OUT DX,AL MOV DX,20CH ;寫入計(jì)數(shù)器 0的計(jì)數(shù)初值MOV AL,05H OUT DX,AL MOV AH,4CH I

24、NT 21H CODE ENDS END START (2)將計(jì)數(shù)器 1和計(jì)數(shù)器 0級(jí)聯(lián)起來,二者均工作于方式3,編寫初始化程序,觀察OUT1 和OUT0 信號(hào)的波形,說明二者的關(guān)系。修改計(jì)數(shù)初值,觀察OUT0 和 OUT1 輸出波形的變化情況。 硬件連接方法:8254計(jì)數(shù)器 1的CLK1 端接規(guī)則的脈沖輸入(頻率自選),OUT1 接8254計(jì)數(shù) 器0的CLK0 ,計(jì)數(shù)器 0的輸出 OUT0 接示波器正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATA SEGMENT DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA S

25、TART: MOV AX,DATA MOV DS,AX MOV DX,20FH MOV AL,00010110B ;寫入計(jì)數(shù)器 0的控制字 OUT DX,AL MOV DX,20CH ;寫入計(jì)數(shù)器 0的計(jì)數(shù)初值 MOV AL,05H OUT DX,AL MOV DX,20FH MOV AL,01010110B ;寫入計(jì)數(shù)器 1的控制字 OUT DX,AL MOV DX,20DH ;寫入計(jì)數(shù)器 1的計(jì)數(shù)初值 MOV AL,02H OUT DX,AL MOV AH,4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)七:并行輸入 / 輸出接口 8255A 簡單編程實(shí)驗(yàn)(1)利用 8

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

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

28、TART: MOV AX,DATA MOV DS,AX MOV DX, PORT_CTR ;8255A 初始化MOV AL, 10000000B ;控制字OUT DX, ALMOV DX, PORTB MOV AL, 00H OUT DX, AL;8255A 端口 B清零, LED 初始化 (全滅 )MOV BL, 01010101B LP0: MOV AL, BL OUT DX, AL CALL DELAYNOT AL MOV BL, AL MOV AH, 01H ;調(diào)用 BIOS 的 16H功能判斷鍵盤是否有輸入INT 16H JNZ EXIT JMP LP0 EXIT: MOV AH,

29、4CH INT 21H DELAY PROC NEAR ;延時(shí)子程序 (可通過修改 NOP 指令數(shù)量改變延時(shí)時(shí)間) MOV ECX, 0FFFFFFFH LP2: NOP LOOPD LP2 RET DELAY ENDP CODE ENDS END START (2)利用 8255A 的 A 口讀入 8 個(gè)開關(guān) K1K8 的狀態(tài),當(dāng)只有 K1 合上時(shí), L1L8 顯示00000001B;當(dāng)只有 K1 和 K2 合上時(shí), L1L8 顯示 00000010B;當(dāng)只有 K1,K2 和 K3 合上時(shí), L1L8 顯示 00000011B;當(dāng)只有K1,K2,K3 和 K4 合上時(shí), L1L8 顯示 00

30、000100B ; 直到所有開關(guān)合上時(shí),L1L8 顯示00001000B,并結(jié)束程序的運(yùn)行。發(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), C 口不需要考慮,所以 8255A 的方式控制字為:10010000B )硬件連接方法:(1)8255A 的 A 口 PA0PA7 對(duì)應(yīng)連接 K1K8 ;(2)8255A 的 B 口 PB0PB7 對(duì)應(yīng)連接 L1L8 ;源代碼:DATA SEGMENT LIST DB 0

31、1H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFH DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK1 START: MOV AX, DATA MOV DS, AX MOV DX, 20BH ;8255A 初始化 MOV AL, 10010000B OUT DX, AL MOV DX, 209H MOV AL, 00H OUT DX, AL ;8255A 的B口清零, LED 初始化 (全滅 ) L0: MOV

32、DX, 208H ;讀8255A 的A口,獲得開關(guān)狀態(tài)IN AL, DX MOV BL, 00H MOV CX, 8 MOV SI, OFFSET LIST L1: INC BL CMP AL, SI JZ FIND INC SI LOOP L1 JMP L0FIND:MOV AL, BL ;當(dāng)前開關(guān)狀態(tài)為表中所列狀態(tài)之一MOV DX, 209H;顯示 LED 狀態(tài)OUT DX, AL CMP AL, 08H JNZ L0MOV AH, 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)八:并行輸入 / 輸出接口 8255A 綜合應(yīng)用實(shí)驗(yàn)(1)利用 8254計(jì)數(shù)器 0、計(jì)數(shù)器

33、 1和8255A的B口實(shí)現(xiàn)對(duì)發(fā)光二極管的定時(shí)控制,讓 8個(gè)發(fā)光二極管每隔 1s從左到右依次點(diǎn)亮。(要求計(jì)數(shù)器 1的時(shí)鐘脈沖頻率為 250kHz )。分析: 根據(jù)題目要求,需要利用 8254進(jìn)行定時(shí) 1s控制,定時(shí)到后,改變 8255A 的B口輸出??梢岳弥袛嗟姆绞綄?shí)現(xiàn),8254定時(shí)到時(shí)向 CPU申請(qǐng)中斷, CPU相應(yīng)中斷后在中斷程序中改變8255A 的B口輸出。 由于題目要求 8254的輸入脈沖頻率為 250kHz ,所以需要級(jí)聯(lián)計(jì)數(shù)器 1和計(jì)數(shù)器 0實(shí)現(xiàn) 1s 定時(shí)(參考程序中利用計(jì)數(shù)器 1進(jìn)行 20ms定時(shí),計(jì)數(shù)器 0進(jìn)行 50次計(jì)數(shù),計(jì)數(shù)次數(shù)到時(shí)由 OUT0 向CPU申請(qǐng)中斷)。825

34、5A 的B口控制 LED ,可工作在方式 0輸出, A口未使用,為了選通實(shí)驗(yàn)板上的中斷輸入 C口的 PC7須輸出低電平,因此 C口的高四位工作在方式 0輸出。綜合上述要求, 8254和8255A 的初始化參數(shù)為:8254計(jì)數(shù)器 1的計(jì)數(shù)初值為:N=20ms/4 s=5000D ;方式控制字為:01110100B (74H)8254計(jì)數(shù)器 0的計(jì)數(shù)初值為:N=50D ;方式控制字為:00010100B (14H)8255A 的方式控制字:10000000B ( 80H ); C口按位置位 /復(fù)位控制字:00001110B (0EH)( 使PC7復(fù)位,允許 8254的OUT0 中斷到達(dá)系統(tǒng) 825

35、9的IRQ3 端) 此外,利用中斷方式實(shí)現(xiàn)題目要求的功能還需要設(shè)置系統(tǒng)8259芯片的中斷屏蔽字和系統(tǒng)存儲(chǔ)器中的中斷向量表(修改中斷類型號(hào)為 0BH 的中斷向量)。硬件連接方法:(1)250kHz 脈沖輸出接 8254的CLK1 ,OUT1 接CLK0 ,OUT0 接IRQ ;(2)8255A 的B口PB0PB7 對(duì)應(yīng)連接 L1L8 。程序流程圖略。參考源程序:DATASEGMENT;8254計(jì)數(shù)器 0端口地址PORT0 DW 20CHPORT1 DW 20DH;8254計(jì)數(shù)器 1端口地址PORT2 DW 20EH;8254計(jì)數(shù)器 2端口地址PORT3 DW 20FH;8254控制寄存器端口地址

36、PORTA DW 208H;8255A 的A 口端口地址PORTB DW 209H;8255A 的B口端口地址PORTC DW 20AH;8255A 的C口端口地址DATAPORT_CTR DW 20BH ;8255A 的控制寄存器端口地址ENDSSTACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1 START: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AL, 80H ; 8255初始化 , B口方式 0

37、輸出, C口高 4位輸出MOV DX, PORT_CTR OUT DX, AL MOV AL, 0EH ;PC7清零,允許 8254中斷到 IRQ3 OUT DX, AL MOV AL, 00H ;發(fā)光二極管初始化(全滅 ) MOV DX, PORTB OUT DX, AL MOV AX, 350BH ;保存系統(tǒng)原有0BH 號(hào)中斷的中斷向量至堆棧INT 21H PUSH ES PUSH BX MOV AX, SEG INTPROC MOV DS, AX MOV DX, OFFSET INTPROC MOV AX, 250BH ;將程序要求的中斷向量寫入 INT 21H IN AL, 21H ;

38、設(shè)置 8259的IMR 寄存器,允許IRQ3 中斷AND AL, 0F7H OUT 21H, AL STI ;開中斷, CPU可以響應(yīng)外部可屏蔽中斷MOV DX, PORT3 ;8254計(jì)數(shù)器 0初始化MOV AL, 14H OUT DX, AL MOV DX, PORT0 ;計(jì)數(shù)器 0寫入計(jì)數(shù)初值50D MOV AL, 50D OUT DX, AL MOV DX, PORT3 ;8254計(jì)數(shù)器 1初始化 MOV AL, 74H OUT DX, AL MOV DX, PORT1 ;計(jì)數(shù)器 1寫入計(jì)數(shù)初值5000D MOV AX, 5000D OUT DX, AL MOV AL, AH OUT

39、DX, AL MOV BH, 80H ;BH 存放當(dāng)前 8255A 的B口輸出 MOV AL, BH MOV DX, PORTB ;8255A 的B口輸出 OUT DX, AL WAIT0: NOP NOP NOP MOV AH, 01H ;判斷鍵盤上是否有鍵按下,若有則結(jié)束程序 INT 16H JNZ EXIT JMP WAIT0 EXIT: POP DX ;恢復(fù)中斷向量表中的原有0BH 號(hào)中斷向量POP DS MOV AX, 250BH INT 21H MOV AH, 4CH INT 21H INTPROC PROC NEAR MOV AL, BH ROR AL,1 MOV BH, AL

40、MOV DX, PORTB ;向8255A 的B口寫出數(shù)據(jù),點(diǎn)亮對(duì)應(yīng)LED OUT DX, AL MOV AL, 20H ;向8259發(fā)出中斷結(jié)束命令OUT 20H, AL IRET INTPROC ENDP CODE ENDS END START (2)8255A的A口與 8個(gè)開關(guān)相連,工作于方式1下,要求:利用當(dāng)前的開關(guān)狀態(tài)通過B口控制L1L8 的亮或滅。 A口的 /STB A選通信號(hào)由按鍵 分析:K發(fā)出,每按一次 K鍵,讀入當(dāng)前開關(guān)狀態(tài)。8255A 的B口用來控制 LED 的亮滅,可工作在方式 0下。 根據(jù)題意,可以通過查詢方式不斷讀取 8255A 的C口狀態(tài)確定 K 鍵是否按下,也可以

41、利用中斷方式,當(dāng) K鍵按下時(shí),由 INTRA (PC3)向 CPU申請(qǐng)中斷。當(dāng)判斷 K鍵按下后,讀取8255A 的 A口狀態(tài),并通過 B口顯示到 LED 上。利用查詢方式實(shí)現(xiàn)時(shí),僅需要給定方式選擇控制字;利用中斷方式實(shí)現(xiàn)時(shí),除控制字外還需設(shè)定INTEA 為1,允許 INTRA 申請(qǐng)中斷。因此, 8255A 的方式控制字為:10110000B(0B0H) ;使 INTEA(PC4) 置 1,其控制字為00001001B (09H )。 注意:利用中斷方式實(shí)現(xiàn)時(shí)還需要置 的IRQ3硬件連接與參考源程序:(1)利用查詢方式實(shí)現(xiàn)硬件連接:1)8255A 的A口 PA0PA7 與K1K8 對(duì)應(yīng)相連;2)

42、8255A 的B口 PB0PB7與L1L8 對(duì)應(yīng)相連;3)按鍵 K接 8255A 的C口PC4。參考源程序:CODE SEGMENT ASSUME CS:CODE PC7為0,使 INTRA 能到達(dá) 8259START: MOV AL, 0B0H ; 8255A 初始化,方式控制字10110000B MOV DX, 20BH OUT DX, AL MOV DX, 209H ;LED 初始化MOV AL, 00H OUT DX, AL AGAIN: MOV AH, 01H ;判斷計(jì)算機(jī)鍵盤上是否有鍵按下,若有結(jié)束程序INT 16H JNZ EXIT MOV DX, 20AH ;讀入 8255A

43、的C口狀態(tài)IN AL, DX TEST AL, 00010000B JNZ AGAIN ;判斷 PC4=1?(K鍵是否按下 ) MOV DX, 208H ;讀入 8255A 的A 口狀態(tài)IN AL, DX EXIT: MOV DX, 209H ;將A 口狀態(tài)送 8255A 的B口 OUT DX, AL JMP AGAIN MOV AH, 4CH INT 21H CODE ENDS END START (2)利用中斷方式實(shí)現(xiàn)硬件連接:1)8255A 的A口 PA0PA7 與K1K8 對(duì)應(yīng)相連;2)8255A 的B口 PB0PB7與L1L8 對(duì)應(yīng)相連;3)按鍵 K接 8255A 的C口PC4;4)

44、8255A 的C口 PC3( INTRA )接 IRQ 。參考源程序:DATASEGMENT; 8255A 的A 口地址PORTA DW 208HDATAPORTB DW 209H; 8255A 的B口地址PORTC DW 20AH; 8255A 的C口地址PORT_CTR DW 20BH ; 8255A 的控制口地址ENDSSTACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1 START: MOV AX, DATA MOV DS, AX M

45、OV ES, AX MOV DX, PORT_CTR MOV AL, 0B0H OUT DX, AL ;寫入 8255A 方式控制字 0B0H MOV AL, 09H ;寫入 C口按位置位控制字,PC4置“1”O(jiān)UT DX, AL MOV AL, 0EH ;寫入 C口按位復(fù)位控制字,PC7置“0”,開IRQ OUT DX, AL MOV AX, 350BH ;保存系統(tǒng)原有中斷號(hào)為0BH 的中斷向量到堆棧INT 21H PUSH ES PUSH BX MOV AX, SEG INTPROC MOV DS, AX ;向0BH 號(hào)中斷寫入新的中斷向量MOV DX, OFFSET INTPROC MO

46、V AX, 250BH INT 21H IN AL, 21H ;允許 8259的IRQ3 中斷 AND AL, 0F7H OUT 21H, AL WAIT0: STI ;允許 CPU響應(yīng)可屏蔽中斷MOV AH, 01H ;判斷是否有鍵按下,若有則結(jié)束程序,若無則等待INT 16H JZ WAIT0 POP DX ;恢復(fù)系統(tǒng)中斷向量表POP DS MOV AX, 250BH INT 21H MOV AH, 4CH INT 21H INTPROC PROC NEAR MOV DX, PORTA IN AL, DX ;讀入 8255A 端口 A 的狀態(tài)(開關(guān)狀態(tài))MOV DX, PORTB ;從82

47、55A 的B口輸出開關(guān)狀態(tài),由對(duì)應(yīng)的LED 顯示OUT DX, AL MOV AL, 20H ;給8259發(fā)中斷結(jié)束指令OUT 20H, AL IRET INTPROC ENDP CODE ENDS END START 實(shí)驗(yàn)九:LED 顯示器接口實(shí)驗(yàn)(1)編制一個(gè)從左到右循環(huán)顯示字符“8”的程序, 要求每個(gè)字位的停留時(shí)間約為1s,當(dāng)從標(biāo)準(zhǔn)鍵盤上按下任意鍵時(shí)結(jié)束程序。分析: 根據(jù)題意要求, 實(shí)驗(yàn)板上的 6位8段數(shù)碼管的段選信號(hào)均相同,為字符“ 8” 的段碼(80H)。為了實(shí)現(xiàn)從左到右循環(huán)顯示且每個(gè)字位停留約1s的功能,只需要每隔一秒給位選信號(hào)賦值,選通 /斷開相應(yīng)的位即可。當(dāng)循環(huán)顯示到最右端時(shí),

48、延時(shí) 1s再從最左端開始顯示。為此,在該題中我們利用 8255A 的A 口作為 6位LED 顯示器的段選口(地址 208H),8255A 的 B口作為 6 位LED 顯示器的位選口(地址 硬件連接:209H)。 8255A 的控制字為: 10000000B ( 80H)(1)8255A 的A口PA0PA7 分別對(duì)應(yīng)連接 LED 顯示器的段選輸入 ah.(2)8255A 的B口PB0PB5 分別對(duì)應(yīng)連接 LED1LED6 顯示器的位選輸入。程序流程圖略。參考源程序:.486 STACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT A

49、SSUME CS:CODE, SS:STACK1 START: MOV AL, 80H ; 8255A 工作方式初始化,A口方式 0輸出, B口方式 0輸出MOV DX, 20BH OUT DX, AL MOV AL, 80H ;8255A 的A 口輸出字符“8” 的段碼 80H MOV DX, 208H OUT DX, AL L1: MOV BL, 20H ;LED 顯示器位選信號(hào)存放在BL 中, 20H表示最左邊一位L2: MOV AL, BL ;將LED 位選信號(hào)輸出到8255A 的B口MOV DX, 209H OUT DX, AL CALL DELAY ;調(diào)研軟件延時(shí)程序 MOV AH

50、, 01H ;判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有則結(jié)束程序 INT 16H JNZ EXIT SHR BL, 1 ;LED 位選信號(hào)右移一位,選中下一位LED JNZ L2 EXIT: JMP L1 ;當(dāng)循環(huán)到最右邊一位LED 時(shí),重新填充BL 值,開始新一輪循環(huán)MOV DX, 208H MOV AL, 0FFH OUT DX, AL MOV DX, 209H MOV AL, 00H OUT DX, AL ;關(guān)閉所有 LED MOV AH, 4CH INT 21H DELAY PROC NEAR MOV ECX, 0FFFFFFFH LP: LOOPD LP RET DELAY ENDP COD

51、E ENDS END START (2)完成多位 LED 顯示器的顯示, 即設(shè)計(jì)一個(gè)顯示字符串 任意鍵按下時(shí)結(jié)束程序。1234.56的程序, 當(dāng)標(biāo)準(zhǔn)鍵盤上有基本思想:借助動(dòng)態(tài)掃描、 分時(shí)顯示的辦法, 利用人眼視覺的滯留效應(yīng),實(shí)現(xiàn)人眼看上去的各位 “同時(shí)” 顯示。分析:利用實(shí)驗(yàn)操作面板上引出的8255A 的分別 A口和 B口作為 6位8段 LED 顯示器的位選口和段選口, 從段選口依次輸出待顯示字符的段碼,并選通相應(yīng)的位實(shí)現(xiàn)對(duì)多位 LED 顯示器的刷 新。 8255A 的A口和 B口均工作在方式 0的輸出方式,方式控制字為:1000000B (80H )。 硬件連接:(1)8255A 的A口PA

52、0PA5 對(duì)應(yīng)連接 LED1LED6 的位選;(2)8255A 的B口PB0PB7 對(duì)應(yīng)連接段選 ah;程序流程圖略。參考源程序:DATA SEGMENT SEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H DB 99H, 92H, 82H, 0F8H DB 80H, 98H, 88H, 83H DB 0C6H, 0A1H, 86H, 8EH ;定義 0F的段碼存儲(chǔ)區(qū)DATA DISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H ;定義顯示緩沖區(qū)ENDS STACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS COD

53、E SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK1 START: MOV AX, DATA MOV DS, AX MOV AL, 80H ;8255A 初始化, A口輸出, B口輸出 MOV DX, 20BH OUT DX, AL L1: MOV AH, 20H ;預(yù)置位選信號(hào)L2: LEA SI, DISPMEM ;SI指向顯示緩沖區(qū)LEA BX, SEGTAB ;BX 指向段碼存儲(chǔ)區(qū)MOV AL, SI XLAT CMP AH, 04H JNE NEXT NEXT: AND AL, 7FH ;第4位LED 顯示小數(shù)點(diǎn)MOV DX, 209H ;輸出段碼

54、OUT DX, AL MOV DX, 208H ;輸出位選信號(hào) MOV AL, AH OUT DX, AL LP2: MOV CX, 4000 ;延時(shí)LOOP LP2 PUSH AX MOV AH, 01H ;判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有鍵按下則結(jié)束程序 INT 16H JNZ EXIT POP AX INC SI ;修改顯示緩沖區(qū)指針 SHR AH, 1 ;修改位選信號(hào) JNZ L2 JMP L1 EXIT: MOV DX, 208H MOV AL, 00H OUT DX, AL MOV DX, 209H MOV AL, 0FFH OUT DX, AL ;關(guān)閉所有 LED MOV AH,

55、 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)十:鍵盤接口實(shí)驗(yàn)編制 1個(gè)用鍵盤控制模擬電動(dòng)機(jī)轉(zhuǎn)動(dòng)的程序,即用非編碼鍵盤上的 A和B兩個(gè)鍵作轉(zhuǎn)、 ??刂?,并在數(shù)碼顯示器上顯示 F表示電機(jī)轉(zhuǎn)動(dòng),計(jì)算機(jī)屏幕上顯示笑臉符表示電機(jī)停,按回車鍵結(jié)束程序執(zhí)行(笑臉符的 ASCII 碼為 02H )。分析: 根據(jù)題目的要求,需要不斷掃描 44非編碼鍵盤,判斷鍵盤上 A 或B鍵(控制停轉(zhuǎn),在屏幕上顯示笑臉)是否按下。若按下A 鍵則在 LED 上顯示 F,表示電機(jī)轉(zhuǎn)動(dòng);若按下B鍵則在計(jì)算機(jī)屏幕( CRT顯示器)上顯示笑臉,表示電機(jī)停轉(zhuǎn)??梢杂?8255A的C口作為非編碼鍵盤的行掃描信號(hào),同時(shí)作為 LED 的位選信號(hào), B口作為非編碼鍵盤的列掃描信號(hào),A口作為 LED 的段選信號(hào)。 8255A的 C口工作在輸出方式,B口工作在輸入方式,A口工作在輸出方式,8255A 的方式控制字為:10000010B(82H) 硬件連接:(1)8255A 的A口的 PA0PA7 接段選信號(hào) af;(2)8255A 的B口的 PB0PB3接非編碼鍵盤的列掃描端 (J9)(3)8255A 的C口的 PC0PC5接LED 的位選信號(hào)(同時(shí)也是非編碼鍵盤的行掃描線)程序流程圖略。參考源程序:DATA SEGMENT DIS

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論