《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序.doc
《《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序.doc(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
實(shí)驗(yàn)一:簡(jiǎn)單程序設(shè)計(jì)實(shí)驗(yàn) (1)編寫(xiě)一個(gè) 32 位無(wú)符號(hào)數(shù)除法的程序,要求將存放在 NUM1 中的 32 位無(wú)符號(hào)數(shù)與存放 在 NUM2 中的 16 位無(wú)符號(hào)數(shù)相除,結(jié)果存放在 NUM3 和 NUM4 中。 程序流程圖略。 參考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;數(shù)據(jù)段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS系統(tǒng) INT 21H CODE ENDS END START (2)編寫(xiě)一個(gè)拆字程序。要求將存放在 ARY 單元的 2 位十六進(jìn)制數(shù) X1X2 拆為 X1 和 X2 兩 部分,并以 0X1 和 0X2 的形式分別存入 ARY+1 和 ARY+2 單元中。 程序流程圖略。 參考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY的偏移地址 MOV AL,[SI] ;取16進(jìn)制數(shù)至AL MOV BL,AL AND AL,0F0H ;取16進(jìn)制數(shù)的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16進(jìn)制數(shù)的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)二:分支程序設(shè)計(jì)實(shí)驗(yàn) (1)編寫(xiě)一個(gè)字符比較程序,比較 3 個(gè)無(wú)符號(hào)字節(jié)數(shù) A,B,C 的大小,并根據(jù)比較結(jié)果 對(duì)變量 K 賦值: 如果 3 個(gè)數(shù)不相等,則 K=0; 如果 3 個(gè)數(shù)中有兩個(gè)相等,則 K=1; 如果 3 個(gè)數(shù)都相等,則 K=2。 程序流程圖略。 參考源程序: DATA SEGMENT ;定義待比較數(shù)A、B、C,比較結(jié)果K A 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、C CMP AL,C JNE K1 ;A、C不相等則K=1 JMP K2 ;A、C相等則K=2 COMP2: MOV BL,B CMP BL,C JE K1 ;對(duì)B、C進(jìn)行比較,相等則K=1 CMP AL,C JE K1 ;對(duì)A、C進(jìn)行比較,相等則K=1 K0: MOV 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)編寫(xiě)一個(gè)能實(shí)現(xiàn)下列表達(dá)式的程序: ? N = ? A + B A ≤ B 設(shè) A,B,C 為小于 128 的正整數(shù)。 ? A ? B + C 程序流程圖略。 參考源程序: DATA SEGMENT A > B A DB 22H ;定義 A、B、C、N B 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ì)有多少個(gè)字符 因含有奇數(shù)個(gè)“1”而加上了校驗(yàn)位。統(tǒng)計(jì)結(jié)果存于N單元中。 程序流程圖略。 參考源程序: DATA SEGMENT STRN DB What$ ;任意定義一個(gè)字串,以“$”結(jié)尾 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 BL, [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 開(kāi)始的一片連續(xù)的數(shù)據(jù)區(qū)中存放著 100 個(gè)數(shù)據(jù),編寫(xiě)一個(gè)程序,統(tǒng)計(jì)第 1 個(gè)數(shù)據(jù)‘0’之前的數(shù)據(jù)個(gè)數(shù)。 程序流程圖略。 參考源程序: DATA SEGMENT FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取 9 個(gè)數(shù)做演示 COUNT EQU $-FIRST NUM DB ? DATA 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 JMP EXIT ;找到 0 則退出 NEXT: INC DL ;沒(méi)找到 0 則計(jì)數(shù)值加 1 INC BX LOOP LP1 EXIT: MOV NUM, DL MOV AH, 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)四:子程序設(shè)計(jì)實(shí)驗(yàn) 將BUF開(kāi)始的10個(gè)單元中兩位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,并在屏幕上顯示出來(lái)。要求碼型 轉(zhuǎn)換通過(guò)子程序HEXASC實(shí)現(xiàn),參數(shù)傳送采用寄存器傳送方式。 程序流程圖略。 參考源程序: (1)實(shí)現(xiàn)方法一:遠(yuǎn)過(guò)程調(diào)用 DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定義任意長(zhǎng)度的一段 BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;設(shè)置足夠深度的棧區(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)換(寄存器 AL 傳參) 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 CMP AL,09H ;判斷是不是數(shù)字 JA HEXATOF ;是字母則轉(zhuǎn)到 HEXATOF ADD AL,30H ;是數(shù)字則對(duì)應(yīng)到數(shù)字的 ASCII 碼 JMP ENDHEX HEXATOF:ADD AL,37H ;是字母則對(duì)應(yīng)到字母的 ASCII 碼 ENDHEX: RET HEXASC ENDP CODEB ENDS END START (2)實(shí)現(xiàn)方法二:近過(guò)程調(diào)用 DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定義任意長(zhǎng)度的一段 BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;設(shè)置足夠深度的棧區(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)換 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 ;繼續(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)如果從鍵盤(pán)上依次輸入的是一個(gè)數(shù)字和一個(gè)字母,則輸出“RIGHT”標(biāo)記后結(jié)束程序, 否則輸出標(biāo)記“ERROR”后轉(zhuǎn)向原出錯(cuò)處重做。試編程實(shí)現(xiàn)該功能。 程序流程圖略。 參考源程序: DATA SEGMENT MSG DB 0AH,0DH,RIGHT,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 ;等待用戶(hù)輸入 1 個(gè)字符并顯示 INT 21H CMP AL,39H JA EMSG CMP AL,30H JB EMSG ;判斷輸入是否是數(shù)字,不是則報(bào)錯(cuò) MOV AH,01H ;等待用戶(hù)輸入 1 個(gè)字符并顯示 INT 21H CMP AL,A JB EMSG CMP AL,Z ;判斷輸入是否是大寫(xiě)字母,不是則繼續(xù) JB EXIT ;判斷是不是小寫(xiě)字母 CMP AL,a JB EMSG CMP AL,z JB EXIT ;不是字母則報(bào)錯(cuò),是字母則轉(zhuǎn)到 EXIT EMSG: LEA DX,WRN MOV AH,09H INT 21H JMP AGAIN EXIT: MOV DX,OFFSET MSG MOV AH,09H ;顯示“RIGHT”并退出 INT 21H MOV AH,4CH INT 21H CODE ENDS END START (2)編寫(xiě)一程序分類(lèi)統(tǒng)計(jì)字符個(gè)數(shù):即接收鍵入的一串字符(字符個(gè)數(shù)不超過(guò)50個(gè),該字 符串用回車(chē)作為結(jié)束),并按數(shù)字、字母和其它字符分類(lèi)計(jì)數(shù),然后將結(jié)果存入digit、letter 和other 3個(gè)存儲(chǔ)單元中,并顯示結(jié)果。 程序流程圖略。 參考源程序: DATA SEGMENT 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 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV AH,0AH ;等待用戶(hù)輸入字符串并顯示 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 則歸類(lèi)為“其它” CMP BL,3AH JB DIG ;ASCII 碼大于等于 30H 小于 3AH 則歸類(lèi)為“數(shù)字” CMP BL,41H JB OTH ;ASCII 碼大于等于 3AH 小于 41H 則歸類(lèi)為“其它” CMP BL,5BH JB LET ;ASCII 碼大于等于 41H 小于 5BH 則歸類(lèi)為“字母” CMP BL,61H JB OTH ;ASCII 碼大于等于 5BH 小于 61H 則歸類(lèi)為“其它” CMP BL,7BH JB LET ;ASCII 碼大于等于 61H 小于 7BH 則歸類(lèi)為“字母” OTH: INC AL ;“其它”計(jì)數(shù)器加 1 DIG: JMP ENDLP INC AH ;“數(shù)字”計(jì)數(shù)器加 1 LET: JMP ENDLP INC BH ;“字母”計(jì)數(shù)器加 1 ENDLP: INC SI LOOP AGAIN ;繼續(xù)循環(huán) MOV LETTER, BH MOV OTHER, AL MOV DX, OFFSET MSG1 MOV AH,09H INT 21H MOV AL, DIGIT CALL DISP ;顯示“數(shù)字”有多少個(gè) MOV DX, OFFSET MSG2 MOV AH,09H INT 21H MOV AL, LETTER CALL DISP ;顯示“字母”有多少個(gè) MOV DX, OFFSET MSG3 MOV AH,09H INT 21H MOV AL, OTHER CALL DISP ;顯示“其它”有多少個(gè) MOV AH,4CH INT 21H DISP PROC NEAR ;顯示子程序 MOV DIGIT, AH ;統(tǒng)計(jì)各類(lèi)個(gè)數(shù) 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,編寫(xiě)初始化程序,觀察其輸出OUT0信號(hào)的波形。修改計(jì)數(shù)初 值,觀察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 ;寫(xiě)入計(jì)數(shù)器0的控制字 MOV AL,00010110B OUT DX,AL MOV DX,20CH ;寫(xiě)入計(jì)數(shù)器0的計(jì)數(shù)初值 MOV AL,05H OUT DX,AL MOV AH,4CH INT 21H CODE ENDS END START (2)將計(jì)數(shù)器1和計(jì)數(shù)器0級(jí)聯(lián)起來(lái),二者均工作于方式3,編寫(xiě)初始化程序,觀察OUT1 和OUT0信號(hào)的波形,說(shuō)明二者的關(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 START: MOV AX,DATA MOV DS,AX MOV DX,20FH MOV AL,00010110B ;寫(xiě)入計(jì)數(shù)器0的控制字 OUT DX,AL MOV DX,20CH ;寫(xiě)入計(jì)數(shù)器0的計(jì)數(shù)初值 MOV AL,05H OUT DX,AL MOV DX,20FH MOV AL,01010110B ;寫(xiě)入計(jì)數(shù)器1的控制字 OUT DX,AL MOV DX,20DH ;寫(xiě)入計(jì)數(shù)器1的計(jì)數(shù)初值 MOV AL,02H OUT DX,AL MOV AH,4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)七:并行輸入/輸出接口 8255A 簡(jiǎn)單編程實(shí)驗(yàn) (1)利用 8255A 的 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) 亮。因此,通過(guò)延時(shí)改變 8255A 的 B 口輸出,即可實(shí)現(xiàn)兩組發(fā)光二極管的亮滅交替變化。 由于 LED 隨時(shí)出于準(zhǔn)備好的狀態(tài),因此 8255A 的 B 口可工作于方式 0 輸出,其它端口未使 用,無(wú)需考慮。因此,8255A 的方式控制字為:10000000B(80H)。 硬件連接方法: 8255A 的 B 口 PB0~PB7 分別連接 L1~L8。 程序流程圖略。 參考源程序: .486 DATA SEGMENT PORTA DW 208H ;8255A端口A地址 PORTB DW 209H ;8255A端口B地址 PORTC DW 20AH ;8255A端口C地址 PORT_CTR DW 20BH ;8255A控制端口地址 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, PORT_CTR MOV AL, 10000000B ;8255A初始化 ;控制字 OUT DX, AL MOV DX, PORTB MOV AL, 00H OUT DX, AL ;8255A端口B清零,LED初始化(全滅) LP0: MOV BL, 01010101B MOV AL, BL OUT DX, AL CALL DELAY NOT AL MOV BL, AL MOV AH, 01H ;調(diào)用BIOS的16H功能判斷鍵盤(pán)是否有輸入 INT 16H JNZ EXIT JMP LP0 EXIT: MOV AH, 4CH INT 21H DELAY PROC NEAR ;延時(shí)子程序(可通過(guò)修改NOP指令數(shù)量改變延時(shí)時(shí)間) MOV ECX, 0FFFFFFFH LP2: NOP LOOPD LP2 RET DELAY ENDP CODE ENDS END START (2)利用 8255A 的 A 口讀入 8 個(gè)開(kāi)關(guān) K1~K8 的狀態(tài),當(dāng)只有 K1 合上時(shí),L1~L8 顯示 00000001B;當(dāng)只有 K1 和 K2 合上時(shí),L1~L8 顯示 00000010B;當(dāng)只有 K1,K2 和 K3 合上 時(shí),L1~L8 顯示 00000011B;當(dāng)只有 K1,K2,K3 和 K4 合上時(shí),L1~L8 顯示 00000100B;… 直到所有開(kāi)關(guān)合上時(shí),L1~L8 顯示 00001000B,并結(jié)束程序的運(yùn)行。發(fā)光二極管的狀態(tài)通 過(guò) 8255A 的 B 口進(jìn)行控制。 分析: 按照題目要求,可以通過(guò)查詢(xún)的方式讀取 8255A 的 B 口狀態(tài),并根據(jù)查詢(xún)的結(jié)果給 A 口送出相應(yīng)數(shù)據(jù),A 口工作在方式 0 的輸入狀態(tài),B 口工作在方式 0 輸出狀態(tài),C 口不需要 考慮,所以 8255A 的方式控制字為:10010000B) 硬件連接方法: (1)8255A 的 A 口 PA0~PA7 對(duì)應(yīng)連接 K1~K8; (2)8255A 的 B 口 PB0~PB7 對(duì)應(yīng)連接 L1~L8; 源代碼: DATA SEGMENT LIST DB 01H, 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 ;8255A的B口清零,LED初始化(全滅) MOV AL, 00H OUT DX, AL L0: MOV DX, 208H ;讀8255A的A口,獲得開(kāi)關(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 L0 FIND: MOV AL, BL MOV DX, 209H ;當(dāng)前開(kāi)關(guān)狀態(tài)為表中所列狀態(tài)之一 ;顯示LED狀態(tài) OUT DX, AL CMP AL, 08H JNZ L0 MOV AH, 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)八:并行輸入/輸出接口 8255A 綜合應(yīng)用實(shí)驗(yàn) (1)利用8254計(jì)數(shù)器0、計(jì)數(shù)器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)中斷)。8255A的B口控制LED,可工作在方式0輸出,A口未使用,為了選通實(shí) 驗(yàn)板上的中斷輸入C口的PC7須輸出低電平,因此C口的高四位工作在方式0輸出。綜合上述 要求,8254和8255A的初始化參數(shù)為: 8254計(jì)數(shù)器1的計(jì)數(shù)初值為:N=20ms/4s=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)8259的IRQ3端) 此外,利用中斷方式實(shí)現(xiàn)題目要求的功能還需要設(shè)置系統(tǒng)8259芯片的中斷屏蔽字和系統(tǒng) 存儲(chǔ)器中的中斷向量表(修改中斷類(lèi)型號(hào)為0BH的中斷向量)。 硬件連接方法: (1)250kHz脈沖輸出接8254的CLK1,OUT1接CLK0,OUT0接IRQ; (2)8255A的B口PB0~PB7對(duì)應(yīng)連接L1~L8。 DATA SEGMENT PORT0 DW 20CH ;8254計(jì)數(shù)器0端口地址 PORT1 DW 20DH ;8254計(jì)數(shù)器1端口地址 PORT2 DW 20EH ;8254計(jì)數(shù)器2端口地址 PORT3 DW 20FH ;8254控制寄存器端口地址 PORTA DW 208H ;8255A的A口端口地址 PORTB DW 209H ;8255A的B口端口地址 PORTC DW 20AH ;8255A的C口端口地址 DATA PORT_CTR DW 20BH ENDS ;8255A的控制寄存器端口地址 程序流程圖略。 參考源程序: STACK1 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輸出,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 ;將程序要求的中斷向量寫(xiě)入 INT 21H IN AL, 21H ;設(shè)置8259的IMR寄存器,允許IRQ3中斷 AND AL, 0F7H OUT 21H, AL STI ;開(kāi)中斷,CPU可以響應(yīng)外部可屏蔽中斷 MOV DX, PORT3 ;8254計(jì)數(shù)器0初始化 MOV AL, 14H OUT DX, AL MOV DX, PORT0 ;計(jì)數(shù)器0寫(xiě)入計(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寫(xiě)入計(jì)數(shù)初值5000D MOV AX, 5000D OUT DX, AL MOV AL, AH OUT 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 ;判斷鍵盤(pán)上是否有鍵按下,若有則結(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 MOV DX, PORTB ;向8255A的B口寫(xiě)出數(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è)開(kāi)關(guān)相連,工作于方式1下,要求:利用當(dāng)前的開(kāi)關(guān)狀態(tài)通過(guò)B口控 制L1~L8的亮或滅。A口的/STBA選通信號(hào)由按鍵K發(fā)出,每按一次K鍵,讀入當(dāng)前開(kāi)關(guān)狀態(tài)。 分析: 8255A的B口用來(lái)控制LED的亮滅,可工作在方式0下。 根據(jù)題意,可以通過(guò)查詢(xún)方式不斷讀取8255A的C口狀態(tài)確定K鍵是否按下,也可以利 用中斷方式,當(dāng)K鍵按下時(shí),由INTRA(PC3)向CPU申請(qǐng)中斷。當(dāng)判斷K鍵按下后,讀取 8255A的A口狀態(tài),并通過(guò)B口顯示到LED上。利用查詢(xún)方式實(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í)還需要置PC7為0,使INTRA能到達(dá)8259 的IRQ3} 硬件連接與參考源程序: (1)利用查詢(xún)方式實(shí)現(xiàn) 硬件連接: 1)8255A的A口PA0~PA7與K1~K8對(duì)應(yīng)相連; 2)8255A的B口PB0~PB7與L1~L8對(duì)應(yīng)相連; 3)按鍵K接8255A的C口PC4。 參考源程序: CODE SEGMENT ASSUME CS:CODE START: 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ī)鍵盤(pán)上是否有鍵按下,若有結(jié)束程序 INT 16H JNZ EXIT MOV DX, 20AH ;讀入8255A的C口狀態(tài) IN AL, DX TEST AL, 00010000B ;判斷PC4=1?(K鍵是否按下) JNZ AGAIN MOV DX, 208H ;讀入8255A的A口狀態(tài) IN AL, DX MOV DX, 209H ;將A口狀態(tài)送8255A的B口 OUT DX, AL JMP AGAIN EXIT: MOV AH, 4CH INT 21H CODE ENDS END START (2)利用中斷方式實(shí)現(xiàn) 硬件連接: 1)8255A的A口PA0~PA7與K1~K8對(duì)應(yīng)相連; 2)8255A的B口PB0~PB7與L1~L8對(duì)應(yīng)相連; 3)按鍵K接8255A的C口PC4; 4)8255A的C口PC3(INTRA)接IRQ。 參考源程序: DATA SEGMENT PORTA DW 208H ; 8255A的A口地址 PORTB DW 209H ; 8255A的B口地址 PORTC DW 20AH ; 8255A的C口地址 DATA PORT_CTR DW 20BH ENDS ; 8255A的控制口地址 STACK1 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 DX, PORT_CTR ;寫(xiě)入8255A方式控制字0B0H MOV AL, 0B0H OUT DX, AL MOV AL, 09H ;寫(xiě)入C口按位置位控制字,PC4置“1” OUT DX, AL MOV AL, 0EH ;寫(xiě)入C口按位復(fù)位控制字,PC7置“0”,開(kāi)IRQ OUT DX, AL MOV AX, 350BH ;保存系統(tǒng)原有中斷號(hào)為0BH的中斷向量到堆棧 INT 21H PUSH ES PUSH BX MOV AX, SEG INTPROC ;向0BH號(hào)中斷寫(xiě)入新的中斷向量 MOV DS, AX MOV DX, OFFSET INTPROC MOV AX, 250BH INT 21H IN AL, 21H ;允許8259的IRQ3中斷 AND AL, 0F7H OUT 21H, AL STI ;允許CPU響應(yīng)可屏蔽中斷 WAIT0: MOV AH, 01H ;判斷是否有鍵按下,若有則結(jié)束程序,若無(wú)則等待 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 ;讀入8255A端口A的狀態(tài)(開(kāi)關(guān)狀態(tài)) IN AL, DX MOV DX, PORTB ;從8255A的B口輸出開(kāi)關(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)鍵盤(pán)上按下任意鍵時(shí)結(jié)束程序。 分析: 根據(jù)題意要求,實(shí)驗(yàn)板上的6位8段數(shù)碼管的段選信號(hào)均相同,為字符“8”的段碼(80H)。 為了實(shí)現(xiàn)從左到右循環(huán)顯示且每個(gè)字位停留約1s的功能,只需要每隔一秒給位選信號(hào)賦值, 選通/斷開(kāi)相應(yīng)的位即可。當(dāng)循環(huán)顯示到最右端時(shí),延時(shí)1s再?gòu)淖钭蠖碎_(kāi)始顯示。為此,在 該題中我們利用8255A的A口作為6位LED顯示器的段選口(地址208H),8255A的B口作為6 位LED顯示器的位選口(地址209H)。8255A的控制字為:10000000B(80H) 硬件連接: (1)8255A的A口PA0~PA7分別對(duì)應(yīng)連接LED顯示器的段選輸入a~h. (2)8255A的B口PB0~PB5分別對(duì)應(yīng)連接LED1~LED6顯示器的位選輸入。 程序流程圖略。 參考源程序: .486 STACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME 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, 01H ;判斷標(biāo)準(zhǔn)鍵盤(pán)上是否有鍵按下,若有則結(jié)束程序 INT 16H JNZ EXIT SHR BL, 1 ;LED位選信號(hào)右移一位,選中下一位LED JNZ L2 JMP L1 ;當(dāng)循環(huán)到最右邊一位LED時(shí),重新填充BL值,開(kāi)始新一輪循環(huán) EXIT: 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 CODE ENDS END START (2)完成多位LED顯示器的顯示,即設(shè)計(jì)一個(gè)顯示字符串1234.56的程序,當(dāng)標(biāo)準(zhǔn)鍵盤(pán)上有 任意鍵按下時(shí)結(jié)束程序。 基本思想: 借助動(dòng)態(tài)掃描、分時(shí)顯示的辦法,利用人眼視覺(jué)的滯留效應(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口PA0~PA5對(duì)應(yīng)連接LED1~LED6的位選; (2)8255A的B口PB0~PB7對(duì)應(yīng)連接段選a~h; 程序流程圖略。 參考源程序: DATA SEGMENT SEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H ;定義0~F的段碼存儲(chǔ)區(qū) DB 99H, 92H, 82H, 0F8H DB 80H, 98H, 88H, 83H DB 0C6H, 0A1H, 86H, 8EH DISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H ;定義顯示緩沖區(qū) DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE 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) LEA SI, DISPMEM ;SI指向顯示緩沖區(qū) LEA BX, SEGTAB ;BX指向段碼存儲(chǔ)區(qū) L2: MOV AL, [SI] XLAT CMP AH, 04H JNE NEXT AND AL, 7FH ;第4位LED顯示小數(shù)點(diǎn) NEXT: MOV DX, 209H ;輸出段碼 OUT DX, AL MOV DX, 208H ;輸出位選信號(hào) MOV AL, AH OUT DX, AL MOV CX, 4000 ;延時(shí) LP2: LOOP LP2 PUSH AX MOV AH, 01H ;判斷標(biāo)準(zhǔn)鍵盤(pá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, 4CH INT 21H CODE ENDS END START 實(shí)驗(yàn)十:鍵盤(pán)接口實(shí)驗(yàn) 編制1個(gè)用鍵盤(pán)控制模擬電動(dòng)機(jī)轉(zhuǎn)動(dòng)的程序,即用非編碼鍵盤(pán)上的A和B兩個(gè)鍵作轉(zhuǎn)、??刂?, 并在數(shù)碼顯示器上顯示F表示電機(jī)轉(zhuǎn)動(dòng),計(jì)算機(jī)屏幕上顯示笑臉?lè)硎倦姍C(jī)停,按回車(chē)鍵結(jié) 束程序執(zhí)行(笑臉?lè)腁SCII碼為02H)。 分析: 根據(jù)題目的要求,需要不斷掃描44非編碼鍵盤(pán),判斷鍵盤(pán)上A或B鍵(控制停轉(zhuǎn),在屏 幕上顯示笑臉)是否按下。若按下A鍵則在LED上顯示F,表示電機(jī)轉(zhuǎn)動(dòng);若按下B鍵則在計(jì) 算機(jī)屏幕(CRT顯示器)上顯示笑臉,表示電機(jī)停轉(zhuǎn)。 可以用8255A的C口作為非編碼鍵盤(pán)的行掃描信號(hào),同時(shí)作為L(zhǎng)ED的位選信號(hào),B口作為 非編碼鍵盤(pán)的列掃描信號(hào),A口作為L(zhǎng)ED的段選信號(hào)。8255A的C口工作在輸出方式,B口工 作在輸入方式,A口工作在輸出方式,8255A的方式控制字為:10000010B(82H) 硬件連接: (1)8255A的A口的PA0~PA7接段選信號(hào)a~f; (2)8255A的B口的PB0~PB3接非編碼鍵盤(pán)的列掃描端(J9) (3)8255A的C口的PC0~PC5接LED的位選信號(hào)(同時(shí)也是非編碼鍵盤(pán)的行掃描線(xiàn)) 程序流程圖略。 參考源程序: DATA SEGMENT DISPTAB DB 0C0H, 0F9H, 0A4H, 0B0H ;定義LED顯示字形碼 DB 99H, 92H, 82H, 0F8H DB 80H, 98H, 88H, 83H DB 0C6H, 0A1H, 86H, 8EH KEYTAB DB 0E7H, 0D7H, 0B7H, 077H ;定義鍵值特征表 DB 0EBH, 0DBH, 0BBH, 07BH DB 0EDH, 0DDH, 0BDH, 07DH DB 0EEH, 0DEH, 0BEH, 07EH MSG DB PRESS ENTER TO END., 0AH, 0DH, $ ;提示消息 DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE, DS:DATA START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX LEA DX, MSG ;顯示提示信息 MOV AH, 09H INT 21H MOV DX, 20BH MOV AL, 82H OUT DX, AL ;8255A初始化,A口段選輸出,B口鍵盤(pán)列輸入,C口鍵盤(pán)行輸出 MOV DX, 208H ;從段選口輸出0FFH關(guān)閉所有LED MOV AL, 0FFH OUT DX, AL T1: MOV DX, 20AH ;使鍵盤(pán)行線(xiàn)為“0” MOV AL, 00H OUT DX, AL LOP1: MOV DX, 209H MOV AH, 0BH ;判斷標(biāo)準(zhǔn)鍵盤(pán)上是否有鍵按下 INT 21H CMP AL, 0FFH JNZ T2 MOV AH, 00H ;讀取標(biāo)準(zhǔn)鍵盤(pán)上所按鍵的ASCII碼 INT 16H CMP AL, 0DH ;若回車(chē)鍵按下,則結(jié)束程序 JZ EXIT T2: IN AL, DX ;讀列線(xiàn)狀態(tài) AND AL, 0FH CMP AL, 0FH JE LOP1 ;非編碼鍵盤(pán)上無(wú)鍵按下,等待 MOV BH, AL CALL DELAY MOV AL, 0FEH MOV BL, AL ;非編碼鍵盤(pán)上有鍵按下, 將列信號(hào)存入BH ;延時(shí)去抖動(dòng) ;逐行掃描 ;BL中存行掃描信號(hào) LOP2: MOV DX, 20AH OUT DX, AL MOV DX, 209H IN AL, DX AND AL, 0FH CMP AL, 0FH JNE LOP3 ;該行有鍵按下,轉(zhuǎn)LOP3 ROL BL, 1 MOV AL, BL JMP LOP2 ;無(wú)鍵按下?lián)Q1行 LOP3: MOV DX, 20AH MOV AL, 3FH OUT DX, AL SAL BH, 4 AND BL, 0FH OR BL, BH CALL DELAY LEA SI, KEYTAB ;形成鍵值 (列+行) ;延時(shí),等待按鍵釋放 ;查鍵值表找鍵代號(hào) MOV BH, 0 LOP4: MOV AL, [SI] CMP AL, BL JE LOP5 ;找到鍵值轉(zhuǎn)LOP5 INC BH INC SI LOP5: JMP LOP4 CMP BH, 0AH ;判斷是否是’A’鍵按下(非編碼鍵盤(pán)) JNZ LOP6 CALL LEDXS ;若是’A’按下,則調(diào)用LED顯示 LOP6: CMP BH, 0BH ;判斷是否是’B’鍵按下(非編碼鍵盤(pán)) JNZ LOP7 MOV AL, 00H ;若是’B’鍵按下,則關(guān)閉LED顯示 MOV DX, 20AH OUT DX, AL MOV DL, 02H ;在計(jì)算機(jī)屏幕上顯示笑臉?lè)?ASCII碼為02H) MOV AH, 02H LOP7: INT 21H JMP T1 ;返回鍵識(shí)別 EXIT: MOV DX, 208H ;退出程序前關(guān)閉LED顯示 MOV AL, 0FFH OUT D- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 計(jì)算機(jī)硬件技術(shù)基礎(chǔ) 計(jì)算機(jī)硬件 技術(shù) 基礎(chǔ) 實(shí)驗(yàn) 答案 程序
鏈接地址:http://m.jqnhouse.com/p-6536978.html