九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器

上傳人:仙*** 文檔編號(hào):28507100 上傳時(shí)間:2021-08-29 格式:DOC 頁(yè)數(shù):33 大小:389.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器_第1頁(yè)
第1頁(yè) / 共33頁(yè)
《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器_第2頁(yè)
第2頁(yè) / 共33頁(yè)
《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器_第3頁(yè)
第3頁(yè) / 共33頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書鍵盤電子樂(lè)器(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、武漢理工大學(xué)微機(jī)原理課程設(shè)計(jì)說(shuō)明書課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 專業(yè)班級(jí): 電氣0805班 指導(dǎo)教師: 工作單位: 自動(dòng)化學(xué)院 題 目: 鍵盤電子樂(lè)器初始條件:掌握匯編語(yǔ)言程序設(shè)計(jì)方法,所設(shè)計(jì)的程序運(yùn)行后可通過(guò)鍵盤控制,滿足系統(tǒng)功能,并實(shí)現(xiàn)該系統(tǒng)設(shè)計(jì)方案。在DOS,windows,匯編軟件環(huán)境下運(yùn)行。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)1.設(shè)計(jì)一個(gè)用鍵盤演奏音樂(lè)的程序,計(jì)時(shí)器系統(tǒng)設(shè)計(jì)編程定時(shí)輸出電子音調(diào),用pc機(jī)內(nèi)部8253time使揚(yáng)聲器發(fā)聲。用匯編語(yǔ)言對(duì)8253進(jìn)行編程,使其OUT0上輸出一定的頻率,將其一定頻率輸出到喇叭上,演奏出不同的音節(jié)。pc

2、機(jī)的數(shù)字鍵(17)作為電子音調(diào)的音調(diào)選擇2. 課程設(shè)計(jì)說(shuō)明書應(yīng)包括:a)設(shè)計(jì)任務(wù)及要求b)方案比較及認(rèn)證c)程序設(shè)計(jì)基本思想,程序流程圖,部分源程序及注解d)調(diào)試記錄及結(jié)果分析e)參考資料f)附錄:全部源程序清單g)總結(jié)時(shí)間安排:2011年元月07日-元月09日 選題、查閱資料和方案設(shè)計(jì)2011年元月10日-元月14日 編程2011年元月15日-元月16日 調(diào)試程序,改進(jìn)與提高2011年元月17日 撰寫課程設(shè)計(jì)報(bào)告(有調(diào)試過(guò)程及結(jié)果的截屏)2011年元月18日 答辯和交課程設(shè)計(jì)報(bào)告指導(dǎo)教師簽名: 2011 年 元 月 6 日系主任(或責(zé)任教師)簽名: 年 月 日摘要利用PC上的定時(shí)/計(jì)數(shù)芯片8

3、253A控制PC揚(yáng)聲器發(fā)聲。編寫內(nèi)核模塊,直接操作揚(yáng)聲器相關(guān)端口,或字符設(shè)備驅(qū)動(dòng),供應(yīng)用程序調(diào)用,用鍵盤使其發(fā)出不同的聲音。關(guān)鍵字:8253定時(shí)器中斷目錄1. 方案比較32.芯片介紹42.1 8255芯片簡(jiǎn)述42.1.1 8255三種方式下工作42.2 8253芯片簡(jiǎn)述52.2.1 8253六種工作方式53.通用發(fā)聲程序74.音調(diào)與頻率和時(shí)間的關(guān)系10附錄12附錄一:12附錄二:13附錄三:25附錄四:26附錄五:32參考文獻(xiàn)33鍵盤電子樂(lè)器1. 方案比較1.1 發(fā)聲程序循環(huán)優(yōu)點(diǎn):簡(jiǎn)單,易于思維缺點(diǎn):程序過(guò)于長(zhǎng),比較繁瑣1.2 調(diào)用宏,進(jìn)行發(fā)聲優(yōu)點(diǎn):程序短缺點(diǎn):不易想到2.芯片介紹 2.1 8

4、255芯片簡(jiǎn)述 圖1-1 8255引腳圖 8255可編程外圍接口芯片是Intel公司生產(chǎn)的通用并行I/O接口芯片,它具有A、B、C三個(gè)并行接口,+5V單電源供電。 2.1.1 8255三種方式下工作方式0基本輸入/輸出方式方式1選通輸入/輸出方式方式2雙向選通輸入/輸出方式 2.1.2 8255引腳圖如右圖所示,各引腳功能如:D7D0與CPU側(cè)連接的八條雙向數(shù)據(jù)線;WR(低電平有效) 寫輸入信號(hào);RD(低電平有效) 讀輸入信號(hào);CS(低電平有效) 片選輸入信號(hào);A0、A1 片內(nèi)寄存器選擇輸入信號(hào);PA7PA0 A口外設(shè)雙向數(shù)據(jù)線;PB7PB0 B口外設(shè)雙向數(shù)據(jù)線;PC7PC0 C口外設(shè)雙向數(shù)據(jù)

5、線; RESET 復(fù)位輸入信號(hào) 2.1.3 8255端口地址寄存器A口B口C口控制寄存器端口地址60H61H62H63H 2.2 8253芯片簡(jiǎn)述 8253可編程定時(shí)/計(jì)數(shù)器是Intel公司生產(chǎn)的通用外圍芯片之一,有3個(gè)獨(dú)立的十六位計(jì)數(shù)器,技術(shù)頻率范圍為02MHz,它所有的技術(shù)方式和操作方式都通過(guò)編程控制。圖1-2 8253引腳圖 2.2.1 8253六種工作方式方式0:計(jì)數(shù)結(jié)束中斷方式1:可編程頻率發(fā)生器方式2:頻率發(fā)生器方式3:方波頻率發(fā)生器方式4:軟件觸發(fā)的選通信號(hào)方式5:硬件觸發(fā)的選通信號(hào)2.2.2 8253引腳圖如上圖所示,各引腳功能如下:D7D0 八條雙向數(shù)據(jù)線;WR(低電平有效)

6、 寫輸入信號(hào);RD(低電平有效) 讀輸入信號(hào);CS(低電平有效) 片選輸入信號(hào);A0、A1 片內(nèi)寄存器地址輸入信號(hào);CLK 計(jì)數(shù)輸入,用于輸入定時(shí)基準(zhǔn)脈沖或計(jì)數(shù)脈沖;OUT 輸出信號(hào),以相應(yīng)的電平指示計(jì)數(shù)的完成,或輸出脈沖波形;GATE 選通輸入,用于啟動(dòng)或禁止計(jì)數(shù)器的操作,以使計(jì)數(shù)器和計(jì)測(cè)對(duì)象同步。2.2.3 8253端口地址寄存器0#計(jì)數(shù)器1#計(jì)數(shù)器2#計(jì)數(shù)器控制寄存器端口地址40H41H42H43H 本次課設(shè)要求用8253做。計(jì)算機(jī)中可以利用8253/54定時(shí)器來(lái)驅(qū)動(dòng)揚(yáng)聲器。連接到揚(yáng)聲器上的是定時(shí)器2,GATE2與端口61H的PB0相連,當(dāng)PB0=1時(shí),GATE2獲得高電平,使定時(shí)器2可

7、以在模式3下工作。定時(shí)器2的OUT2與端口61H的PB1通過(guò)一個(gè)與門與揚(yáng)聲器的驅(qū)動(dòng)電路相連。當(dāng)PB1=1時(shí),允許OUT2的輸出信號(hào)到達(dá)揚(yáng)聲器電路。下面是控制揚(yáng)聲器的代碼:INAL,61H;get the current setting of port BMOV AH,AL;save itORAL,00000011B;make PB0=1 and PB1=1OUT61H,AL;turn the speaker on.;how long the beep sound goes hereMOVAL,AH;get the original setting of port BOUT61H,AL;turn

8、 off the speaker 對(duì)于IBM PC兼容機(jī)來(lái)說(shuō),無(wú)論是8086,80486還是Pentium,驅(qū)動(dòng)揚(yáng)聲器的過(guò)程是相同的。至于音調(diào)發(fā)出的時(shí)間量(音長(zhǎng)),則取決于它的延遲的時(shí)間,這個(gè)延遲時(shí)間可以在PC機(jī)的80x86主處理器的幫助下實(shí)現(xiàn)。3.通用發(fā)聲程序BIOS中的BEEP子程序能根據(jù)BX中給出的計(jì)數(shù)值控制8253/54定時(shí)器,產(chǎn)生頻率為896Hz的聲音。實(shí)際上BEEP是一個(gè)很好的通用發(fā)聲程序。首先,BEEP程序只能產(chǎn)生896Hz的聲音,通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音。其次BEEP產(chǎn)生聲音的持續(xù)時(shí)間(音長(zhǎng))只能是.5s的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如是10ms的倍數(shù)。

9、給計(jì)數(shù)器2裝入計(jì)數(shù)值533H就能產(chǎn)生896Hz的聲音(1.1931MHz/896Hz=1331=533H),同樣,產(chǎn)生其他頻率聲音的計(jì)數(shù)值也可以用下式計(jì)算出來(lái): 假設(shè)發(fā)聲頻率存放在DI寄存器中,下面的指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值:MOVDX,12HMOVAX,348CHDIVDI利用CPU來(lái)產(chǎn)生延遲時(shí)間是最常用的一種方法,但對(duì)8088/86,80286,386,486以及Pentium來(lái)說(shuō),它們產(chǎn)生的延遲時(shí)間都是不一樣的。對(duì)基于8088/86的PC/XT,PS/2等PC機(jī),可用下面的程序來(lái)產(chǎn)生時(shí)間延遲:MOVCX,NDELAY:LOOPDELAY在8088/86CPU中,執(zhí)行一條LOO

10、P指令需要17個(gè)時(shí)鐘周期,因此,執(zhí)行上面的指令大約需要N*17*T時(shí)鐘周期。在BIOS中,利用上述方法來(lái)產(chǎn)生250ms延遲時(shí)間的程序如下:SUBCX,CXG7: LOOPG7;如果要產(chǎn)生與10ms成倍數(shù)的延遲時(shí)間,可在BX寄存器中放入倍數(shù)。例如,要產(chǎn)生1s的持續(xù)時(shí)間,則在BX中放入100,以控制LOOP指令執(zhí)行次,也就是10ms的100倍。指令如下: MOVBX,100WAIT: MOVCX,2800DELAY: LOOPDELAY DECBX JNZWAIT上述流程圖為:圖2-1程序流程圖下面在修改后的BEEP程序的基礎(chǔ)上,為8088/86編寫一個(gè)任一頻率(由DI指定)和任一持續(xù)時(shí)間(由CX

11、和BX指定)的通用發(fā)聲程序。此程序包括三個(gè)步驟:(1) 在8253/54中的43端口送一個(gè)控制字0B6H(10110110B),該控制字對(duì)定時(shí)器2進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)數(shù)初值。(2) 在在8253/54中的42端口(Timer2)裝入一個(gè)16位的計(jì)數(shù)值(533H*896/頻率),以建立將要產(chǎn)生的聲音頻率。(3) 把輸出端口61H的0/1兩位置1,發(fā)出聲音。GENSOUND PROC NEAR ;*PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI ;*MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 OUT

12、43H,AL ;向8253中寫入上述功能的控制字MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值MOV AX,348ch ;1193100HZ/freqDIV DI ;value of freqOUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H;從61h號(hào)端口讀取PB口現(xiàn)在的狀態(tài)MOV AH,AL ;將PB口的狀態(tài)放進(jìn)AHOR AL,3 ;將AL低兩位置1OUT 61H,AL;向61h號(hào)端口寫入一個(gè)字節(jié),打開揚(yáng)聲器WAIT1: MOV CX,20

13、00;3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,AH ;recover value of port OUT 61H,AL;從61h號(hào)端口讀入一個(gè)字節(jié);*POP DI POP DX POP CX POP BX POP AX ;*RET GENSOUND ENDPWAITF PROC NEAR PUSH AX WAITF1: IN AL,61H AND AL,10H ;check pb4CMP AL,AH ;did it changeJE WAITF1 ;wait for changeMOV AH,AL ;save the new pb4 st

14、atusLOOP WAITF1 ;continue until cx becomes 0POP AX RET WAITF ENDPGENSOUND程序能產(chǎn)生1965536Hz的聲音,這個(gè)頻率的下限19Hz是使除法不產(chǎn)生溢出的最小的DI值(DX)=12H=18d19)。其上限65536Hz是多余的,因?yàn)槿藗冏罡吣苈牭降囊纛l約為20000HZ。4.音調(diào)與頻率和時(shí)間的關(guān)系 利用計(jì)算機(jī)控制發(fā)聲的原理,可以編寫演奏樂(lè)曲的程序。在一首樂(lè)曲中,每個(gè)音符的音高和音長(zhǎng)與頻率和節(jié)拍有關(guān)。圖3-1音頻頻率對(duì)照表組成樂(lè)曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂(lè)曲程序發(fā)生所需要的兩個(gè)數(shù)據(jù)。音符的頻率可以從圖3-1中查表得到,但

15、實(shí)際上送入計(jì)數(shù)器2的是輸入頻率1.1932MHz與音符頻率相除的值,通用發(fā)聲程序SOUNDF的前半部分就是完成這個(gè)計(jì)算,并將計(jì)數(shù)值送入計(jì)數(shù)器2的功能。;MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫入上述功能的控制字MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值MOV AX,348ch ;1193100HZ/freqDIV DI ;value of freqOUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL

16、;將AL中數(shù)放到8253計(jì)數(shù)器中 ;.附錄附錄一:程序一流程圖附錄二:程序一DATA SEGMENT PARA DATAINFO1 DB 0DH,0AH,WELCOME YOU TO COME HERE!$INFO2 DB 0DH,0AH,this is a Piano program!$INFO3 DB 0DH,0AH,please press!$INFO4 DB 0DH,0AH,INPUT ERROR!$INFO5 DB 0DH,0AH,PLEASE INPUT AGAIN!$MUSLIST DB 0DH,0AH,1262 DB 0DH,0AH,2294 DB 0DH,0AH,3330 D

17、B 0DH,0AH,4347 DB 0DH,0AH,5392 DB 0DH,0AH,6440 DB 0DH,0AH,7494 DB 0DH,0AH,8524 DB 0dh,0ah,$MUS_FREG1 DW 262,-1MUS_TIME1 DW 50,25MUS_FREG2 DW 294,-1MUS_TIME2 DW 50,25MUS_FREG3 DW 330,-1MUS_TIME3 DW 50,25MUS_FREG4 DW 347,-1MUS_TIME4 DW 50,25MUS_FREG5 DW 392,-1MUS_TIME5 DW 50,25MUS_FREG6 DW 440,-1MUS_T

18、IME6 DW 50,25MUS_FREG7 DW 494,-1MUS_TIME7 DW 50,25MUS_FREG8 DW 524,-1MUS_TIME8 DW 50,25DATA ENDSSTACK SEGMENT PARA STACK STACK DB 200 DUP (STACK)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,0;設(shè)置顯示方式 MOV AL,4;設(shè)置顯示方式 INT 10H;調(diào)用顯示器中斷 MOV AH,0BH;設(shè)置背景顏色

19、或彩色組 MOV BH,0;設(shè)置背景顏色 MOV BL,2;藍(lán)色 INT 10H;調(diào)用顯示器中斷 MOV AH,0BH;設(shè)置背景顏色或彩色組 MOV BH,01H;設(shè)置字體顏色 MOV BL,1;黑色 INT 10H;調(diào)用顯示器中斷;*定義一個(gè)宏*;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。;如果輸出操作被重定向,那么,將無(wú)法判斷磁盤已滿入口參數(shù):AH09HDS:DX待輸出字符的地址;說(shuō)明:待顯示的字符串以$作為其結(jié)束標(biāo)志SHOW MACRO b LEA DX,b MOV AH,9 INT 21H ENDM;* show INFO1;顯示字符串 show INFO2;顯示字符串 sh

20、ow INFO3;顯示字符串 show MUSLIST;顯示字符串INPUT: MOV AH,01H;設(shè)置光標(biāo)類型 INT 21H;調(diào)用中斷,返回dos CMP AL,Q;是否按下Q JZ retu;是則跳轉(zhuǎn),不是繼續(xù)向下運(yùn)行 CMP AL,1;是否按下1 JNZ B0;不是1跳轉(zhuǎn),是繼續(xù)向下運(yùn)行 CALL MUSIC1;跳轉(zhuǎn)到MUSIC1程序 JMP EXIT1;跳轉(zhuǎn)EXIT1B0: CMP AL,2;是否按下2 JNZ C0;不是2則跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC2;調(diào)用 MUSIC2程序 JMP EXIT1;跳轉(zhuǎn)到EXIT1C0: CMP AL,3;是否按下3 JNZ D0;不是

21、3跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC3;跳轉(zhuǎn)到MUSIC3程序 JMP EXIT1D0: CMP AL,4;是否按下4 JNZ E0;不是4跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC4;跳轉(zhuǎn)到MUSIC4程序 JMP EXIT1 E0: CMP AL,5;是否按下5 JNZ F0;不是5跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC5;跳轉(zhuǎn)到MUSIC5程序 JMP EXIT1F0: CMP AL,6;是否按下6 JNZ G0;不是6跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC6;跳轉(zhuǎn)到MUSIC6程序 JMP EXIT1G0: CMP AL,7;是否按下7 JNZ H0;不是7跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL

22、MUSIC7;跳轉(zhuǎn)到MUSIC7程序 JMP EXIT1H0: CMP AL,8;是否按下8 JNZ exit;不是8跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC8;跳轉(zhuǎn)到MUSIC8程序EXIT1: show INFO5;顯示字符 JMP INPUT ;跳轉(zhuǎn)到INPUTEXIT: call clear;跳轉(zhuǎn)到clear show INFO4;顯示字符 show INFO5;顯示字符 show INFO1;顯示字符 show INFO2;顯示字符 show INFO3;顯示字符 show MUSLIST;顯示字符 jmp input;跳轉(zhuǎn)到INPUTRETU: MOV AH,4CH;帶返回碼返回 I

23、NT 21H;調(diào)用dos中斷MAIN ENDP MUSIC1 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG1;puts the freg table offset in SI LEA BP,DS:MUS_TIME1;puts the time table offset in BPFREG1: MOV DI,SI;read next frequency CMP DI,-1;end of tone JE END_MUS1;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,5400

24、 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG1 ;go process next noteEND_MUS1: RETMUSIC1 ENDPGENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL;向8253中寫入上述功能的控制字 MOV DX,12H MOV AX,533H*896 DIV DI OUT

25、 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H;從61h號(hào)端口讀入一個(gè)字節(jié) MOV AH,AL OR AL,3 OUT 61H,AL;向61h號(hào)端口寫入一個(gè)字節(jié)WAIT1: MOV CX,8FF0H;向CX中寫入數(shù)DELAY1: LOOP DELAY1;延時(shí) DEC BX;BX-1 JNZ WAIT1;運(yùn)算結(jié)果不為0,則ZF=0,則轉(zhuǎn)移 MOV AL,AH OUT 61H,AL;從61h號(hào)端口讀入一個(gè)字節(jié) POP DI POP DX POP CX POP BX POP AX RETGENSOUND E

26、NDPMUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2FREG2: MOV DI,SI CMP DI,-1 JE END_MUS2 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS2: RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3FREG3: MOV

27、 DI,SI CMP DI,-1 JE END_MUS3 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS3: RETMUSIC3 ENDPMUSIC4 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG4;puts the freg table offset in SI LEA BP,DS:MUS_TIME4;puts the time table offset in BPFREG4: MOV DI,SI;read next frequency

28、 CMP DI,-1;end of tone JE END_MUS4;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,5400 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG4 ;go process next noteEND_MUS4: RETMUSIC4 ENDPMUSIC5 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG5;puts the freg tabl

29、e offset in SI LEA BP,DS:MUS_TIME5;puts the time table offset in BPFREG5: MOV DI,SI;read next frequency CMP DI,-1;end of tone JE END_MUS5;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,5400 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG5 ;go process next not

30、eEND_MUS5: RETMUSIC5 ENDPMUSIC6 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG6;puts the freg table offset in SI LEA BP,DS:MUS_TIME6;puts the time table offset in BPFREG6: MOV DI,SI;read next frequency CMP DI,-1;end of tone JE END_MUS6;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,540

31、0 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG6 ;go process next noteEND_MUS6: RETMUSIC6 ENDPMUSIC7 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG7;puts the freg table offset in SI LEA BP,DS:MUS_TIME7;puts the time table offset in BPFREG7: MOV DI,SI;read next

32、frequency CMP DI,-1;end of tone JE END_MUS7;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,5400 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG7 ;go process next noteEND_MUS7: RETMUSIC7 ENDPMUSIC8 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG8;puts the

33、freg table offset in SI LEA BP,DS:MUS_TIME8;puts the time table offset in BPFREG8: MOV DI,SI;read next frequency CMP DI,-1;end of tone JE END_MUS8;if yes,exit MOV DX,DS:BP;else,fetch the duration MOV BX,5400 CALL GENSOUND;play the note ADD SI,2;update the table pointer ADD BP,2 JMP FREG8 ;go process

34、 next noteEND_MUS8: RETMUSIC8 ENDPclear proc near push ax push bx push cx push dx mov ah,6;讀當(dāng)前光標(biāo)位置設(shè)置 mov al,0;上滾行數(shù) mov ch,0;上滾窗口左上角的行、列號(hào) mov cl,0;上滾窗口左上角的行、列號(hào) mov dh,24;上滾窗口右下角的行號(hào) mov dl,79;上滾窗口右下角的列號(hào) mov bh,7;空白行的屬性 int 10h;調(diào)用顯示器中斷 pop dx pop cx pop bx pop ax retclear endpCODE ENDS END MAIN附錄三:程序二流

35、程圖附錄四:程序二DATA SEGMENT msg DB 0DH,0AH, 1 2 3 4 5 6 7 DB 0DH,0AH, q w e r t y u DB 0DH,0AH, a s d f g h j DB 0DH,0AH,_ DB 0DH,0AH,9: EXIT DB 0DH,0AH,_,$ ;*音調(diào)*后面用到-1判斷音樂(lè)播是否放完 sound_0 DW -1;sound_0 DW -1 sound_11 DW 131,-1;sound_11 DW 441,-1 sound_12 DW 147,-1;sound_12 DW 495,-1 sound_13 DW 165,-1;sound

36、_13 DW 556,-1 sound_14 DW 175,-1;sound_14 DW 589,-1 sound_15 DW 196,-1;sound_15 DW 661,-1 sound_16 DW 220,-1;sound_16 DW 742,-1 sound_17 DW 247,-1;sound_17 DW 833,-1 sound_21 DW 524,-1 sound_22 DW 588,-1 sound_23 DW 660,-1 sound_24 DW 698,-1 sound_25 DW 784,-1 sound_26 DW 880,-1 sound_27 DW 988,-1 s

37、ound_1 DW 262,-1;sound_1 DW 882,-1 sound_2 DW 294,-1;sound_2 DW 990,-1 sound_3 DW 330,-1;sound_3 DW 1112,-1 sound_4 DW 349,-1;sound_4 DW 1178,-1 sound_5 DW 392,-1;sound_5 DW 1322,-1 sound_6 DW 440,-1;sound_6 DW 1484,-1 sound_7 DW 492,-1;sound_7 DW 1655,-1 time DW 10;time DW 50DATA ENDS ;*STACK SEGME

38、NT Db 200 DUP (STACK) STACK ENDS ;*CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AH,00H ;設(shè)置顯示方式 MOV AL,12H;設(shè)置顯示方式 INT 10H;調(diào)用顯示器中斷8;*定義一個(gè)宏* ;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。;如果輸出操作被重定向,那么,將無(wú)法判斷磁盤已滿入口參數(shù):AH09HDS:DX待輸出字符的地址;說(shuō)明:待顯示的字符串以$作為其結(jié)束標(biāo)志SHOW MACRO b LEA DX,b MOV AH,9 INT

39、21H ENDM;*一個(gè)聲音宏*onesound macro soundis,jumpis,letteris CMP AL,letteris JNZ jumpis LEA SI,soundis LEA BP,DS:time CALL MUSIC JMP input ENDMshow msgINPUT: MOV AH,01H;設(shè)置光標(biāo)類型 INT 21H ;調(diào)用中斷,返回dos CMP AL,9;是否按下9 jnz go;按下9則轉(zhuǎn)移 mov ah,4ch;帶返回碼結(jié)束 int 21h;調(diào)用DOS中斷go: onesound sound_11,a0,a;q調(diào)用宏a0: onesound soun

40、d_12,b0,s;w調(diào)用宏b0: onesound sound_13,c0,d;e調(diào)用宏c0: onesound sound_14,d0,f;r調(diào)用宏d0: onesound sound_15,e0,g;t調(diào)用宏e0: onesound sound_16,f0,h;y調(diào)用宏f0: onesound sound_17,g0,j;u調(diào)用宏g0: onesound sound_1,h0,q;1調(diào)用宏h0: onesound sound_2,i0,w;2調(diào)用宏i0: onesound sound_3,j0,e;3調(diào)用宏j0: onesound sound_4,k0,r;4調(diào)用宏k0: onesoun

41、d sound_5,l0,t;5調(diào)用宏l0: onesound sound_6,m0,y;6調(diào)用宏m0: onesound sound_7,n0,u;7調(diào)用宏n0: onesound sound_21,o0,1;a調(diào)用宏o0: onesound sound_22,p0,2;s調(diào)用宏p0: onesound sound_23,q0,3;d調(diào)用宏q0: onesound sound_24,r0,4;f調(diào)用宏r0: onesound sound_25,s0,5;g調(diào)用宏s0: onesound sound_26,t0,6;h調(diào)用宏t0: onesound sound_27,u0,7;j調(diào)用宏u0:

42、onesound sound_0,z0,alz0: jmp input;*發(fā)聲*GENSOUND PROC NEAR ;*PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI ;*MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫入上述功能的控制字MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值MOV AX,348ch ;1193100HZ/freqDIV DI ;value of freqOUT 42H,AL;將AL中數(shù)放到82

43、53計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H;從61h號(hào)端口讀取PB口現(xiàn)在的狀態(tài)MOV AH,AL ;將PB口的狀態(tài)放進(jìn)AHOR AL,3 ;將AL低兩位置1OUT 61H,AL;向61h號(hào)端口寫入一個(gè)字節(jié),打開揚(yáng)聲器WAIT1: MOV CX,2000;3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,AH ;recover value of port OUT 61H,AL;從61h號(hào)端口讀入一個(gè)字節(jié);*POP DI POP DX POP CX POP BX POP AX ;*RET

44、GENSOUND ENDP;*WAITF PROC NEAR PUSH AX WAITF1: IN AL,61H AND AL,10H ;CHECK PB4CMP AL,AH ;DID IT CHANGEJE WAITF1 ;WAIT FOR CHANGEMOV AH,AL ;SAVE THE NEW PB4 STATUSLOOP WAITF1 ;CONTINUE UNTIL CX BECOMES 0POP AX RET WAITF ENDP;*MUSIC PROC NEAR PUSH DS SUB AX,AX PUSH AX FREG: MOV DI,SICMP DI,-1;音樂(lè)是否放完?JE END_MUSMOV BX,DS:BP CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG END_MUS: RET MUSIC ENDP CODE ENDS ;*END START附錄五參考文獻(xiàn) 1 沈美明.IBM-PC匯編語(yǔ)言程序設(shè)計(jì)(第二版).北京:清華大學(xué)出版社 2 彭虎.微機(jī)原理與接口技術(shù).電子工業(yè)出版社 3 王爽.匯編語(yǔ)言.北京:清華大學(xué)出版社 4 劉叔軍.匯編語(yǔ)言應(yīng)用與實(shí)例.北京:機(jī)械工業(yè)出版社33

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!