工學(xué)北郵微機(jī)原理硬件實驗報告及代碼_第1頁
工學(xué)北郵微機(jī)原理硬件實驗報告及代碼_第2頁
工學(xué)北郵微機(jī)原理硬件實驗報告及代碼_第3頁
工學(xué)北郵微機(jī)原理硬件實驗報告及代碼_第4頁
工學(xué)北郵微機(jī)原理硬件實驗報告及代碼_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、北京郵電大學(xué)微機(jī)原理硬件實驗報告實驗1:熟悉實驗環(huán)境及IO的使用實驗2: 8255A并行接口應(yīng)用 實驗3:8253計數(shù)器/定時器的應(yīng)用班級:2010211128序號: 9 學(xué)號: 10210775 姓名: 林鎮(zhèn)安 序號:14 學(xué)號: 10210780 姓名: 李達(dá)達(dá) 目錄實驗一熟悉實驗環(huán)境及IO的使用2一、實驗?zāi)康?二、實驗內(nèi)容及要求2三、實驗結(jié)果21、程序說明22、流程圖43、源代碼6四、實驗總結(jié)9實驗二 8255A并行接口應(yīng)用9一、實驗?zāi)康?二、實驗任務(wù)及內(nèi)容91、6 位數(shù)碼管靜態(tài)顯示102、6 位數(shù)碼管動態(tài)顯示103、擴(kuò)展部分10三、實驗結(jié)果1(6位數(shù)碼管靜態(tài)顯示)101、程序說明102

2、、流程圖113、源代碼11四、實驗結(jié)果2(6位數(shù)碼管動態(tài)顯示)131、程序說明132、流程圖143、源代碼15五、實驗結(jié)果(擴(kuò)展部分)171、程序說明172、流程圖183、源代碼18六、實驗總結(jié)22實驗三 8253計數(shù)器/定時器的應(yīng)用22一、實驗?zāi)康?2二、實驗任務(wù)及內(nèi)容221音樂發(fā)生器222擴(kuò)展部分23三、實驗結(jié)果1(音樂發(fā)生器)231、程序說明232、流程圖233、源代碼24四、實驗結(jié)果2(擴(kuò)展部分)291、程序說明292、流程圖293、源代碼30五、實驗總結(jié)34實驗一 熟悉實驗環(huán)境及IO的使用一、實驗?zāi)康? 通過實驗了解和熟悉實驗臺的結(jié)構(gòu),功能及使用方法。 2 通過實驗掌握直接使用Deb

3、ug 的I、O 命令來讀寫IO端口。 3 學(xué)會Debug 的使用及編寫匯編程序二、實驗內(nèi)容及要求1 學(xué)習(xí)使用 Debug 命令,并用 I、O 命令直接對端口進(jìn)行讀寫操作, 2 用匯編語言編寫跑馬燈程序。(使用 EDIT編輯工具)實現(xiàn)功能 A通過讀入端口狀態(tài)(ON為低電平),選擇工作模式(燈的閃爍方式、速度等)。 B通過輸出端口控制燈的工作狀態(tài)(低電平燈亮三、實驗結(jié)果1、程序說明跑馬燈程序共實現(xiàn):16種燈型、4種速度、暫停、退出等功能。 16種燈型(紅色點亮/白色熄滅),由SW0SW3控制(SW3取反)。S0S8S1S9S2S10S3S11S4S12S5S13S6S14S7S15 4種速度,由S

4、W4SW5控制SW5 SW4速度計數(shù)周期0 01倍速1*FFH*7FFH0 11/2倍速2*FFH*7FFH1 01/4倍速4*FFH*7FFH1 11/6倍速6*FFH*7FFH 暫停,由SW6控制(執(zhí)行程序前必須置SW6=1)SW6=1 運行SW6=0 暫停 退出,由SW7控制(執(zhí)行程序前必須置SW7=1)SW7=1 運行SW7=0 退出(返回DOS)2、流程圖3、源代碼DAT SEGMENT S0 db7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;1 led L to R S1 db0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7F

5、H;1 led R to L S2 db7FH,7FH,0DFH,0DFH,0F7H,0F7H,0FDH,0FDH;1 led L to R skip 2 S3 db0FEH,0FEH,0FBH,0FBH,0EFH,0EFH,0BFH,0BFH;1 led R to L skip 2 S4 db7FH,3FH,1FH,0FH,07H,03H,01H,00H;lighted leds 1by1 L to R S5 db0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H;lighted leds 1by1 R to L S6 db7EH,0BDH,0DBH,0E7H,0E7

6、H,0DBH,0BDH,7EH;2 leds cross S7 db0FFH,7EH,3CH,18H,00H,18H,3CH,7EH;led curtainDAT ENDSSTA SEGMENT STACKdw100dup(?)STA ENDSCOD SEGMENTASSUMECS:COD,DS:DAT,SS:STADELAY PROCPUSHCXINAL,DX;CHECK SPEEDMOVAH,AL;AH IS A COPY OF ALANDAL,30H;BIT5/BIT4 IS SPEED CTRLRORAL,1RORAL,1RORAL,1RORAL,1;OR AL,0FH;MOVBH,A

7、L;FOR OUTER LOOPMOVBL,0FFH;FOR OUTER LOOPOUTER:MOVCX,07FF0H;FOR INNER LOOPINNER:NOPLOOP INNERDECBXJNZ OUTERPOPCXRETDELAY ENDPSTART:MOVAX,DATMOVDS,AXMOVAX,STAMOVSS,AXMOVDX,0E8E0HMAIN:;MOV AL,40H;FOR DEBUGINAL,DX;FOR INPUTMOVAH,AL;AH IS A COPY OF ALSHAPE0:MOVAL,AHANDAL,07HCMPAL,00HJNZ SHAPE1MOVSI,OFFS

8、ET S0JMP SHAPEOKSHAPE1:MOVAL,AHANDAL,07HCMPAL,01HJNZ SHAPE2MOVSI,OFFSET S1JMP SHAPEOKSHAPE2:MOVAL,AHANDAL,07HCMPAL,02HJNZ SHAPE3MOVSI,OFFSET S2JMP SHAPEOKSHAPE3:MOVAL,AHANDAL,07HCMPAL,03HJNZ SHAPE4MOVSI,OFFSET S3JMP SHAPEOKSHAPE4:MOVAL,AHANDAL,07HCMPAL,04HJNZ SHAPE5MOVSI,OFFSET S4JMP SHAPEOKSHAPE5:M

9、OVAL,AHANDAL,07HCMPAL,05HJNZ SHAPE6MOVSI,OFFSET S5JMP SHAPEOKSHAPE6:MOVAL,AHANDAL,07HCMPAL,06HJNZ SHAPE7MOVSI,OFFSET S6JMP SHAPEOKSHAPE7:MOVSI,OFFSET S7 ;THE LAST CASESHAPEOK:MOVCX,08HBLINK:;CHECK PAUSE OR STOP;MOV AL,40H;FOR DEBUGINAL,DX;FOR INPUTMOVAH,AL;AH IS A COPY OF ALANDAL,80HCMPAL,80HJNZ STO

10、P;IF BIT7=0 THEN STOP MOVAL,AHANDAL,40HCMPAL,40HJNZ BLINK;IF BIT6=0 THEN PAUSEMOVAL,AHANDAL,08HCMPAL,08HJZ GETNOT;IF BIT3=1 THEN NOTMOVAL,SIJMP OUTPUTGETNOT:MOVAL,SINOTALOUTPUT:OUTDX,AL;FOR OUTPUT INCSICALL DELAY;FOR OUTPUT DELAYLOOP BLINKJMP MAINSTOP:MOVAL,0FFHOUTDX,ALMOVAH,4CHINT21HCOD ENDSEND STA

11、RT四、實驗總結(jié)通過本次實驗,我了解并熟悉了實驗臺的結(jié)構(gòu)、功能、使用方法;掌握讀寫IO端口的基本方法;學(xué)會使用Debug及編寫匯編程序。本次實驗中的代碼,從編寫,到修改,到最后定稿,經(jīng)歷的4個版本,每個版本都較前一次有質(zhì)的飛躍。在對每一個版本改進(jìn)的過程中,我都逐漸加深了對匯編語言的理解,鍛煉了匯編編程及應(yīng)用的能力。在最終版代碼中,創(chuàng)新性地在數(shù)據(jù)段中,使用了類似數(shù)組的存儲結(jié)構(gòu),存儲每個燈型的8次輸出對應(yīng)值,取代移位方法,打破了移位對燈型的限制。利用此方法,可以實現(xiàn)任意燈型。如果完全使用8個撥碼開關(guān)控制,能在一個程序中實現(xiàn)256種燈型:只需占用數(shù)據(jù)段的256*8=2k字節(jié),代碼段幾乎不用改動。實驗

12、二 8255A并行接口應(yīng)用一、實驗?zāi)康?掌握 8255A 的功能及方式 0、1 的實現(xiàn) 2熟悉 8255A 與CPU 的接口,以及傳輸數(shù)據(jù)的工作原理及編程方法。 3了解七段數(shù)碼管顯示數(shù)字的原理。 4掌握同時顯示多位數(shù)字的技術(shù)。二、實驗任務(wù)及內(nèi)容在實驗一的基礎(chǔ)上學(xué)習(xí) PIO 芯片(8255 )編程應(yīng)用,熟悉平臺的主要內(nèi)容。1、6 位數(shù)碼管靜態(tài)顯示在數(shù)碼管電路上靜態(tài)地顯示 6 位學(xué)號,當(dāng)主機(jī)鍵盤按下任意鍵時,停止顯示,返回DOS 。2、6 位數(shù)碼管動態(tài)顯示在數(shù)碼管電路 16 位數(shù)碼管上按下圖所示的規(guī)律,動態(tài)顯示字符串 HELLO,當(dāng)主機(jī)鍵盤按下任意鍵時結(jié)束。本實驗應(yīng)在上面實驗的基礎(chǔ)上完成,動態(tài)顯示

13、的速度可控制(快或慢),利用實驗一讀入端口的功能3、擴(kuò)展部分完成一個掃描鍵盤(PC口)輸入自己的學(xué)號,并在數(shù)碼管上顯示三、實驗結(jié)果1(6位數(shù)碼管靜態(tài)顯示)1、程序說明在數(shù)碼管上靜態(tài)顯示學(xué)號,可用撥碼開關(guān)切換同組兩個人的學(xué)號:SW0=1林鎮(zhèn)安210775SW0=0李達(dá)達(dá)210780撥碼開關(guān)控制程序運行/結(jié)束:(執(zhí)行程序前必須置SW7=1)SW7=1 運行SW7=0 結(jié)束(返回DOS)2、流程圖3、源代碼DAT SEGMENT AddrA DW0E800H AddrB DW0E801H AddrC DW0E802H AddrCTL DW0E803H c0 db0edh c1 db21h c2 db

14、0f4h c3 db0f1h c4 db39h c5 db0d9h c6 db0ddh c7 db61h c8 db0fdh c9 db0f9hDAT ENDSSTA SEGMENT STACKDB100HDUP(?)STA ENDSCOD SEGMENTASSUMECS:COD,DS:DAT,SS:STASHOW MACRO X,Y MOVAL,XMOVDX,AddrBOUTDX,ALMOVAL,YMOVDX,AddrAOUTDX,ALENDMSTOP:MOVDX,AddrBMOVAL,0OUTDX,ALMOVAH,4CHINT21HSTART:MOVAX,DATMOVDS,AXMOVAX,

15、STAMOVSS,AXMOVAL,80HMOVDX,AddrCTLOUTDX,ALDISPLAY:MOVDX,0E8E0HINAL,DXMOVAH,AL;AH IS A COPY OF ALANDAH,80HCMPAH,80HJNZ STOP;BIT7=0 FOR STOPANDAL,01HCMPAL,01HJZ LZA;BIT0=1 FOR LZALDD: SHOW 01H,c2 ;2 CALL DELAY SHOW 02H,c1 ;1CALL DELAY SHOW 04H,c0 ;0CALL DELAY SHOW 08H,c7 ;7CALL DELAY SHOW 10H,c8 ;8CALL

16、 DELAY SHOW 20H,c0 ;0CALL DELAYJMP DISPLAYLZA: SHOW 01H,c2 ;2 CALL DELAY SHOW 02H,c1 ;1CALL DELAY SHOW 04H,c0 ;0CALL DELAY SHOW 08H,c7 ;7CALL DELAY SHOW 10H,c7 ;7CALL DELAY SHOW 20H,c5 ;5CALL DELAYJMP DISPLAY;DELAY FOR 1MSDELAY PROCMOVCX,50OUTER:PUSHCXMOVCX,4000INNER:LOOP INNERPOPCXLOOP OUTERRETDELA

17、Y ENDPCOD ENDSEND START四、實驗結(jié)果2(6位數(shù)碼管動態(tài)顯示)1、程序說明在數(shù)碼管上動態(tài)顯示“HELLO”,4種速度可調(diào)、暫停、退出。4種速度,由SW4SW5控制SW5 SW4速度計數(shù)周期0 01倍速1*1FH0 11/2倍速2*1FH1 01/4倍速4*1FH1 11/6倍速6*1FH暫停,由SW6控制(執(zhí)行程序前必須置SW6=1)SW6=1 運行SW6=0 暫停退出,由SW7控制(執(zhí)行程序前必須置SW7=1)SW7=1 運行SW7=0 退出(返回DOS)2、流程圖3、源代碼DAT SEGMENT AddrA DW0E800H AddrB DW0E801H AddrC D

18、W0E802H AddrCTL DW0E803H MESG DB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 POINT DW MESGDAT ENDSSTA SEGMENT STACKDW100HDUP(?)STA ENDSCOD SEGMENTASSUMECS:COD,DS:DAT,SS:STASHOW MACRO X,Y MOVAL,XMOVDX,AddrBOUTDX,ALMOVAL,YMOVDX,AddrAOUTDX,ALENDMSTART:MOVAX,DATMOVDS,AXMOVAX,STAMOVSS,AXMOVAL,80H;A/B/C IN MODE 0,

19、 OUTPUTMOVDX,AddrCTLOUTDX,ALMOVSI,POINTMOVBX,POINTADDBX,7DISPLAY:MOVDX,0E8E0HINAL,DXANDAL,30HROLAL,1MOVCX,1FHORCL,AL;MOV CX,83; 0.5/(0.001*6)=83.333333SCAN: SHOW 01H,SICALL DELAY1MS SHOW 02H,SI+1CALL DELAY1MS SHOW 04H,SI+2CALL DELAY1MS SHOW 08H,SI+3CALL DELAY1MS SHOW 10H,SI+4CALL DELAY1MS SHOW 20H,S

20、I+5CALL DELAY1MSMOVDX,0E8E0HINAL,DXMOVAH,AL;AH IS A COPY OF ALANDAL,80HCMPAL,80HJNZ STOP;IF BIT7=0 THEN STOPLOOP SCANANDAH,40HCMPAH,40HJNZ NONINC;IF BIT6=0 THEN PAUSE, NONINC SIINCSINONINC:CMPSI,BXJZ NEXTJMP DISPLAYNEXT:MOVSI,POINTJMP DISPLAYDELAY1MS PROCPUSHCXMOVCX,50OUTER:PUSHCXMOVCX,4000INNER:LOO

21、P INNERPOPCXLOOP OUTERPOPCXRETDELAY1MS ENDPSTOP:MOVAL,0MOVDX,AddrAOUTDX,ALMOVDX,AddrBOUTDX,ALMOVAH,4CHINT21HCOD ENDSEND START五、實驗結(jié)果(擴(kuò)展部分)1、程序說明采用 行反轉(zhuǎn)法識別閉合鍵,把兩次讀取到的值相或; 16個按鍵分別對應(yīng)于16個這樣的值,依數(shù)值大小存成ARRAY數(shù)組;把向或得到的值與數(shù)組中的值比較,用在數(shù)組中的偏移量確定該按鍵所對應(yīng)的數(shù)值。在讀取到按鍵鍵盤輸入后,循環(huán)讀取按鍵鍵盤直到按鍵被釋放,以實現(xiàn)防抖。按鍵鍵盤上,C鍵清除所有輸入,D鍵清除最近一個輸入,E鍵

22、退出程序,返回DOS。2、流程圖3、源代碼DATA SEGMENT ID DB6DUP(0) ARRAY DB11100111B,11101011B,11101101B,11101110BDB11010111B,11011011B,11011101B,11011110BDB10110111B,10111011B,10111101B,10111110BDB01110111B,01111011B,01111101B,01111110B KEY DB0EDH,21H,0F4H,0F1H,39H;05DB0D9H,0DDH,61H,0FDH,0F9H;69 DATA ENDS;-STACK SEGME

23、NT STACK 'STACK'DB100DUP(0)STACK ENDS;-CODE SEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK ;- MAIN PROCFARMOVAX,DATAMOVDS,AXMOVES,AXMOVDX,0E823HMOVAL,16HOUTDX,ALCLEAR:XORDX,DX; Record how many digits has been storedMOVCX,6MOVAL,0XORSI,SILOPC:MOV IDSI,AL;Clear all ID value INCSILOOP LOPCDELETE:CMPDX,0

24、;Do nothing if no digitJE NEXTDECDX;Digits number decrease oneMOVAL,0MOVSI,DXMOV IDSI,ALNEXT:CALL DISP ;Display the digitsCALL READ ;Read key stateCMPAL,0FFH;No Key pressed ?JE NEXT ;No key pressed ;Key pressed!CLD;Set: DI + 1MOVCX,16MOVDI,OFFSET ARRAY REPNZSCASB;Search array to find key codeCMPCX,0

25、JE NFD ;Usually this is not going to ;happen,except sth wrong MOVBX,OFFSET ARRAYSUBDI,BXDECDICMPDI,9;Is the key 09?JBE ISNUM ;Key A and B not defined,;reserve for future use.CMPDI,12JE CLEAR ;Key C means clear all input digitsCMPDI,13;Key D means delete one digitJE DELETECMPDI,14JE EXIT ;Key E means

26、 Exit the program.JMP NEXT ISNUM:NOPAGN:CALL READ ;Key pressed!CMPAL,0FFH;Has the key been released?JNE AGN ;No:wait until it is ;released;Yes:begin to judge the key.MOVAL,KEYDIMOVSI,DXMOV IDSI,AL;Store the input number to memery.INCDXCALL DISPCMPDX,7;All display unit has been occupiedJE CLEARJMP NE

27、XTNFD:NOP;Unknown state,just terminate the program.EXIT:MOVAX,4C00HINT21HMAIN ENDP;-READ PROCNEAR;Read keyboard state, return key codePUSHDXMOVDX,0E803HMOVAL,81HOUTDX,ALMOVAL,00HMOVDX,0E802HOUTDX,ALINAL,DX;Read Row infoMOVBL,ALMOVDX,0E803HMOVAL,88HOUTDX,ALMOVAL,00HMOVDX,0E802HOUTDX,ALINAL,DX;Read Co

28、lum infoORAL,BL;Keep info in AL for SCASB POPDXRETREAD ENDP;-DISP PROCNEAR;Display 6 digitsPUSHCXPUSHDXPUSHAXMOVBP,000FHLOPP:XORSI,SIMOVCX,06HMOVDX,0E800HMOVAH,00000001BLOPD:MOVAL,IDSIOUTDX,ALMOVAL,AH;Control which char to displayINCDXOUTDX,AL;Control which LED onDECDXROLAH,1INCSICALL DELAY ;Every c

29、har need to delayLOOP LOPDDECBPJNZ LOPPPOPAXPOPDXPOPCXRETDISP ENDP;- DELAY PROC;Delay timePUSHAXPUSHCXMOVAX,0003H;Outer loopLOP1:MOVCX,00H;Inner loopLOOP$DECAXJNZ LOP1 POPCXPOPAXRETDELAY ENDP;- CODE ENDSEND MAIN六、實驗總結(jié)本次實驗比較綜合:在實驗一的基礎(chǔ)上,利用I/O端口芯片進(jìn)行綜合編程,也為實驗三打下基礎(chǔ)。程序功能較復(fù)雜,代碼較繁雜。程序設(shè)計時,采用結(jié)構(gòu)程序化方法自頂向下設(shè)計,使用結(jié)

30、構(gòu)程序化的思路,編寫多個子程序和宏,互相嵌套組合,實現(xiàn)復(fù)雜的功能。在具體實踐中,需掌握:子程序的用法,標(biāo)號及跳轉(zhuǎn)的配合,if邏輯、case邏輯、for循環(huán)邏輯、while循環(huán)邏輯在匯編語言中的實現(xiàn)方法,鍛煉了邏輯思維,強(qiáng)化了匯編的能力。實驗三 8253計數(shù)器/定時器的應(yīng)用一、實驗?zāi)康?、學(xué)習(xí)掌握8253用作定時器的編程原理。二、實驗任務(wù)及內(nèi)容1音樂發(fā)生器完成一個音樂發(fā)生器,通過蜂鳴器放出音樂,并在數(shù)碼管上顯示樂譜。根據(jù)計數(shù)器的性質(zhì),計數(shù)值音符與計數(shù)值對照(PDF中給出表格有誤)1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)低音1221089791817264中音6154

31、4845403632高音302724222018162擴(kuò)展部分利用小鍵盤實現(xiàn)彈琴功能,并顯示彈奏的樂譜。三、實驗結(jié)果1(音樂發(fā)生器)1、程序說明完成一個音樂發(fā)生器,循環(huán)播放小步舞曲全曲。能在數(shù)據(jù)段存儲:音符(17)、音階(高中低)、音長(3拍),等曲譜信息??梢酝ㄟ^修改代碼中的數(shù)據(jù)段,演奏任意簡單(只有高中低音域)簡譜(17)樂曲。數(shù)碼管第一位顯示當(dāng)前播放的音符(17,不區(qū)分高中低音)。電腦鍵盤輸入任意鍵退出程序返回DOS。2、流程圖3、源代碼DATA SEGMENT;Counter/Timer Number LOU DB122,108,97,91,81,72,64 MID DB61,54,4

32、8,45,40,36,32 HIG DB30,27,24,22,20,18,16;SongBooK XiaoBuWuQu BOK DB5,1,2,3,4DB5,1,1DB6,4,5,6,7DB1,1,1DB4,5,4,3,2DB3,4,3,2,1DB7,1,2,3,1DB2DB5,1,2,3,4DB5,1,1DB6,4,5,6,7DB1,1,1DB4,5,4,3,2DB3,4,3,2,1DB2,3,2,1,7DB1DB3,1,2,3,1DB2,5,6,7,5DB1,6,7,1,5DB4,3,4,2DB2,3,4,5,6,7DB1,7,6DB7,2,4DB5DB5,1,7,1DB6,1,7,1D

33、B5,4,3DB2,1,7,1,2DB5,6,7,1,2,3DB4,3,2DB3,5,1,7DB1 LEN EQU$-BOK;TON 1-LOW,2-MID,3-HIG TON DB2,2,2,2,2DB2,2,2DB2,2,2,2,2DB3,2,2DB2,2,2,2,2DB2,2,2,2,2DB1,2,2,2,2DB2DB2,2,2,2,2DB2,2,2DB2,2,2,2,2DB3,2,2DB2,2,2,2,2DB2,2,2,2,1DB2DB3,3,3,3,3DB3,2,2,2,2DB3,2,2,3,2DB2,2,2,2DB2,2,2,2,2DB3,2,2DB2,2,2DB2DB2,2,1,

34、2DB2,2,1,2DB2,2,2DB2,2,1,2,2DB1,1,1,2,2,2DB2,2,2DB2,2,2,1DB2;RHY 1-Quarter beat;2-Half beat;4-One beat;8-Two beat;12-Three beat. RHY DB4,2,2,2,2DB4,4,4DB4,2,2,2,2DB4,4,4DB4,2,2,2,2DB4,2,2,2,2DB4,2,2,2,2DB12DB4,2,2,2,2DB4,4,4DB4,2,2,2,2DB4,4,4DB4,2,2,2,2DB4,2,2,2,2DB4,2,2,2,2DB12DB4,2,2,2,2DB4,2,2,2,

35、2DB4,2,2,2,2DB4,2,2,4DB2,2,2,2,2,2DB4,4,4DB4,4,4DB12DB4,2,2,4DB4,2,2,4DB4,4,4DB2,2,2,2,4DB2,2,2,2,2,2DB4,4,4DB2,2,4,4DB12 KEY DB21H,0F4H,0F1H,39H,0D9H,0DDH,61H; 07 TBOK DB0 TTON DB0;never used TRHY DB0 COUNT DB0DATA ENDS;-STACK SEGMENT STACK 'STACK'DW100HDUP(?)STACK ENDS;-CODE SEGMENTASSUMED

36、S:DATA,CS:CODE,SS:STACK ;-DELAY MACRO TIME LOCAL LOPAPUSHCXMOVAX,TIME ;AX=TRHY*0FFH LOPA:MOVCX,0FFFFHLOPC:NOPLOOP LOPC;MOV CX,0H ;control time for dAX, 0FFH*188H for 0.25s;LOOP $DECAXJNZ LOPA POPCXENDM;-MUSIC MACRO;Write counter/timer number, music onMOVAL,COUNTMOVDX,0E820H;Use Counter 0OUTDX,AL;Wri

37、te counter 0ENDM;- READ PROC;Read one note/rhyme/tone MOVAL,BOKBX;BX is the order in BOK/RHY/TONXORAH,AHMOVSI,AXDECSIMOV TBOK,AL;Save noteMOVAL,RHYBXMOV TRHY,AL;Save rhymeMOVAL,TONBXCMPAL,1JE ISLOWCMPAL,2JE ISMIDCMPAL,3JE ISHIGISLOW:MOVAL,LOUSI;Find counter/timer numberJMP EXITRISMID:MOVAL,MIDSIJMP

38、EXITRISHIG:MOVAL,HIGSIEXITR:MOV COUNT,AL;Save counter/timer numberRETREAD ENDP;- RHYME PROC;Control rhymeMOVAL,TRHYMOVAH,0FFH;AH is time of Quarter beatMULAH DELAY AX;Rhyme, delay time in AXRETRHYME ENDP;-DISP PROC;Display note being playedMOVDX,0E800HMOVAL,BOKBX;Get note XORAH,AHMOVDI,AXDECDIMOVAL,

39、KEYDI;Get note charOUTDX,ALMOVAL,00000001B;Only one digit onMOVDX,0E801HOUTDX,ALRETDISP ENDP;- MAIN:;Main program start hereMOVAX,DATAMOVDS,AXMOVES,AXMOVDX,0E823H;Initialize 8253MOVAL,00010110B;Use counter 0OUTDX,ALMOVAL,80H;initialize 8255MOVDX,0E803HOUTDX,ALPLAY:MOVCX,LEN ;Get book's lengthXOR

40、BX,BX;Record current char being playedLOP:CALL READ ;Read note/rhyme/toneCALL DISP ;Display note being played MUSIC ;Music onCALL RHYME ;Control rhymeINCBX;Next noteMOVAH,0BH;Test keyboard for OVERINT21HORAL,ALJNZ OVER ;Keyboard pressed, quit programLOOP LOP ;Loop until the end of musicJMP PLAY ;Or

41、go on to playOVER:MOVDX,0E823H;Reset 8253AMOVAL,16HOUTDX,ALMOVAL,0;Reset 8255AMOVDX,0E801HOUTDX,ALMOVDX,0E800HOUTDX,ALMOVAH,4CH;Back to DOSINT21H;- CODE ENDSEND MAIN四、實驗結(jié)果2(擴(kuò)展部分)1、程序說明能播放不同音符(17)和音階(高中低),SW0=1 SW1=0時低音,SW0=0 SW1=1時高音,其他情況中音。數(shù)碼管第一位顯示當(dāng)前播放的音符(17),第二位顯示“H”(高音)或“L”(低音)。按鍵鍵盤17對應(yīng)音符17,按鍵E退出

42、返回DOS,按鍵C清除(保留)。2、流程圖3、源代碼DATA SEGMENT AddrA EQU0e800h AddrB EQU0e801h AddrC EQU0e802h AddrCTL EQU0e803hCAT DB6DUP(0);Store input note char;Keys code ARRAY DB11100111B,11101011B,11101101B,11101110BDB11010111B,11011011B,11011101B,11011110BDB10110111B,10111011B,10111101B,10111110BDB01110111B,01111011B

43、,01111101B,01111110B;Char code 09 NUM DB0EDH,21H,0F4H,0F1H,39H;05DB0D9H,0DDH,61H,0FDH,0F9H;69 ;Count number LOU DB0,122,108,97,91,81,72,64 MID DB0,61,54,48,45,40,36,32 HIG DB0,30,27,24,22,20,18,16DATA ENDS;-STACK SEGMENT STACK 'STACK'DB100DUP(0)STACK ENDS;-CODE SEGMENTASSUMEDS:DATA,CS:CODE,S

44、S:STACK ;- ;DELAY FOR 1MSDELAY1MS PROCPUSHCXMOVCX,50OUTER:PUSHCXMOVCX,4000INNER:LOOP INNERPOPCXLOOP OUTERPOPCXRETDELAY1MS ENDP;- ;SHOW NUM ON CATsSHOW MACRO X,Y PUSHAXPUSHDXMOVAL,XMOVDX,AddrBOUTDX,ALMOVAL,YMOVDX,AddrAOUTDX,ALPOPDXPOPAXENDM;- SCAN PROCPUSHSIMOVSI,Offset CAT SHOW 01H,SICALL DELAY1MS S

45、HOW 02H,SI+1CALL DELAY1MS SHOW 04H,SI+2CALL DELAY1MS SHOW 08H,SI+3CALL DELAY1MS SHOW 10H,SI+4CALL DELAY1MS SHOW 20H,SI+5CALL DELAY1MSPOPSIRETSCAN ENDPMAIN PROCFARMOVAX,DATAMOVDS,AXMOVES,AXMOVDX,0E823H;Initialize 8253AMOVAL,16HOUTDX,ALCLEAR:XORDX,DX;Record how many digits has been storedMOVCX,6MOVAL,0XORSI,SILOPC:MOV CATSI,AL;Clear all CAT value INCSILOOP LOPCNEXT:CALL SCAN ;Display notes, can display 6 a time CALL READ ;Read key stateCMPAL

溫馨提示

  • 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

提交評論