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

下載本文檔

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

文檔簡介

宋停云與您分享宋停云與您分享實(shí)驗(yàn)一:簡單程序設(shè)計(jì)實(shí)驗(yàn)編寫一個(gè)32NUM1中的32位無符號數(shù)與存放在NUM2中的16NUM3和NUM4中。程序流程圖略。參考源程序:DATA SEGMENTNUM1DD2A8B7654HNUM2DW5ABCHNUM3DW?NUM4DW?DATA ENDS宋停云與您分享宋停云與您分享CODE

SEGMENTASSUMEDS:DATA,CS:CODE宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AXMOVAX,WORDPTRNUM1

;數(shù)據(jù)段寄存器初始化宋停云與您分享宋停云與您分享MOVDX,WORDPTRNUM1+2DIVNUM2MOVNUM3,AXMOVNUM4,DX宋停云與您分享宋停云與您分享CODE

MOVAH,4CHINT21HENDSENDSTART

;正常返回DOS系統(tǒng)宋停云與您分享宋停云與您分享(2)編寫一個(gè)拆字程序。要求將存放在ARY單元的2位十六進(jìn)制數(shù)XX拆為X和X兩宋停云與您分享宋停云與您分享部分,并以0X1

和0X2

1 2 1 2的形式分別存入ARY+1和ARY+2單元中。宋停云與您分享宋停云與您分享程序流程圖略。參考源程序:DATA SEGMENTARYDB2AH,?,?宋停云與您分享宋停云與您分享DATACODE

ENDSSEGMENTASSUMEDS:DATA,CS:CODE宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AXMOVSI,OFFSETARYMOVAL,[SI]

;取ARY的偏移地址;取16進(jìn)制數(shù)至AL宋停云與您分享宋停云與您分享MOVBL,ALANDAL,0F0HSHRAL,4MOV[SI+1],ALMOVAL,BLANDAL,0FHMOV[SI+2],ALMOVAH,4CHINT21HCODE ENDSENDSTART

;取16進(jìn)制數(shù)的高四位,即X1存; 0X1存1存2;取16進(jìn)制數(shù)的低四位,即X存2; 0X2宋停云與您分享宋停云與您分享實(shí)驗(yàn)二:分支程序設(shè)計(jì)實(shí)驗(yàn)(1)編寫一個(gè)字符比較程序,比較3個(gè)無符號字節(jié)數(shù)的大小,并根據(jù)比較結(jié)果對變量K賦值:如果3個(gè)數(shù)不相等,則K=0;如果3個(gè)數(shù)中有兩個(gè)相等,則K=1;如果3個(gè)數(shù)都相等,則K=2。宋停云與您分享宋停云與您分享程序流程圖略。參考源程序:DATA SEGMENTADB20HBDB20HCDB20HKDB?

;定義待比較數(shù)A、B、C,比較結(jié)果K宋停云與您分享宋停云與您分享DATACODE

ENDSSEGMENTASSUMECS:CODE,DS:DATA宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AXMOVAL,A

CMPAL,B;對ACMPAL,B;對A、BJNECOMP2;相等則比較A、CCMPAL,CJNEK1JMPK2;A、C不相等則K=1;A、C相等則K=2COMP2:MOVBL,BCMPBL,CJEK1;對B、C進(jìn)行比較,相等則K=1CMPAL,CJEK1;對A、C進(jìn)行比較,相等則K=1K0:MOVK,0JMPEXITK1:MOVK,1JMPEXITK2:MOVK,2EXIT:MOVAH,4CH宋停云與您分享宋停云與您分享INT21HCODE ENDSENDSTART(2)編寫一個(gè)能實(shí)現(xiàn)下列表達(dá)式的程序:宋停云與您分享宋停云與您分享?AA≤B

設(shè)A,B,C為小于128的正整數(shù)。宋停云與您分享宋停云與您分享?NABC A>B?程序流程圖略。參考源程序:DATA SEGMENTADB22HBDB10HCDB01HNDB?

;定義A、B、C、N宋停云與您分享宋停云與您分享DATACODE

ENDSSEGMENTASSUMECS:CODE,DS:DATA宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVAL,ACMPAL,BJGCALCULADDAL,BJMPEXIT

;A小于或等于B則N=A+B宋停云與您分享宋停云與您分享CALCUL:SUBAL,BADCAL,CEXIT: MOVN,ALMOVAH,4CHINT21HCODE ENDSENDSTART宋停云與您分享宋停云與您分享實(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單元中。程序流程圖略。參考源程序:SEGMENTSTRNDB'What$' “$”結(jié)尾COUNTEQU$-STRNNDB?BUFDBCOUNTDUP(?)DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVAX,DATAMOVES,AXLEASI,STRNLEADI,BUFMOVCX,COUNTMOVAL,0LP1: MOVBL,[SI] ;逐個(gè)取字符進(jìn)行判斷宋停云與您分享宋停云與您分享ANDBL,BLNEXTINCALOR BL,80HNEXT: MOV[DI],BLINCSIINCDILOOPLP1MOVN,AL

;自己和自己做與運(yùn)算;根據(jù)PF標(biāo)志位的變化進(jìn)行跳轉(zhuǎn)宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODE

MOVAH,4CHINT21HENDSENDSTART宋停云與您分享宋停云與您分享(2)在FIRST開始的一片連續(xù)的數(shù)據(jù)區(qū)中存放著100個(gè)數(shù)據(jù),編寫一個(gè)程序,統(tǒng)計(jì)第1宋停云與您分享宋停云與您分享個(gè)數(shù)據(jù)前的數(shù)據(jù)個(gè)數(shù)。程序流程圖略。參考源程序:SEGMENTFIRSTDB10H,24H,34H,73H,20H,44H,03H,36H,41H ;任取9個(gè)數(shù)做演示COUNTEQU$-FIRSTNUMDB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVDL,0MOVCX,COUNTMOVBX,OFFSETFIRSTLP1: MOVAL,[BX]CMPAL,00HJNENEXTJMPEXITNEXT: INCDLINCBXLOOPLP1

;計(jì)數(shù)值初始為0;每次取一個(gè)數(shù),與0比較;找到0則退ft;沒找到0則計(jì)數(shù)值加1宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享EXIT:CODE

MOVNUM,DLMOVAH,4CHINT21HENDSENDSTART宋停云與您分享宋停云與您分享實(shí)驗(yàn)四:子程序設(shè)計(jì)實(shí)驗(yàn)將BUF開始的10ASCIIft實(shí)現(xiàn),參數(shù)傳送采用寄存器傳送方式。程序流程圖略。參考源程序:(1)實(shí)現(xiàn)方法一:遠(yuǎn)過程調(diào)用DATASEGMENTBUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNTEQU$-BUF ;定義任意長度的一段BUFENDS宋停云與您分享宋停云與您分享STACK1SEGMENTSTACKDB100DUP(?)STACK1ENDS

;設(shè)置足夠深度的棧區(qū)宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODE

SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVSI,OFFSETBUFMOVCX,COUNTAGAIN: MOVAL,[SI]MOVBL,ALSHRAL,4ANDAL,0FHCALLFARPTRHEXASCMOVDL,ALMOVAH,02HINT21HMOVAL,BLANDAL,0FHCALLFARPTRHEXASCMOVDL,ALMOVAH,02HINT21HMOVDL,20HMOVAH,02HINT21H

;逐個(gè)取數(shù);先對高字節(jié)部分轉(zhuǎn)換(寄存器AL傳參);調(diào)用子程序;顯示高字節(jié)部分對應(yīng)的字符;再對低字節(jié)部分轉(zhuǎn)換(寄存器AL傳參);調(diào)用子程序;顯示低字節(jié)部分對應(yīng)的字符;顯示空格宋停云與您分享宋停云與您分享INCSILOOPAGAIN宋停云與您分享宋停云與您分享CODE

MOVAH,4CHINT21HENDS宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODEB SEGMENTASSUMECS:CODEBHEXASC PROCFARCMPAL,09HJAHEXATOFADDAL,30HJMPENDHEXHEXATOF:ADDAL,37HENDHEX:RETHEXASC ENDPCODEB ENDSENDSTART

;判斷是不是數(shù)字;是字母則轉(zhuǎn)到HEXATOF;是數(shù)字則對應(yīng)到數(shù)字的ASCII碼;是字母則對應(yīng)到字母的ASCII碼宋停云與您分享宋停云與您分享(2)實(shí)現(xiàn)方法二:近過程調(diào)用DATASEGMENTBUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNTEQU$-BUF ;定義任意長度的一段BUFENDS宋停云與您分享宋停云與您分享STACK1SEGMENTSTACKDB100DUP(?)STACK1ENDS

;設(shè)置足夠深度的棧區(qū)宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODE

SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVSI,OFFSETBUFMOVCX,COUNTAGAIN: MOVAL,[SI]MOVBL,ALSHRAL,4ANDAL,0FHCALLHEXASC

;逐個(gè)取數(shù);先對高字節(jié)部分做轉(zhuǎn)換宋停云與您分享宋停云與您分享MOVDL,ALMOVAH,02HINT21HMOVAL,BLANDAL,0FHCALLHEXASCMOVDL,ALMOVAH,02HINT21HMOVDL,20HMOVAH,02HINT21HINCSILOOPAGAINMOVAH,4CHINT21HHEXASC PROCNEARCMPAL,09HJA HEXATOFADD AL,30HJMPENDHEXHEXATOF:ADDAL,37HENDHEX:RETHEXASC ENDPCODE ENDSENDSTART

;顯示高字節(jié)部分對應(yīng)的字符;再對低字節(jié)部分做轉(zhuǎn)換;顯示低字節(jié)部分對應(yīng)的字符;顯示空格;繼續(xù)循環(huán)或退ft宋停云與您分享宋停云與您分享S中斷調(diào)用實(shí)驗(yàn)標(biāo)記后結(jié)束程序,否則輸ft標(biāo)記“ERROR”后轉(zhuǎn)向原ft錯(cuò)處重做。試編程實(shí)現(xiàn)該功能。程序流程圖略。參考源程序:SEGMENTMSGDB0AH,0DH,'RIGHT',0AH,0DH,'$'WRNDB0AH,0DH,'ERROR',0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享AGAIN: MOVAH,01HINT21HCMPAL,39HJAEMSGCMPAL,30HJBEMSGMOVAH,01HINT21HCMPAL,'A'JBEMSGCMPAL,'Z'JBEXITCMPAL,'a'JBEMSGCMPAL,'z'JBEXITEMSG: LEADX,WRNMOVAH,09HINT21HJMPAGAINEXIT: MOVDX,OFFSETMSGMOVAH,09HINT21HMOVAH,4CH

;等待用戶輸入1個(gè)字符并顯示;判斷輸入是否是數(shù)字,不是則報(bào)錯(cuò);等待用戶輸入1個(gè)字符并顯示;判斷輸入是否是大寫字母,不是則繼續(xù);判斷是不是小寫字母;不是字母則報(bào)錯(cuò),是字母則轉(zhuǎn)到EXIT;顯示“RIGHT并退ft宋停云與您分享宋停云與您分享CODE

INT21HENDSENDSTART宋停云與您分享宋停云與您分享(2)編寫一程序分類統(tǒng)計(jì)字符個(gè)數(shù):即接收鍵入的一串字符(字符個(gè)數(shù)不超過50個(gè),該字符串用回車作為結(jié)束digiletter和other個(gè)存儲單元中,并顯示結(jié)果。程序流程圖略。參考源程序:SEGMENTMSG1DB0AH,0DH,'Numberofdigit:',20H,'$'MSG2DB0AH,0DH,'Numberofletters:',20H,'$'MSG3DB0AH,0DH,'Numberofothercharacters:',20H,'$'BUFDB50DB0DB50DUP(?) ;設(shè)置足夠深的棧區(qū)DIGITDB?LETTERDB?OTHERDB?DATA ENDSSTACK1 SEGMENTSTACKDB100DUP(?)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVAH,0AHMOVDX,OFFSETBUFINT21H

;等待用戶輸入字符串并顯示宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVSI,OFFSETBUFMOVCL,[SI+1]MOVCH,00HMOVAL,00HMOVAH,00HMOVBH,00HAGAIN: MOVBL,[SI+2]CMPBL,30HJBOTHCMPBL,3AH

;ASCII碼小于30H則歸類為“其它”宋停云與您分享宋停云與您分享JBDIGCMPBL,41HJBOTHCMPBL,5BHJBLETCMPBL,61HJBOTHCMPBL,7BHJBLETOTH: INCALJMPENDLPDIG: INCAHJMPENDLPLET: INCBHENDLP: INCSILOOPAGAINMOVDIGIT,AHMOVLETTER,BHMOVOTHER,ALMOVDX,OFFSETMSG1MOVAH,09HINT21HMOVAL,DIGITCALLDISPMOVDX,OFFSETMSG2MOVAH,09HINT21HMOVAL,LETTERCALLDISPMOVDX,OFFSETMSG3MOVAH,09HINT21HMOVAL,OTHERCALLDISPMOVAH,4CHINT21HDISP PROCNEAR

;ASCII碼大于等于30H小于3AH則歸類為“數(shù)字”;ASCII碼大于等于3AH小于41H則歸類為“其它”;ASCII碼大于等于41H小于5BH則歸類為“字母”;ASCII碼大于等于5BH小于61H則歸類為“其它”;ASCII碼大于等于61H小于7BH則歸類為“字母”;“其它”計(jì)數(shù)器加1;“數(shù)字”計(jì)數(shù)器加1;“字母”計(jì)數(shù)器加1;繼續(xù)循環(huán);統(tǒng)計(jì)各類個(gè)數(shù)“有多少個(gè)“有多少個(gè)“有多少個(gè);顯示子程序宋停云與您分享宋停云與您分享MOVAH,00HMOVDH,0AHDIVDHMOVCH,AHADDAL,30HMOVDL,ALMOVAH,02HINT21HADDCH,30HMOVDL,CHMOVAH,02HINT21HRETDISP ENDPCODE ENDSENDSTART宋停云與您分享宋停云與您分享實(shí)驗(yàn)六:擴(kuò)展定時(shí)器/計(jì)數(shù)器接口實(shí)驗(yàn)(1)計(jì)數(shù)器0工作于方式3,編寫初始化程序,觀察其輸ftOUT0信號的波形。修改計(jì)數(shù)初值,觀察OUT0信號的變化情況。硬件連接方法:8254計(jì)數(shù)器0的CLK0端接規(guī)則的脈沖輸入(頻率自選),OUT0接示波器的正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATASEGMENTDB100DUP(?)DATAENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVDX,20FHMOVAL,00010110BOUTDX,ALMOVDX,20CHMOVAL,05HOUTDX,AL

;寫入計(jì)數(shù)器0的控制字;寫入計(jì)數(shù)器0的計(jì)數(shù)初值宋停云與您分享宋停云與您分享MOVAH,4CHINT21HCODE ENDSENDSTART(2)將計(jì)數(shù)器1和計(jì)數(shù)器0級聯(lián)起來,二者均工作于方式3,編寫初始化程序,觀察OUT1和OUT0信號的波形,說明二者的關(guān)系。修改計(jì)數(shù)初值,觀察OUT0和OUT1輸ft波形的變化情況。硬件連接方法:8254計(jì)數(shù)器1的CLK1端接規(guī)則的脈沖輸入(頻率自選),OUT1接8254計(jì)數(shù)器0的CLK0,計(jì)數(shù)器0的輸ftOUT0接示波器正極;示波器負(fù)極接地。程序流程圖略。參考源程序:DATA SEGMENTDB100DUP(?)宋停云與您分享宋停云與您分享DATACODE

ENDSSEGMENT宋停云與您分享宋停云與您分享ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享MOVDX,20FHMOVAL,00010110BOUTDX,ALMOVDX,20CHMOVAL,05HOUTDX,ALMOVDX,20FHMOVAL,01010110BOUTDX,ALMOVDX,20DHMOVAL,02HOUTDX,ALMOVAH,4CHINT21HCODE ENDSENDSTART

;寫入計(jì)數(shù)器0的控制字;寫入計(jì)數(shù)器0的計(jì)數(shù)初值;寫入計(jì)數(shù)器1的控制字;寫入計(jì)數(shù)器1的計(jì)數(shù)初值宋停云與您分享宋停云與您分享實(shí)驗(yàn)七:并行輸入/輸ft接口8255A簡單編程實(shí)驗(yàn)8255AB口輸ftL1,L3,L5,L7L2,L4,L6,L8亮滅交替變化。分析:按照題目要求,當(dāng)8255A的B口輸ft為01010101B(55H)時(shí),發(fā)光二極管L1,L3,L5,L7會(huì)被點(diǎn)亮,當(dāng)8255A的B口輸ft為10101010B(0AAH)時(shí),發(fā)光二極管L2,L4,L6,L8會(huì)被點(diǎn)亮。因此,通過延時(shí)改變8255A的B口輸ft,即可實(shí)現(xiàn)兩組發(fā)光二極管的亮滅交替變化。由于LED隨時(shí)ft8255A的B口可工作于方式0輸。硬件連接方法:8255A的B口PB0~PB7分別連接。程序流程圖略。參考源程序:.486DATA SEGMENT宋停云與您分享宋停云與您分享PORTADW208HPORTBDW209HPORTCDW20AH

;8255A端口地址端口B地址;8255A端口地址宋停云與您分享宋停云與您分享PORT_CTRDW20BH ;8255A控制端口地址DATA ENDSSTACK1 SEGMENTSTACKDB100DUP(?)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START: MOVAX,DATAMOVDS,AX宋停云與您分享宋停云與您分享LP0:

MOVDX,PORT_CTRMOVAL,10000000BOUTDX,ALMOVDX,PORTBMOVAL,00HOUTDX,ALMOVBL,01010101BMOVAL,BLOUTDX,ALCALLDELAY

;8255A初始化;控制字;8255A端口B清零,LED初始化(全滅)宋停云與您分享宋停云與您分享NOTALMOVBL,ALMOVAH,01HINT16HJNZEXITJMPLP0

;調(diào)用BIOS的16H功能判斷鍵盤是否有輸入宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享EXIT:

MOVAH,4CHINT21H宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享DELAY PROCNEARMOVECX,0FFFFFFFHLP2: NOPLOOPDLP2RET

;延時(shí)子程序(可通過修改NOP指令數(shù)量改變延時(shí)時(shí)間)宋停云與您分享宋停云與您分享DELAYCODE

ENDPENDSENDSTART宋停云與您分享宋停云與您分享(2)利用8255A的A口讀入8個(gè)開關(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顯示;當(dāng)只有K1,K2,K3和K4顯示00000100B;…直到所有開關(guān)合上時(shí),L1~L8顯示00001000B,并結(jié)束程序的運(yùn)行。發(fā)光二極管的狀態(tài)通過8255AB口進(jìn)行控制。分析:8255ABA口送ft口工作在方式0口工作在方式0輸ft口不需要8255A硬件連接方法:(1)8255A的A口PA0~PA7對應(yīng)連接K1~K8;(2)8255A的B口PB0~PB7對應(yīng)連接L1~L8;源代碼:DATA SEGMENT宋停云與您分享宋停云與您分享DATA

LISTENDS

DB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH宋停云與您分享宋停云與您分享STACK1 SEGMENTSTACKDB100DUP(?)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START: MOVAX,DATA宋停云與您分享宋停云與您分享MOVDS,AX宋停云與您分享宋停云與您分享MOVDX,20BHMOVAL,10010000BOUTDX,AL

;8255A初始化宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVDX,209HMOVAL,00HOUTDX,AL

;8255A的B口清零,LED初始化(全滅)宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享L0:

MOVDX,208HIN AL,DX

;讀8255A的A口,獲得開關(guān)狀態(tài)宋停云與您分享宋停云與您分享MOVBL,00HMOVCX,8MOVSI,OFFSETLISTL1: INCBLCMPAL,[SI]JZ FINDINCSILOOPL1JMPL0宋停云與您分享宋停云與您分享FIND: MOVAL,BLMOVDX,209HOUTDX,ALCMPAL,08HJNZL0

;當(dāng)前開關(guān)狀態(tài)為表中所列狀態(tài)之一;顯示LED狀態(tài)宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODE

MOVAH,4CHINT21HENDSENDSTART宋停云與您分享宋停云與您分享實(shí)驗(yàn)八:并行輸入/輸ft接口8255A綜合應(yīng)用實(shí)驗(yàn)(1)利用8254計(jì)數(shù)器0、計(jì)數(shù)器1和8255A的B口實(shí)現(xiàn)對發(fā)光二極管的定時(shí)控制,讓8個(gè)發(fā)光二極管每隔1s從左到右依次點(diǎn)亮。(要求計(jì)數(shù)器1的時(shí)鐘脈沖頻率為250kHz)。分析:根據(jù)題目要求,需要利用8254進(jìn)行定時(shí)1s控制,定時(shí)到后,改變8255A的B口輸ft??梢岳弥袛嗟姆绞綄?shí)現(xiàn),8254定時(shí)到時(shí)向CPU申請中斷,CPU相應(yīng)中斷后在中斷程序中改變8255A的B口輸ft。由于題目要求8254的輸入脈沖頻率為250kHz,所以需要級聯(lián)計(jì)數(shù)器1和計(jì)數(shù)器0實(shí)現(xiàn)1s(參考程序中利用計(jì)數(shù)器1進(jìn)行20ms0進(jìn)行50OUT0向CPU申請中斷)。8255A的B口控制LED,可工作在方式0輸ft,A口未使用,為了選通實(shí)驗(yàn)板上的中斷輸入C口的PC7須輸ft低電平,因此口的高四位工作在方式0輸ft。綜合上述要求,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)8259的IRQ3端)8259芯片的中斷屏蔽字和系統(tǒng)存儲器中的中斷向量表(0BH的中斷向量)。硬件連接方法:(1)250kHz脈沖輸ft接8254的CLK1,OUT1接CLK0,OUT0接IRQ;(2)8255A的B口PB0~PB7對應(yīng)連接L1~L8。程序流程圖略。參考源程序:宋停云與您分享宋停云與您分享DATADATA

SEGMENTPORT0DW20CHPORT1DW20DHPORT2DW20EHPORT3DW20FHPORTADW208HPORTBDW209HPORTCDW20AHPORT_CTRDW20BHENDS

;8254計(jì)數(shù)器0端口地址;8254計(jì)數(shù)器1端口地址;8254計(jì)數(shù)器2端口地址;8254控制寄存器端口地址;8255A的A口端口地址的B口端口地址;8255A的口端口地址;8255A的控制寄存器端口地址宋停云與您分享宋停云與您分享STACK1 SEGMENTSTACKDB100DUP(0)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK1宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AXMOVES,AX宋停云與您分享宋停云與您分享MOVAL,80HMOVDX,PORT_CTROUTDX,AL

;8255初始化,B口方式0輸ft,C口高4位輸ft宋停云與您分享宋停云與您分享MOVAL,0EH ;PC7清零,允許8254IRQ3OUTDX,AL宋停云與您分享宋停云與您分享MOVAL,00HMOVDX,PORTBOUTDX,ALMOVAX,350BHINT21HPUSHESPUSHBXMOVAX,SEGINTPROCMOVDS,AXMOVDX,OFFSETINTPROC

;發(fā)光二極管初始化(全滅);保存系統(tǒng)原有0BH號中斷的中斷向量至堆棧宋停云與您分享宋停云與您分享MOVAX,250BH ;將程序要求的中斷向量寫入INT21H宋停云與您分享宋停云與您分享INAL,21HANDAL,0F7HOUT21H,ALSTIMOVDX,PORT3MOVAL,14HOUTDX,ALMOVDX,PORT0MOVAL,50DOUTDX,ALMOVDX,PORT3MOVAL,74HOUTDX,ALMOVDX,PORT1MOVAX,5000DOUTDX,ALMOVAL,AHOUTDX,AL

;設(shè)置8259的IMR寄存器,允許IRQ3中斷;開中斷,CPU可以響應(yīng)外部可屏蔽中斷;8254計(jì)數(shù)器0初始化;計(jì)數(shù)器0寫入計(jì)數(shù)初值50D;8254計(jì)數(shù)器1初始化;計(jì)數(shù)器1寫入計(jì)數(shù)初值5000D宋停云與您分享宋停云與您分享MOVBH,80HMOVAL,BH

;BH存放當(dāng)前8255A的B口輸ft宋停云與您分享宋停云與您分享MOVDX,PORTB ;8255A的B口輸ftOUTDX,AL宋停云與您分享宋停云與您分享WAIT0: NOPNOPNOPMOVAH,01HINT16HJNZEXITJMPWAIT0

;判斷鍵盤上是否有鍵按下,若有則結(jié)束程序宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享EXIT: POPDXPOPDSMOVAX,250BHINT21H

;恢復(fù)中斷向量表中的原有0BH號中斷向量宋停云與您分享宋停云與您分享MOVAH,4CHINT21H宋停云與您分享宋停云與您分享INTPROCPROCNEARMOVAL,BHRORAL,1MOVBH,ALMOVDX,PORTBOUTDX,AL

;向8255A的B口寫ft數(shù)據(jù),點(diǎn)亮對應(yīng)LED宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVAL,20HOUT20H,ALIRETINTPROCENDP

;向8259發(fā)ft中斷結(jié)束命令宋停云與您分享宋停云與您分享CODE

ENDSENDSTART宋停云與您分享宋停云與您分享(2)8255A的A口與8個(gè)開關(guān)相連,工作于方式1下,要求:利用當(dāng)前的開關(guān)狀態(tài)通過B口控制L1~L8A口的/STBK發(fā)KA分析:8255A的B口用來控制LED的亮滅,可工作在方式0下。根據(jù)題意,可以通過查詢方式不斷讀取8255A的C口狀態(tài)確定K鍵是否按下,也可以利用中斷方式,當(dāng)K鍵按下時(shí),由INTRA(PC3)向CPU申請中斷。當(dāng)判斷K鍵按下后,讀取8255A的A口狀態(tài),并通過B口顯示到LED上。利用查詢方式實(shí)現(xiàn)時(shí),僅需要給定方式選擇控制字;利用中斷方式實(shí)現(xiàn)時(shí),除控制字外還需設(shè)定INTEA為1,允許INTRA申請中斷。因此,8255A的方式控制字為:10110000B(0B0H);使INTEA(PC4)置1,其控制字為宋停云與您分享宋停云與您分享00001001B(09H)。{注意:利用中斷方式實(shí)現(xiàn)時(shí)還需要置PC7為0,使INTRA能到達(dá)8259的IRQ3}硬件連接與參考源程序:(1)利用查詢方式實(shí)現(xiàn)硬件連接:1)8255A的A口PA0~PA7與K1~K8對應(yīng)相連;2)8255A的B口PB0~PB7與L1~L8對應(yīng)相連;3)按鍵K接8255A的C口PC4。參考源程序:CODE SEGMENTASSUMECS:CODE宋停云與您分享宋停云與您分享START: MOVAL,0B0HMOVDX,20BHOUTDX,AL

;8255A初始化,方式控制字10110000B宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVDX,209HMOVAL,00HOUTDX,ALAGAIN: MOVAH,01HINT16HJNZEXITMOVDX,20AHINAL,DXTESTAL,00010000BJNZAGAINMOVDX,208HINAL,DXMOVDX,209HOUTDX,ALJMPAGAIN

;LED初始化;判斷計(jì)算機(jī)鍵盤上是否有鍵按下,若有結(jié)束程序;讀入8255A的C口狀態(tài);判斷PC4=1?(K鍵是否按下);讀入8255A的A口狀態(tài);將A口狀態(tài)送8255A的B口宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享EXIT:CODE

MOVAH,4CHINT21HENDSENDSTART宋停云與您分享宋停云與您分享(2)利用中斷方式實(shí)現(xiàn)硬件連接:1)8255A的A口PA0~PA7與K1~K8對應(yīng)相連;2)8255A的B口PB0~PB7與L1~L8對應(yīng)相連;3)按鍵K接8255A的C口PC4;4)8255A的C口PC3(INTRA)接IRQ。參考源程序:宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享DATA SEGMENTPORTADW208HPORTBDW209HPORTCDW20AHPORT_CTRDW20BHDATA ENDSSTACK1 SEGMENTSTACKDB100DUP(0)STACK1 ENDS

8255A的口地址8255A的B口地址8255A的口地址;8255A的控制口地址宋停云與您分享宋停云與您分享CODE SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK1START: MOVAX,DATAMOVDS,AXMOVES,AX宋停云與您分享宋停云與您分享MOVDX,PORT_CTRMOVAL,0B0HOUTDX,AL

;寫入8255A方式控制字0B0H宋停云與您分享宋停云與您分享MOVAL,09H ;寫入口按位置位控制字,PC4置“1”O(jiān)UTDX,AL宋停云與您分享宋停云與您分享MOVAL,0EHOUTDX,AL

;寫入C口按位復(fù)位控制字,PC7置“0”,開IRQ宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVAX,350BHINT21HPUSHESPUSHBXMOVAX,SEGINTPROCMOVDS,AXMOVDX,OFFSETINTPROCMOVAX,250BHINT21HINAL,21HANDAL,0F7HOUT21H,ALSTIWAIT0: MOVAH,01HINT16HJZWAIT0POPDX

;保存系統(tǒng)原有中斷號為0BH的中斷向量到堆棧;向0BH號中斷寫入新的中斷向量;允許8259的IRQ3中斷;允許CPU響應(yīng)可屏蔽中斷;判斷是否有鍵按下,若有則結(jié)束程序,若無則等待;恢復(fù)系統(tǒng)中斷向量表宋停云與您分享宋停云與您分享POPDSMOVAX,250BHINT21HMOVAH,4CHINT21H宋停云與您分享宋停云與您分享INTPROCPROCNEARMOVDX,PORTAINAL,DXMOVDX,PORTBOUTDX,ALMOVAL,20HOUT20H,ALIRETINTPROCENDPCODE ENDSENDSTART

;讀入8255A端口A的狀態(tài)(開關(guān)狀態(tài));從8255A的B口輸ft開關(guān)狀態(tài),由對應(yīng)的LED顯示;給8259發(fā)中斷結(jié)束指令宋停云與您分享宋停云與您分享實(shí)驗(yàn)九:LED顯示器接口實(shí)驗(yàn)“8分析:根據(jù)題意要求,實(shí)驗(yàn)板上的6位8段數(shù)碼管的段選信號均相同,為字符“8”的段碼(80H)。為了實(shí)現(xiàn)從左到右循環(huán)顯示且每個(gè)字位停留約1s的功能,只需要每隔一秒給位選信號賦值,選通/斷開相應(yīng)的位即可。當(dāng)循環(huán)顯示到最右端時(shí),延時(shí)1s再從最左端開始顯示。為此,在該題中我們利用8255A的A口作為6位LED顯示器的段選口(地址208H),8255A的B口作為6位LED顯示器的位選口(地址209H)。8255A的控制字為:10000000B(80H)硬件連接:(1)8255A的A口PA0~PA7分別對應(yīng)連接LED顯示器的段選輸入a~h.(2)8255A的B口PB0~PB5分別對應(yīng)連接LED1~LED6顯示器的位選輸入。程序流程圖略。參考源程序:.486STACK1 SEGMENTSTACKDB100DUP(0)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,SS:STACK1宋停云與您分享宋停云與您分享START: MOVAL,80HMOVDX,20BHOUTDX,AL

;8255A工作方式初始化,A口方式0輸ft,B口方式0輸ft宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVAL,80HMOVDX,208HOUTDX,AL

;8255A的A口輸ft字符“8”的段碼80H宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享L1:L2:

MOVBL,20HMOVAL,BLMOVDX,209HOUTDX,ALCALLDELAYMOVAH,01HINT16HJNZEXITSHRBL,1JNZL2JMPL1

;LED顯示器位選信號存放在BL中,20H表示最左邊一位;將LED位選信號輸ft到8255A的B口;調(diào)研軟件延時(shí)程序;判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有則結(jié)束程序;LED位選信號右移一位,選中下一位LED;當(dāng)循環(huán)到最右邊一位LED時(shí),重新填充BL值,開始新一輪循環(huán)宋停云與您分享宋停云與您分享EXIT: MOVDX,208H宋停云與您分享宋停云與您分享MOVAL,0FFHOUTDX,ALMOVDX,209HMOVAL,00HOUTDX,ALMOVAH,4CHINT21H

;關(guān)閉所有LED宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享DELAYLP:DELAYCODE

PROCNEARMOVECX,0FFFFFFFHLOOPD LPRETENDPENDSENDSTART宋停云與您分享宋停云與您分享1234.56同時(shí)”顯示。分析:利用實(shí)驗(yàn)操作面板上引ft的8255A的分別A口和B口作為6位8段LED顯示器的位選口和ft顯示器的刷新。8255AAB的輸ft。硬件連接:(1)8255A的A口PA0~PA5對應(yīng)連接LED1~LED6的位選;(2)8255A的B口PB0~PB7對應(yīng)連接段選a~h;程序流程圖略。參考源程序:DATA SEGMENT宋停云與您分享宋停云與您分享SEGTAB DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,98H,88H,83HDB0C6H,0A1H,86H,8EHDISPMEMDB01H,02H,03H,04H,05H,06HDATA ENDSSTACK1 SEGMENTSTACKDB100DUP(0)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1

;定義0~F的段碼存儲區(qū);定義顯示緩沖區(qū)宋停云與您分享宋停云與您分享START: MOVAX,DATAMOVDS,AXMOVAL,80HMOVDX,20BHOUTDX,ALL1: MOVAH,20HLEASI,DISPMEMLEABX,SEGTABL2: MOVAL,[SI]XLATCMPAH,04HJNENEXTANDAL,7FHNEXT: MOVDX,209HOUTDX,ALMOVDX,208HMOVAL,AHOUTDX,ALMOVCX,4000LP2: LOOPLP2PUSHAXMOVAH,01HINT16HJNZEXITPOPAXINCSISHRAH,1JNZL2JMPL1EXIT: MOVDX,208HMOVAL,00HOUTDX,ALMOVDX,209HMOVAL,0FFHOUTDX,ALMOVAH,4CHINT21HCODE ENDSENDSTART

;8255A初始化,A口輸ft,B口輸ft;預(yù)置位選信號;SI指向顯示緩沖區(qū);BX指向段碼存儲區(qū);第4位LED顯示小數(shù)點(diǎn);輸ft段碼;輸ft位選信號;延時(shí);判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下,若有鍵按下則結(jié)束程序;修改顯示緩沖區(qū)指針修改位選信號;關(guān)閉所有LED宋停云與您分享宋停云與您分享實(shí)驗(yàn)十:鍵盤接口實(shí)驗(yàn)編制1個(gè)用鍵盤控制模擬電動(dòng)機(jī)轉(zhuǎn)動(dòng)的程序BF表示電機(jī)轉(zhuǎn)動(dòng),計(jì)算機(jī)屏幕上顯示笑臉符表示電機(jī)停,按回車鍵結(jié)束程序執(zhí)行(ASCII碼為02H)。分析:根據(jù)題目的要求,需要不斷掃描4×4非編碼鍵盤,判斷鍵盤上A或B鍵(控制停轉(zhuǎn),在屏幕上顯示笑臉)A鍵則在計(jì)算機(jī)屏幕顯示器)上顯示笑臉,表示電機(jī)停轉(zhuǎn)??梢杂?255A口作為8255AC口工作在輸ft口工口工作在輸ft的方式控制字為:10000010B(82H)硬件連接:(1)8255A的A口的PA0~PA7接段選信號a~f;(2)8255A的B口的PB0~PB3接非編碼鍵盤的列掃描端(J9)(3)8255A的C口的PC0~PC5接LED的位選信號(同時(shí)也是非編碼鍵盤的行掃描線)程序流程圖略。參考源程序:DATA SEGMENT宋停云與您分享宋停云與您分享DISPTABDB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,98H,88H,83HDB0C6H,0A1H,86H,8EHKEYTAB DB0E7H,0D7H,0B7H,077HDB0EBH,0DBH,0BBH,07BHDB0EDH,0DDH,0BDH,07DHDB0EEH,0DEH,0BEH,07EH

;定義LED顯示字形碼;定義鍵值特征表宋停云與您分享宋停云與您分享DATA

MSGENDS

DB'PRESSENTERTOEND.',0AH,0DH,'$' ;提示消息宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享CODEMAIN

SEGMENTPROC FARASSUMECS:CODE,DS:DATA宋停云與您分享宋停云與您分享START: PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXLEADX,MSGMOVAH,09HINT21H

;顯示提示信息宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享MOVDX,20BHMOVAL,82HOUTDX,ALMOVDX,208HMOVAL,0FFHOUTDX,ALT1: MOVDX,20AHMOVAL,00HOUTDX,ALMOVDX,209HLOP1: MOVAH,0BHINT21HCMPAL,0FFHJNZT2MOVAH,00HINT16HCMPAL,0DHJZEXITT2: INAL,DXANDAL,0FHCMPAL,0FHJELOP1MOVBH,ALCALLDELAYMOVAL,0FEHMOVBL,ALLOP2: MOVDX,20AHOUTDX,ALMOVDX,209HINAL,DXANDAL,0FHCMPAL,0FHJNELOP3ROLBL,1MOVAL,BLJMPLOP2LOP3: MOVDX,20AHMOVAL,3FHOUTDX,ALSALBH,4

;8255A初始化,A口段選輸ft,B口鍵盤列輸入,C口鍵盤行輸ft;從段選口輸ft0FFH關(guān)閉所有LED;使鍵盤行線為“0”;判斷標(biāo)準(zhǔn)鍵盤上是否有鍵按下;讀取標(biāo)準(zhǔn)鍵盤上所按鍵的ASCII碼;若回車鍵按下,則結(jié)束程序;讀列線狀態(tài);非編碼鍵盤上無鍵按下,等待;非編碼鍵盤上有鍵按下,將列信號存入BH;延時(shí)去抖動(dòng);逐行掃描;BL中存行掃描信號;該行有鍵按下,轉(zhuǎn)LOP3;無鍵按下?lián)Q1行宋停云與您分享宋停云與您分享宋停云與您分享宋停云與您分享ANDBL,0FHORBL,BHCALLDELAYLEASI,KEYTABMOVBH,0LOP4: MOVAL,[SI]CMPAL,BLJELOP5INCBHINCSIJMPLOP4LOP5: CMPBH,0AHJNZLOP6CALLLEDXSLOP6: CMPBH,0BHJNZLOP7MOVAL,00HMOVDX,20AHOUTDX,ALMOVDL,02HMOVAH,02HINT21HLOP7: JMPT1EXIT: MOVDX,208HMOVAL,0FFHOUTDX,ALMOVDX,20AHMOVAL,00HOUTDX,ALRETMAIN ENDPLEDXS PROC NEARMOVAL,0FHLEABX,DISPTABXLATMOVDX,208HOUTDX,ALMOVAL,3FHMOVDX,20AHOUTDX,ALRETLEDXS ENDP

;形成鍵值(列+行)延時(shí),等待按鍵釋放;查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論