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

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

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

15 積分

下載資源

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

資源描述:

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

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

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

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

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

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

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

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

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

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

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

11、 輸入錯誤時,提示信息界面如圖 圖5-2,錯誤提示界面 上述提示信息在數(shù)據(jù)段定義,類型為字節(jié)型。首先調(diào)用BIOS中斷的10H號功能設(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頁 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 最后輸出提示語字符。輸出提示語字符時,需要多次使用一段相同的輸出代碼,將該代碼定義為宏,可以避免多次重復(fù)書

13、寫相同的代碼。不定義為子程序是為了避免多次調(diào)用使執(zhí)行速度減慢。相應(yīng)宏定義語句為: SHOW MACRO b LEA DX, b ;將相應(yīng)字符段的偏移地址裝入DX MOV AH, 9 ;DOS 21H號中斷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ā)聲的原理與控制程序 一首樂曲由若干音符組成,一個音符對應(yīng)一個頻

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

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

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

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

20、08us的倍數(shù)N。 本程序延時程序參考上面的原理,代碼如下: waitf proc near ;延時保護(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音樂的音符頻率 程序用MUS_FREG、MUS_TIME分別定義了音樂頻率和節(jié)拍。使得發(fā)聲程序可以按照理想的要求發(fā)出連續(xù)的樂曲。節(jié)拍和頻率定義原理如下: 樂曲是按照一定的高低、長短和強(qiáng)弱關(guān)系組成的音調(diào),在每一首樂曲中,每個音符的音高和音長與發(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)。組成樂曲的音符的頻率值和持續(xù)時間是樂曲程序發(fā)聲所必需的兩組數(shù)據(jù),頻率可以查上表,音符的持續(xù)時間根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定。 知道了音調(diào)及頻率、時間的關(guān)系后

23、,可以按照樂曲的樂譜將每個音符的頻率和持續(xù)時間定義為兩個數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值和時間值。 本次設(shè)計所選的兩首音樂樂譜如圖 圖5-3 蘭花草樂譜 圖5-4生日快樂樂譜 根據(jù)上述原理對兩首音樂進(jì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 程序流程圖 主流程圖 開始 鍵盤輸入 提示信息 輸入是“Q”? Y N

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

28、 設(shè)置CX初始值 計數(shù)初值裝入2號計數(shù)器 求取發(fā)聲頻率 設(shè)置計數(shù)器2工作方式 寄存器入棧 程序調(diào)用 開始計數(shù)并打開揚(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 ;將提示語的偏移地址送入DX MOV AH,9 ;調(diào)用中斷,輸出多字符 INT 21H ENDM ;********************************************* 音樂地址宏 ADDRESS MACRO A,B LEA SI,A

37、 ;將頻率表的偏移地址送入SI LEA BP,DS:B ;將節(jié)拍時間表的偏移地址送入BP ENDM ;****** show INFO1 show INFO2 show INFO3 show INFO4 show MUSLIST INPUT: MOV AH,01H ;等待輸入一個字符 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)用音樂子程序 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 ;輸入錯誤,顯示提示語 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頁

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 ;寫入方式控制字 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 ;打開GATE2門,輸出方波到揚(yáng)聲器 WAIT1: MOV CX,3314 ;延時 call waitf DELAY1: DEC BX ;節(jié)拍時間值減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 ;延時子程序 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 ;音樂子程序 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ù)時間 CALL GENSOUND

48、 ;調(diào)用GENSOUND發(fā)聲子程序 ADD SI,2 ;頻率表指針增2 ADD BP,2 ;時間表指針增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)行。,剛開始編譯時,出

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

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

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

52、IBM-PC匯編語言程序設(shè)計.北京:清華大學(xué)出版社,2001 [4]王成端.李曉波.匯編語言程序設(shè)計[M] .北京:高等教育出版社,2003年8月 [5]楊季文.80X86匯編語言程序設(shè)計教程.清華大學(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 對應(yīng)的通道 00 通道0 01 通道1 10 通道2 11 不用 附表4 8253讀/寫方式 RL1RL0 通道讀寫操作 00 計數(shù)器鎖存 01 只讀寫低8位字節(jié) 10 只讀寫高8位字節(jié) 11 讀寫16位 附表5 計數(shù)數(shù)制選擇 BCD 計數(shù)制式選擇 0 二進(jìn)制計數(shù)制 1 BCD計數(shù)制 附表6 8253工作方式選擇 M2M1M0 工作方式選擇 000 工作方式0 001 工作方式1 10 工作方式2 11 工作方式3 100 工作方式4 101 工作方式5

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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

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

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


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

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲