歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:28389960       資源大?。?span id="zia5yy0" class="font-tahoma">592.50KB        全文頁(yè)數(shù):27頁(yè)
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

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

武漢理工大學(xué)《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)說(shuō)明書 目錄 摘要 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 摘要 隨著科學(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è)通道工作在“方波發(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ù)表;然后編寫程序一次取出表中的頻率和時(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è)演奏 音樂(lè)演奏 1 設(shè)計(jì)任務(wù)及要求分析 1.1設(shè)計(jì)任務(wù) 編寫音樂(lè)程序,按大寫字母“A”,奏一首歌曲;按大寫字母“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),通道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ì)喇叭發(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的開(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)行操作,可以不必要過(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è)置顯示模式和光標(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)生主要用到通道2。 8253通道2的計(jì)數(shù)由8255A的PB0控制,當(dāng)PB0輸出為高電平時(shí),使門控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ò)“與門”;反之,則可以通過(guò)“與門”控制揚(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)行界面 輸入錯(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 ;字符屬性,黑底黃字 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ù)書寫相同的代碼。不定義為子程序是為了避免多次調(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, ---------------------$ 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, 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è)頻率。將與一個(gè)頻率對(duì)應(yīng)的計(jì)數(shù)器初值寫入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 ;寫入方式控制字 OUT 43H,AL ;寫入控制端口 MOV DX,12H MOV AX,348CH DIV 頻率值 ;頻率轉(zhuǎn)換成計(jì)數(shù)初值 OUT 42H,AL ;低8位送2號(hào)計(jì)數(shù)器 MOV 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)輸出控制門。發(fā)聲程序代碼如下: IN AL,61H ;讀取8255A的PB端口原輸出值 MOV AH,AL ;將原輸出值保存于AH中 OR AL,3 ;使PB0、PB1、均為1 OUT 61H,AL ;打開(kāi)GATE2門,輸出方波到揚(yáng)聲器 5.3音樂(lè)編程 一首歌曲包含節(jié)拍和頻率,此處定義的音樂(lè)地址宏包含兩個(gè)參數(shù),所以音樂(lè)編程需要對(duì)音樂(lè)的節(jié)拍時(shí)間以及樂(lè)譜(頻率)進(jìn)行編寫程序。當(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ù),一首歌曲只有一個(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.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 ;改變,保護(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 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)系后,可以按照樂(lè)曲的樂(lè)譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義為兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值和時(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,392,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,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,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)始 鍵盤輸入 提示信息 輸入是“Q”? Y N 輸入是“B”? 輸入是“A”? 調(diào)用MUSIC Y 顯示出錯(cuò)信息 N 調(diào)用MUSIC Y 退出 N 圖5-5 主程序流程圖 GENSOUND子程序流程圖BX=0? 返回MUSIC 恢復(fù)寄存器 調(diào)用WAITF 設(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 源程序 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, 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, ~~~~~~~~~~~~~~~~~~~~~~ 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 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 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,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 (STACK) 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 ;********************************************* 定義宏 SHOW MACRO b LEA DX,b ;將提示語(yǔ)的偏移地址送入DX MOV AH,9 ;調(diào)用中斷,輸出多字符 INT 21H ENDM ;********************************************* 音樂(lè)地址宏 ADDRESS MACRO A,B LEA SI,A ;將頻率表的偏移地址送入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 ;比較字符 JZ 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 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 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è) 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 ;******************************************發(fā)聲 GENSOUND PROC NEAR PUSH AX ;保護(hù)寄存器 PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;寫入方式控制字 OUT 43H,AL ;輸出到控制端口 MOV DX,12H MOV AX,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,AL ;打開(kāi)GATE2門,輸出方波到揚(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ù)寄存器 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 ;低4位清零 cmp al,ah ;檢查PB3是否改變 je waitf1 ;等待改變 mov ah,al ;改變,保護(hù)新端口值 loop waitf1 ;繼續(xù),直到CX=0 pop ax ;恢復(fù)寄存器 ret waitf endp ;********************************************* MUSIC PROC 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 ;調(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é)果分析 將源程序編寫完成后,在pc機(jī)上,使用軟件MASM進(jìn)行調(diào)試運(yùn)行。,剛開(kāi)始編譯時(shí),出現(xiàn)了很多的變量未定義的錯(cuò)誤,經(jīng)過(guò)反復(fù)檢查,將拼寫錯(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 圖6-3 播放音樂(lè)B 圖6-4 按‘Q’退出 結(jié)束語(yǔ) 對(duì)于此次的課程設(shè)計(jì),我感受頗深。此次課程設(shè)計(jì)讓我了解到編寫程序的復(fù)雜性,對(duì)于理論知識(shí)的重要性有了跟深刻的認(rèn)識(shí),完成設(shè)計(jì)最重要的因素就是對(duì)微機(jī)原理知識(shí)的掌握,為了完成本次課程設(shè)計(jì),查閱了相關(guān)書籍,學(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í)的系統(tǒng)化,現(xiàn)實(shí)化,更有利于自己的查漏補(bǔ)缺。書本上的知識(shí)是死的,能夠在現(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ò)編寫程序,增加了學(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]沈美明溫冬蟬. 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 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讀/寫方式 RL1RL0 通道讀寫操作 00 計(jì)數(shù)器鎖存 01 只讀寫低8位字節(jié) 10 只讀寫高8位字節(jié) 11 讀寫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

注意事項(xiàng)

本文(微機(jī)原理課程設(shè)計(jì) 音樂(lè)演奏)為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  sobing.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),我們立即給予刪除!