微機(jī)原理課程設(shè)計(jì) 音樂(lè)演奏

上傳人:仙*** 文檔編號(hào):28389960 上傳時(shí)間:2021-08-27 格式:DOC 頁(yè)數(shù):27 大?。?92.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
微機(jī)原理課程設(shè)計(jì) 音樂(lè)演奏_第1頁(yè)
第1頁(yè) / 共27頁(yè)
微機(jī)原理課程設(shè)計(jì) 音樂(lè)演奏_第2頁(yè)
第2頁(yè) / 共27頁(yè)
微機(jī)原理課程設(shè)計(jì) 音樂(lè)演奏_第3頁(yè)
第3頁(yè) / 共27頁(yè)

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

15 積分

下載資源

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

資源描述:

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

1、武漢理工大學(xué)《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)說(shuō)明書(shū) 目錄 摘要 1 音樂(lè)演奏 2 1 設(shè)計(jì)任務(wù)及要求分析 2 1.1設(shè)計(jì)任務(wù) 2 1.2要求分析 2 2 方案比較與選擇 3 2.1方案一 3 2.2方案二 3 2.3方案選擇 3 3 系統(tǒng)原理說(shuō)明 3 4 硬件電路與原理 4 5 軟件設(shè)計(jì) 5 5.1屏幕顯示程序設(shè)計(jì) 5 5.2發(fā)聲的原理與控制程序 7 5.3音樂(lè)編程 8 5.3.1音樂(lè)節(jié)拍時(shí)間 9 5.3.2音樂(lè)的音符頻率 10 5.4 程序流程圖 12 5.5 源程序 14 6調(diào)試記錄及結(jié)果分析 20 結(jié)束語(yǔ) 22 參考文獻(xiàn) 23 附錄 24

2、 摘要 隨著科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)在各個(gè)領(lǐng)域的應(yīng)用越來(lái)越廣泛。計(jì)算機(jī)已成為人們生活、學(xué)習(xí)、工作中必備的工具。其中,匯編語(yǔ)言是計(jì)算機(jī)能夠提供給用戶使用的最快而有效的語(yǔ)言,也是能夠利用計(jì)算機(jī)所有特性并能直接控制硬件的唯一語(yǔ)言。借助于匯編程序,計(jì)算機(jī)本身可以自動(dòng)地把匯編源程序翻譯成用機(jī)器語(yǔ)言表示的目的程序,從而實(shí)現(xiàn)了程序設(shè)計(jì)工作的部分自動(dòng)化。音樂(lè)演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂(lè)譜編程。通過(guò)相應(yīng)的頻率表將樂(lè)譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過(guò)延時(shí)程序利用硬件實(shí)現(xiàn)頻率計(jì)數(shù)和延時(shí)時(shí)間的控制,利用8253-5定時(shí)/計(jì)數(shù)器芯片和8255A并行I/O接口芯片。使8253的一個(gè)通道工作在“方波

3、發(fā)生器”模式,實(shí)現(xiàn)對(duì)頻率的計(jì)數(shù);利用8255A的PB3端口實(shí)現(xiàn)發(fā)聲時(shí)間的計(jì)數(shù)控制。轉(zhuǎn)化為對(duì)喇叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。知道了音調(diào)與頻率和時(shí)間的關(guān)系,就可以按照樂(lè)曲的曲譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表;然后編寫(xiě)程序一次取出表中的頻率和時(shí)間值,調(diào)用程序發(fā)出各種聲音。這個(gè)程序最終通過(guò)菜單所提示的信息選取音樂(lè)。以80X86未處理器為 對(duì)象,以8253為計(jì)數(shù)器的核心,通過(guò)宏指令和BOIS系統(tǒng)功能的調(diào)用,以及運(yùn) 用MASM軟件在PC機(jī)上來(lái)進(jìn)行調(diào)試和運(yùn)行,從而模擬地來(lái)實(shí)現(xiàn)“音樂(lè)演奏”的目的。 關(guān)鍵詞:樂(lè)譜編程 8253定時(shí)/計(jì)數(shù)器 MASM 音樂(lè)演奏

4、 音樂(lè)演奏 1 設(shè)計(jì)任務(wù)及要求分析 1.1設(shè)計(jì)任務(wù) 編寫(xiě)音樂(lè)程序,按大寫(xiě)字母“A”,奏一首歌曲;按大寫(xiě)字母“B”;奏另一首歌曲,曲目自選。按Q退出程序。(盡量演奏完整曲目) 1.2要求分析 在PC機(jī)中都帶有8253-5定時(shí)/計(jì)數(shù)器,IBM-PC/AT中帶有8254定時(shí)/計(jì)數(shù)器,這兩種芯片功能十分類似。本文通過(guò)對(duì)8253-5定時(shí)/計(jì)數(shù)器芯片的操作實(shí)現(xiàn)音樂(lè)演奏。該聲音接口通過(guò)匯編語(yǔ)言對(duì)8253-5的端口直接進(jìn)行操作,可以不必要過(guò)多的使用BIOS的調(diào)用和DOS的調(diào)用。 計(jì)數(shù)器芯片有3個(gè)通道,各自具有專用功能。通道0時(shí)系統(tǒng)的始終節(jié)拍計(jì)時(shí)器,通道1專用于產(chǎn)生動(dòng)態(tài)RAM的定時(shí)刷新信號(hào)

5、,通道2用來(lái)控制計(jì)算機(jī)的揚(yáng)聲器的聲音頻率。該音樂(lè)演奏主要用到通道2的功能,使通道2工作在“方波發(fā)生器”方式,產(chǎn)生相應(yīng)頻率的音調(diào)送至喇叭驅(qū)動(dòng)電路,使喇叭發(fā)出不同音調(diào)的聲音。使用8255A的PB1控制通道2的輸出對(duì)揚(yáng)聲器產(chǎn)生控制的時(shí)間。 人機(jī)交互包括屏幕顯示提示語(yǔ)以及人工輸入相應(yīng)參數(shù),主要應(yīng)用到BIOS的10H號(hào)中斷調(diào)用以及DOS的21H號(hào)中斷調(diào)用。BIOS的10H號(hào)中斷調(diào)用用于顯示器驅(qū)動(dòng),設(shè)置顯示模式和光標(biāo)位置;DOS的21H號(hào)中斷調(diào)用用于單字符輸入以及多字符輸出顯示。 音樂(lè)演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂(lè)譜編程。通過(guò)相應(yīng)的頻率表將樂(lè)譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過(guò)延時(shí)程序轉(zhuǎn)化為對(duì)喇

6、叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。 2 方案比較與選擇 2.1方案一 通過(guò)編程使用軟件來(lái)實(shí)現(xiàn)計(jì)數(shù)和喇叭發(fā)聲的時(shí)間設(shè)置,控制8255A并行I/O接口驅(qū)動(dòng)喇叭發(fā)聲。CPU每執(zhí)行一條指令需要耗費(fèi)一定的時(shí)間,這樣可以通過(guò)循環(huán)的方式設(shè)置好循環(huán)次數(shù),實(shí)現(xiàn)軟件計(jì)數(shù),然后輸出相應(yīng)的高低電平,驅(qū)動(dòng)喇叭發(fā)出對(duì)應(yīng)頻率和節(jié)拍的聲音。 2.2方案二 利用硬件實(shí)現(xiàn)頻率計(jì)數(shù)和延時(shí)時(shí)間的控制,利用8253-5定時(shí)/計(jì)數(shù)器芯片和8255A并行I/O接口芯片。使8253的一個(gè)通道工作在“方波發(fā)生器”模式,實(shí)現(xiàn)對(duì)頻率的計(jì)數(shù);利用8255A的PB1端口實(shí)現(xiàn)發(fā)聲時(shí)間的計(jì)數(shù)控制。這樣可以精確的控制時(shí)間,減少CPU的

7、開(kāi)支。 2.3方案選擇 方案一的優(yōu)點(diǎn)是可以減少硬件開(kāi)支,便于調(diào)試和問(wèn)題的查找。缺點(diǎn)是CPU開(kāi)支太大,利用率不高,而且時(shí)間不夠精準(zhǔn);方案二的優(yōu)點(diǎn)是控制精度提高,同時(shí)也減少CPU的開(kāi)支。缺點(diǎn)是硬件開(kāi)銷比較多。本設(shè)計(jì)實(shí)現(xiàn)的功能所需要的硬件電路并不是太復(fù)雜,一般的IBM-PC/XT/AT機(jī)家族都帶有相應(yīng)的硬件電路。在提高精度與簡(jiǎn)易程度的比較下,決定采用方案二,這樣可以大大提高時(shí)間控制精度,同時(shí)減少軟件程序的復(fù)雜度。 3 系統(tǒng)原理說(shuō)明 在IBM-PC/XT機(jī)中都帶有8253-5定時(shí)/計(jì)數(shù)器,本文通過(guò)對(duì)8253-5定時(shí)/計(jì)數(shù)器芯片的操作實(shí)現(xiàn)音樂(lè)演奏。該聲音接口通過(guò)匯編語(yǔ)言對(duì)8253-5的端口直接進(jìn)

8、行操作,可以不必要過(guò)多的使用BIOS的調(diào)用和DOS的調(diào)用。 計(jì)數(shù)器芯片有3個(gè)通道,各自具有專用功能。通道0時(shí)系統(tǒng)的始終節(jié)拍計(jì)時(shí)器,通道1專用于產(chǎn)生動(dòng)態(tài)RAM的定時(shí)刷新信號(hào),通道2用來(lái)控制計(jì)算機(jī)的揚(yáng)聲器的聲音頻率。該音樂(lè)演奏主要用到通道2的功能,使通道2工作在“方波發(fā)生器”方式,產(chǎn)生相應(yīng)頻率的音調(diào)送至喇叭驅(qū)動(dòng)電路,使喇叭發(fā)出不同音調(diào)的聲音。使用8255A的PB0控制通道2的計(jì)數(shù),PB1控制通道2的輸出對(duì)揚(yáng)聲器產(chǎn)生控制的時(shí)間。 人機(jī)交互包括屏幕顯示提示語(yǔ)以及人工輸入相應(yīng)參數(shù),主要應(yīng)用到BIOS的10H號(hào)中斷調(diào)用以及DOS的21H號(hào)中斷調(diào)用。BIOS的10H號(hào)中斷調(diào)用用于顯示器驅(qū)動(dòng),設(shè)置顯示模式

9、和光標(biāo)位置;DOS的21H號(hào)中斷調(diào)用用于單字符輸入以及多字符輸出顯示。 音樂(lè)演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂(lè)譜編程。通過(guò)相應(yīng)的頻率表將樂(lè)譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過(guò)延時(shí)程序轉(zhuǎn)化為對(duì)喇叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。 4 硬件電路與原理 IBM-PC/XT內(nèi)部8253電路圖如圖4-1所示。 圖4-1 8253電路連接圖 8253的通道0用于產(chǎn)生固定頻率的時(shí)鐘節(jié)拍,通道1用于產(chǎn)生固定頻率的的刷新信號(hào),通道2用于產(chǎn)生頻率信號(hào),工作在方式3,計(jì)數(shù)值為6A4H=1190,方波輸出頻率為1.19MHZ。此信號(hào)頻率決定揚(yáng)聲器的音調(diào),通道2的控制字為0B6H。音樂(lè)產(chǎn)生主要用

10、到通道2。 8253通道2的計(jì)數(shù)由8255A的PB0控制,當(dāng)PB0輸出為高電平時(shí),使門(mén)控GATE2為高電平。此時(shí),8253通道2允許計(jì)數(shù),故通道2的輸出方波受PB0的控制,從而控制揚(yáng)聲器的音調(diào)高低。通道2的輸出能否對(duì)揚(yáng)聲器產(chǎn)生持續(xù)控制還取決于8255A的PB1。當(dāng)PB1為“0”時(shí),OUT2不能通過(guò)“與門(mén)”;反之,則可以通過(guò)“與門(mén)”控制揚(yáng)聲器。 所以,揚(yáng)聲器發(fā)音時(shí)間的長(zhǎng)短取決于8255A的PB1信號(hào)。另外CPU通過(guò)讀8255A的C口,得知8253通道2的狀態(tài)和揚(yáng)聲器驅(qū)動(dòng)器的狀態(tài)。 5 軟件設(shè)計(jì) 5.1屏幕顯示程序設(shè)計(jì) 程序運(yùn)行時(shí),屏幕顯示第一界如圖 圖5-1運(yùn)行界面

11、 輸入錯(cuò)誤時(shí),提示信息界面如圖 圖5-2,錯(cuò)誤提示界面 上述提示信息在數(shù)據(jù)段定義,類型為字節(jié)型。首先調(diào)用BIOS中斷的10H號(hào)功能設(shè)置文本模式。程序如下: MOV AH,00H ;BIOS 10子功能 MOV AL,02H ;80*25彩色文本模式 INT 10H ;BIOS 10功能調(diào)用 然后調(diào)用背景清屏子程序使文本屏幕清空,為輸入信息作準(zhǔn)備,清屏子程序如下: CLR PROC NEAR MOV BH,0 ;第0頁(yè) MOV BL,0EH ;字符屬性,

12、黑底黃字 MOV DX,0000H ;0行0列 MOV AL, ;輸出的字符 MOV CX,80*25 ;循環(huán)次數(shù) MOV AH,02H ;BIOS 10H子功能調(diào)用,置光標(biāo)位置 INT 10H MOV AH,09H ;BIOS 10H子功能調(diào)用,輸出字符 INT 10H RET CLR ENDP 最后輸出提示語(yǔ)字符。輸出提示語(yǔ)字符時(shí),需要多次使用一段相同的輸出代碼,將該代碼定義為宏,可以避免多次重復(fù)書(shū)

13、寫(xiě)相同的代碼。不定義為子程序是為了避免多次調(diào)用使執(zhí)行速度減慢。相應(yīng)宏定義語(yǔ)句為: SHOW MACRO b LEA DX, b ;將相應(yīng)字符段的偏移地址裝入DX MOV AH, 9 ;DOS 21H號(hào)中斷9子功能輸出多字符 INT 21H ENDM 則相應(yīng)的字符提示信息輸出代碼為 INFO1 DB 0DH,0AH, Music player$ INFO2 DB 0DH,0AH, -------

14、--------------$ INFO3 DB 0DH,0AH, PLEASE SELECT A MUSIC $ INFO4 DB 0DH,0AH, ---------------------$ INFO5 DB 0DH,0AH, ERROR! INPUT A B or Q$ INFO6 DB 0DH,0AH, PLEASE INPUT AGAIN!$ MUSLIST DB 0DH,0AH,

15、 A LAN HUA CAO DB 0DH,0AH, B HAPPY BIRTHDAY TO YOU DB 0DH,0AH, Q EXIT DB 0DH,0AH, ~~~~~~~~~~~~~~~~~~~~~~ DB 0DH,0AH, $ 5.2發(fā)聲的原理與控制程序 一首樂(lè)曲由若干音符組成,一個(gè)音符對(duì)應(yīng)一個(gè)頻

16、率。將與一個(gè)頻率對(duì)應(yīng)的計(jì)數(shù)器初值寫(xiě)入2號(hào)計(jì)數(shù)器(端口地址為42H),揚(yáng)聲器就發(fā)出相應(yīng)的音調(diào),計(jì)數(shù)器初值的計(jì)算公式: 計(jì)數(shù)器初值=1193182/輸出頻率 其中,1193182Hz轉(zhuǎn)換成十六進(jìn)制為12348CH,因此在打開(kāi)揚(yáng)聲器的條件下,執(zhí)行下列程序段即可發(fā)出與輸出頻率對(duì)應(yīng)的音調(diào)。 MOV AL,0B6H ;寫(xiě)入方式控制字 OUT 43H,AL ;寫(xiě)入控制端口 MOV DX,12H MOV AX,348CH DIV 頻率值 ;頻率轉(zhuǎn)換成計(jì)數(shù)初值 OUT 42H,AL ;低8位送2號(hào)計(jì)數(shù)器 M

17、OV AL,AH OUT 42H,AL ;高位送2號(hào)計(jì)數(shù)器 接下來(lái)設(shè)計(jì)發(fā)聲程序,發(fā)聲系統(tǒng)受8255A芯片(端口地址為60H-63H)的兩根輸出線PB0和PB1的控制,PB0輸出的高電平使2號(hào)計(jì)數(shù)器正常工作,PB1輸出高電平打開(kāi)輸出控制門(mén)。發(fā)聲程序代碼如下: IN AL,61H ;讀取8255A的PB端口原輸出值 MOV AH,AL ;將原輸出值保存于AH中 OR AL,3 ;使PB0、PB1、均為1 OUT 61H,AL ;打開(kāi)GATE2

18、門(mén),輸出方波到揚(yáng)聲器 5.3音樂(lè)編程 一首歌曲包含節(jié)拍和頻率,此處定義的音樂(lè)地址宏包含兩個(gè)參數(shù),所以音樂(lè)編程需要對(duì)音樂(lè)的節(jié)拍時(shí)間以及樂(lè)譜(頻率)進(jìn)行編寫(xiě)程序。當(dāng)選擇不同的歌曲時(shí),主程序調(diào)用不同的宏,將用戶要求的歌曲的頻率和節(jié)拍導(dǎo)入,實(shí)現(xiàn)音樂(lè)的演 奏。 5.3.1音樂(lè)節(jié)拍時(shí)間 控制音符的演奏時(shí)間,這是設(shè)計(jì)音樂(lè)程序的關(guān)鍵問(wèn)題。最直觀的方法是按照譜為每一個(gè)音符規(guī)定一個(gè)演奏時(shí)間。在遇到一首不熟悉歌曲時(shí),初期很難確定每個(gè)音符的演唱時(shí)間,而調(diào)試程序的需大量的時(shí)間。為每一個(gè)音符規(guī)定“單位時(shí)間”: 單位時(shí)間*N=音符的延長(zhǎng)時(shí)間 其中,N為調(diào)試參數(shù),

19、一首歌曲只有一個(gè)調(diào)試參數(shù)。設(shè)計(jì)程序時(shí)可以用EQU偽指令定義調(diào)試參數(shù),初值現(xiàn)行估算,調(diào)試時(shí)在修改它。 節(jié)拍時(shí)間設(shè)置好以后,就可以利用延時(shí)程序,通過(guò)PB1端口控制發(fā)聲的時(shí)間長(zhǎng)短。 80x86的各種處理器采用6-66MHZ的工作頻率,LOOP治理的執(zhí)行時(shí)間在這些處理器上也不同。為了建立一個(gè)與處理器無(wú)關(guān)的時(shí)間延遲,IBM采用了一個(gè)利用硬件產(chǎn)生時(shí)間延遲的方法,即通過(guò)監(jiān)控端口61H的PB4,使PB4每15.08us觸發(fā)一次,以產(chǎn)生一個(gè)固定不變的時(shí)間基準(zhǔn),在IBM-PC/XT 中的BIOS中的WAITF子程序,就是一個(gè)產(chǎn)生N*15.08us時(shí)間延遲的程序,調(diào)用WAITF子程序時(shí),CX寄存器必須裝入15.

20、08us的倍數(shù)N。 本程序延時(shí)程序參考上面的原理,代碼如下: waitf proc near ;延時(shí)保護(hù)程序 push ax ;保護(hù)寄存器 waitf1: in al,61h ;讀取PB端口地址 and al,10h ;低四位清零 cmp al,ah ;檢查是否改變 je waitf1 ;等待改變 mov ah,al

21、;改變,保護(hù)新端口值 loop waitf1 ;繼續(xù),直到CX=0 pop ax ;恢復(fù)寄存器 ret waitf endp 5.3.2音樂(lè)的音符頻率 程序用MUS_FREG、MUS_TIME分別定義了音樂(lè)頻率和節(jié)拍。使得發(fā)聲程序可以按照理想的要求發(fā)出連續(xù)的樂(lè)曲。節(jié)拍和頻率定義原理如下: 樂(lè)曲是按照一定的高低、長(zhǎng)短和強(qiáng)弱關(guān)系組成的音調(diào),在每一首樂(lè)曲中,每個(gè)音符的音高和音長(zhǎng)與發(fā)聲系統(tǒng)中的頻率、節(jié)拍有關(guān)。可參考下表: 表5-1 音符頻率 音名 C D E F G

22、 A B C D E F G A B C 唱名 1 2 3 4 5 6 7 1 2 3 4 5 6 7 i 頻率 131 147 165 175 196 220 247 262 294 330 349 392 440 492 523 其中,低音階從低音C(131HZ)到中央C(262HZ),高音階從中央C(262HZ)到高音C(523HZ)。組成樂(lè)曲的音符的頻率值和持續(xù)時(shí)間是樂(lè)曲程序發(fā)聲所必需的兩組數(shù)據(jù),頻率可以查上表,音符的持續(xù)時(shí)間根據(jù)樂(lè)曲的速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定。 知道了音調(diào)及頻率、時(shí)間的關(guān)系后

23、,可以按照樂(lè)曲的樂(lè)譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義為兩個(gè)數(shù)據(jù)表,然后編寫(xiě)程序依次取出表中的頻率值和時(shí)間值。 本次設(shè)計(jì)所選的兩首音樂(lè)樂(lè)譜如圖 圖5-3 蘭花草樂(lè)譜 圖5-4生日快樂(lè)樂(lè)譜 根據(jù)上述原理對(duì)兩首音樂(lè)進(jìn)行編程,得到的程序?yàn)? ;******************************* 蘭花草 MUS_FREG1 DW 220,330,330,330,330,294 DW 262,294,262,247,220 DW 4 dup(440),440,392 DW 330,39

24、2,392,349,330 DW 330,440,440,392,330,294 DW 262,294,262,247,220,165 DW 165,262,262,247,220,330 DW 294,262,247,196,220,-1 MUS_TIME1 DW 30,30,30,30,60,30 DW 30,15,30,30,120 DW 30,30,30,30,80,30 DW 30,

25、30,30,30,120 DW 30,30,30,30,60,30 25 DW 30,30,30,30,60,60 DW 30,30,30,30,60,60 DW 30,15,30,30,120 MUS_FREG2 DW 196,196,220,196,262,247 DW 196,196,220,196,294,262 DW 196,196,392,330,262,247,220 DW 349,349,330,

26、262,294,262,-1 MUS_TIME2 DW 30,30,60,60,60,120 DW 30,30,60,60,60,120 DW 30,30,60,60,60,60,60 DW 30,30,60,60,60,120 5.4 程序流程圖 主流程圖 開(kāi)始 鍵盤(pán)輸入 提示信息 輸入是“Q”? Y N

27、 輸入是“B”? 輸入是“A”? 調(diào)用MUSIC Y 顯示出錯(cuò)信息 N 調(diào)用MUSIC Y 退出 N 圖5-5 主程序流程圖 GENSOUND子程序流程圖BX=0? 返回MUSIC 恢復(fù)寄存器 調(diào)用WAITF

28、 設(shè)置CX初始值 計(jì)數(shù)初值裝入2號(hào)計(jì)數(shù)器 求取發(fā)聲頻率 設(shè)置計(jì)數(shù)器2工作方式 寄存器入棧 程序調(diào)用 開(kāi)始計(jì)數(shù)并打開(kāi)揚(yáng)聲器 Y N 圖5-6 GENSOUND子程序流程圖 MUSIC子程序流程圖 圖5-7 music子程序流程圖 5.5

29、源程序 DATA SEGMENT INFO1 DB 0DH,0AH, Music player$ INFO2 DB 0DH,0AH, ---------------------$ INFO3 DB 0DH,0AH, PLEASE SELECT A MUSIC $ INFO4 DB 0DH,0AH, ---------------------$ INFO5 DB 0DH,0AH,

30、 ERROR! INPUT A B or Q$ INFO6 DB 0DH,0AH, PLEASE INPUT AGAIN!$ MUSLIST DB 0DH,0AH, A LAN HUA CAO DB 0DH,0AH, B HAPPY BIRTHDAY TO YOU DB 0DH,0AH, Q EXIT DB 0DH,0AH,

31、 ~~~~~~~~~~~~~~~~~~~~~~ DB 0DH,0AH, $ ;*************************************** 蘭花草 MUS_FREG1 DW 220,330,330,330,330,294 DW 262,294,262,247,220 DW 4 dup(440),440,392 DW 330,392,392,349,330

32、 DW 330,440,440,392,330,294 DW 262,294,262,247,220,165 DW 165,262,262,247,220,330 DW 294,262,247,196,220,-1 MUS_TIME1 DW 30,30,30,30,60,30 DW 30,15,30,30,120 DW 30,30,30,30,80,30 DW 30,30,30,30,120

33、 DW 30,30,30,30,60,30 DW 30,30,30,30,60,60 DW 30,30,30,30,60,60 DW 30,15,30,30,120 ;***********************************happy birthday to you MUS_FREG2 DW 196,196,220,196,262,247 DW 196,196,220,196,294,262 DW 196,196,392,330,262,247,

34、220 DW 349,349,330,262,294,262,-1 MUS_TIME2 DW 30,30,60,60,60,120 DW 30,30,60,60,60,120 DW 30,30,60,60,60,60,60 DW 30,30,60,60,60,120 ;********************************************* DATA ENDS STACK SEGMENT DB 200 DUP (STAC

35、K) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AH,00H ;BIOS 10子功能 MOV AL,02H ;80*25彩色文本模式 INT 10H ;BIOS 10功能調(diào)用 CALL CLR

36、 ;********************************************* 定義宏 SHOW MACRO b LEA DX,b ;將提示語(yǔ)的偏移地址送入DX MOV AH,9 ;調(diào)用中斷,輸出多字符 INT 21H ENDM ;********************************************* 音樂(lè)地址宏 ADDRESS MACRO A,B LEA SI,A

37、 ;將頻率表的偏移地址送入SI LEA BP,DS:B ;將節(jié)拍時(shí)間表的偏移地址送入BP ENDM ;****** show INFO1 show INFO2 show INFO3 show INFO4 show MUSLIST INPUT: MOV AH,01H ;等待輸入一個(gè)字符 INT 21H CMP AL,Q ;比較字符 J

38、Z retu ;是,返回 CMP AL,A ;與A比較 JNZ B0 ;不等再比較 ADDRESS MUS_FREG1,MUS_TIME1 ;取數(shù)據(jù) CALL MUSIC ;調(diào)用音樂(lè)子程序 JMP EXIT1 B0: CMP AL,B JNZ exit ADDRESS MUS_FREG2,MUS_TIME2

39、 CALL MUSIC EXIT1: JMP INPUT ;繼續(xù)等待輸入 EXIT: MOV AH,00H ;BIOS 10子功能 MOV AL,02H ;80*25彩色文本模式 INT 10H ;BIOS 10功能調(diào)用 CALL CLR ;背景清屏 show INFO5 ;輸入錯(cuò)誤,顯示提示語(yǔ) show INFO6

40、 show INFO1 show INFO2 show INFO3 show INFO4 show MUSLIST jmp input RETU: MOV AH,4CH ;返回 INT 21H ;********************************************* ;背景清屏 CLR PROC NEAR MOV BH,0 ;第0頁(yè)

41、 MOV BL,0eh ;字符屬性 黑底黃字 MOV DX,0000H ;0行0列 MOV AL, ;要輸出的字符 MOV CX,80*25 ;循環(huán)次數(shù) MOV AH,02H ;置光標(biāo)位置 INT 10H MOV AH,09H ;BIOS 10子功能調(diào)用,輸出字符 INT 10H RET CLR ENDP ;**

42、****************************************發(fā)聲 GENSOUND PROC NEAR PUSH AX ;保護(hù)寄存器 PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;寫(xiě)入方式控制字 OUT 43H,AL ;輸出到控制端口 MOV DX,12H MOV AX,

43、348ch DIV DI ;得到發(fā)聲頻率 OUT 42H,AL ;發(fā)送低字節(jié) MOV AL,AH OUT 42H,AL ;發(fā)送高字節(jié) IN AL,61H ;讀取8255A的PB端口原輸出值 MOV AH,AL ;將原輸出值保存于AH中 OR AL,3 ;使PB1、PB0均為1 OUT 61H,

44、AL ;打開(kāi)GATE2門(mén),輸出方波到揚(yáng)聲器 WAIT1: MOV CX,3314 ;延時(shí) call waitf DELAY1: DEC BX ;節(jié)拍時(shí)間值減1 JNZ WAIT1 MOV AL,AH ;取回AH中的8255A的PB端口原輸出值 OUT 61H,AL ;恢復(fù)8255A的PB端口 POP DI ;恢復(fù)寄存器

45、 POP DX POP CX POP BX POP AX RET GENSOUND ENDP ;******************************************** waitf proc near ;延時(shí)子程序 push ax ;保護(hù)寄存器 waitf1: in al,61h ;讀取PB端口值 and al,10h

46、 ;低4位清零 cmp al,ah ;檢查PB3是否改變 je waitf1 ;等待改變 mov ah,al ;改變,保護(hù)新端口值 loop waitf1 ;繼續(xù),直到CX=0 pop ax ;恢復(fù)寄存器 ret waitf endp ;********************************************* MUSIC PROC

47、 NEAR ;音樂(lè)子程序 PUSH DS ;壓入數(shù)據(jù)段 SUB AX,AX ;標(biāo)志位清零 PUSH AX FREG: MOV DI,[SI] ;取音符頻率,送DI CMP DI,-1 ;結(jié)束? JE END_MUS ;是,退出 MOV BX,DS:[BP] ;取音符持續(xù)時(shí)間 CALL GENSOUND

48、 ;調(diào)用GENSOUND發(fā)聲子程序 ADD SI,2 ;頻率表指針增2 ADD BP,2 ;時(shí)間表指針增2 JMP FREG ;繼續(xù)演奏 END_MUS: RET ;返回 MUSIC ENDP CODE ENDS END START 6調(diào)試記錄及結(jié)果分析 將源程序編寫(xiě)完成后,在pc機(jī)上,使用軟件MASM進(jìn)行調(diào)試運(yùn)行。,剛開(kāi)始編譯時(shí),出

49、現(xiàn)了很多的變量未定義的錯(cuò)誤,經(jīng)過(guò)反復(fù)檢查,將拼寫(xiě)錯(cuò)誤的地方一一改正,隨后發(fā)現(xiàn)在按照提示正確輸入時(shí),可以演奏音樂(lè),但是當(dāng)輸入錯(cuò)誤的字符時(shí),發(fā)現(xiàn)屏幕并不顯示錯(cuò)誤提示語(yǔ),經(jīng)過(guò)多次檢查和調(diào)試,發(fā)現(xiàn)是沒(méi)有清屏程序重新設(shè)置文本顯示模式,加上該段代碼后程序運(yùn)行正常。 調(diào)試過(guò)程中聲音的節(jié)拍調(diào)試時(shí)間比較長(zhǎng),多次取值后得到一個(gè)可以識(shí)別的演奏聲音。解決完程序中的問(wèn)題后,按提示語(yǔ)輸入相應(yīng)的字符命令,可以播放相應(yīng)的歌曲或是退出,輸入錯(cuò)誤時(shí)會(huì)出現(xiàn)錯(cuò)誤提示語(yǔ)句?;灸軐?shí)現(xiàn)要求的功能。 由于設(shè)計(jì)結(jié)果是播放音樂(lè),所以無(wú)法從圖上看出,調(diào)試運(yùn)行的過(guò)程如圖所示。 圖6-1 masm界面 圖6-2 播放音樂(lè)A

50、 圖6-3 播放音樂(lè)B 圖6-4 按‘Q’退出 結(jié)束語(yǔ) 對(duì)于此次的課程設(shè)計(jì),我感受頗深。此次課程設(shè)計(jì)讓我了解到編寫(xiě)程序的復(fù)雜性,對(duì)于理論知識(shí)的重要性有了跟深刻的認(rèn)識(shí),完成設(shè)計(jì)最重要的因素就是對(duì)微機(jī)原理知識(shí)的掌握,為了完成本次課程設(shè)計(jì),查閱了相關(guān)書(shū)籍,學(xué)到了很多課外知識(shí)。提高了自己的匯編語(yǔ)言的能力。這次微機(jī)原理課程設(shè)計(jì)為我們提供了與眾不同的學(xué)習(xí)方法和學(xué)習(xí)機(jī)會(huì),讓我們從傳統(tǒng)的被動(dòng)授學(xué)轉(zhuǎn)變?yōu)橹鲃?dòng)求學(xué),把所學(xué)的理論知識(shí)真正的運(yùn)用到實(shí)踐中學(xué)習(xí),增強(qiáng)了領(lǐng)悟、創(chuàng)新和推斷的能力。 實(shí)踐操作在此次課程設(shè)計(jì)中也非常重要,上機(jī)實(shí)踐有助于書(shū)本知識(shí)的系統(tǒng)化,現(xiàn)實(shí)化,更有利于自己的查漏補(bǔ)缺。書(shū)本上的知識(shí)是死的

51、,能夠在現(xiàn)實(shí)中運(yùn)用的知識(shí)才是活的。 通過(guò)這次課程設(shè)計(jì),也促進(jìn)了我們的同學(xué)之間互相學(xué)習(xí),通過(guò)同學(xué)之間相互討論,分組設(shè)計(jì),增強(qiáng)了我們的團(tuán)隊(duì)合作能力。 總之,本次的課程設(shè)計(jì)過(guò)程中收獲了很多,通過(guò)編寫(xiě)程序,增加了學(xué)習(xí)的積極性和趣味性。通過(guò)課程實(shí)踐,鞏固加深對(duì)課堂教學(xué)內(nèi)容的理解,提高學(xué)生運(yùn)用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)和動(dòng)態(tài)調(diào)試程序的能力,培養(yǎng)同學(xué)克服困難的毅力和精神,提高學(xué)生綜合解決問(wèn)題的能力。 參考文獻(xiàn) [1]彭虎.周佩玲.微機(jī)原理與接口技術(shù).北京:電子工業(yè)出版社,2011 [2]王爽.匯編語(yǔ)言第2版.北京:清華大學(xué)出版社,2008 [3]沈美明溫冬蟬.

52、IBM-PC匯編語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社,2001 [4]王成端.李曉波.匯編語(yǔ)言程序設(shè)計(jì)[M] .北京:高等教育出版社,2003年8月 [5]楊季文.80X86匯編語(yǔ)言程序設(shè)計(jì)教程.清華大學(xué)出版社,2001年9月 附錄 8253芯片資料 附表1 8253控制字格式 D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC2 RL1 RL0 M2 M1 M0

53、 BCD 附表2 8253端口選擇 A1A0 端口 00 通道0 01 通道1 10 通道2 11 控制口 附表3 8253通道選擇 SC1SC0 對(duì)應(yīng)的通道 00 通道0 01 通道1 10 通道2 11 不用 附表4 8253讀/寫(xiě)方式 RL1RL0 通道讀寫(xiě)操作 00 計(jì)數(shù)器鎖存 01 只讀寫(xiě)低8位字節(jié) 10 只讀寫(xiě)高8位字節(jié) 11 讀寫(xiě)16位 附表5 計(jì)數(shù)數(shù)制選擇 BCD 計(jì)數(shù)制式選擇 0 二進(jìn)制計(jì)數(shù)制 1 BCD計(jì)數(shù)制 附表6 8253工作方式選擇 M2M1M0 工作方式選擇 000 工作方式0 001 工作方式1 10 工作方式2 11 工作方式3 100 工作方式4 101 工作方式5

展開(kāi)閱讀全文
溫馨提示:
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),我們立即給予刪除!