




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、專業課程設計報告書專業課程設計報告書課程名稱: 微機原理與接口技術 設計名稱: 音樂發生器 學生姓名: 專 業: 班 別: 學 號: 指導老師: 日 期: 2016 年 06 月 28 日目錄目錄1. 項目概述項目概述.12. 設計要求設計要求.13. 系統設計系統設計.24. 硬件設計硬件設計.34.1 電路圖.34.2 元件清單.35. 軟件設計軟件設計.45.1 程序流程圖.4(1)主程序流程圖)主程序流程圖.45.2 程序清單.5程序調程序調試試.96. 小結小結.10參考文獻參考文獻.1111. 項目概述項目概述 匯編語言是計算機能夠提供給用戶使用的最快而有效的語言,也是能夠利用計算
2、機所有特性并能直接控制硬件的唯一語言。借助于匯編程序,計算機本身可以自動地把 匯編源程序翻譯成用機器語言表示的目的程序,從而實現了程序設計工作的部分自動化。掌握一些程序設計的基本方法,要指導主程序,子程序以及推棧段的使用,了解通用發聲程序。了解與掌握定時、計數、音樂、頻率、時間之間的關系,學會用發聲程序的設計方法,學會用匯編語言編輯音樂程序。2. 設計要求設計要求(1)需要的基本知識與技能。 具備匯編語言設計、編寫、調試和運行程序的方法和技巧。在 PC 機上運行匯編程序需要經過以下幾個階段:編輯源程序。利用文本編輯工具編輯源程序,生成一個匯編語言的純文本文件。文件的擴展名為.ASM匯編源程序。
3、用匯編器匯編源程序生成目標代碼文件,目標代碼文件的擴展名是.OBJ,匯編器還可以生成列表文件和交叉參考文件。匯編器相當于高級語言中的編譯器。匯編語言按照匯編語言的語法檢查源程序,如果源程序語法有錯誤,匯編器就不生成目標代碼文件,這時,必須重新編輯源程序,修改語法錯誤。當發現源程序有的行含有不確定因素,匯編器會給出警告信,但按卻省處理方法生成目標代碼文件。此時,可以重新編輯源程序,消去不確定因素。連接目標程序。利用連接器連接目標代碼程序和庫函數代碼生成可執行程序文件。一般單個模塊的連接可以順利地生成可執行程序文件。當多個模塊連接,或者庫函數連接時,如果在目標代碼中找不到所需的連接信息,連接器就會
4、發生錯誤提示信息,而不是生成可執行文件。這時,這就要重新編輯源程序,并匯編程序。調試可執行程序。程序的動態調試是在形成可執行文件后,針對可執行程序進行的。DEBUG 是簡單的動態調試工具,利用調試工具動態的調試程序,找出程序中的問題,那么就要重新編輯,匯編源程序。(2)尚未掌握的知識點。有時在程序中定義了較多的 宏,或者可以把自己編譯中常用的宏定義建立一個獨立的文件,這個只包含若干定義宏文件的文件可稱為宏庫,通常用擴展名 MAC 或 INC 來表示。當應用程序中需要用到宏庫中的宏定義時,只需要用語句說明。有時匯編語言程序需要連續重復地完成相同或者幾乎完全相同的一組代碼,這時,可使用重復匯編。匯
5、編程序把重復模塊代碼重復幾次,每次重復把重復塊中的啞元用自變量表中的一項取代,下一次取代一次,重復次數由自變量表中的自變量個數來確定。條件匯編中,匯編程序能夠根據條件把一段源程序或者把它排去在外,這里用到條件偽操作。條件偽操作可以用在宏定義體內,也可以用在宏定義體外,并且可以嵌套任意次。模塊化程序設計方法是按照各部分程序所實現的不同功能把程序劃分成為多個模板。各個模板在明確各自的功能和相互間的約定后,就可以編制和調試程序,最后把它們連接起來形成一個大程序,子程序結構是模塊化程序設計的基礎。子程序相當于高級語言中的過程和函數。在一個程序的不同部分,往往就要用到類似的程序段,這寫程序段的功能個結構
6、形式都相同,只是有的變量賦值不同,此時就可以把這些程序寫成子程序形式,以便需要時調擁它。計算機中有一個可編程時間間隔定時器 8253/54,它能根據程序提供的計數值和工作模式,產生各種計數/定時脈沖,提供給系統的各個部分使用。先要設定控制字,以選擇計數器,確定工作模式和計數的值。每個計數器由 3 個外引腿與外部聯系,在對任一個計數妻2編程時,首先將控制字節寫入控制寄存器。控制字的作用是告訴 8253/54 選擇那一個計數器工作,要求輸入什么樣的脈沖波形。另外對其初始化工作好包括,向選定計數器送一個初值。PC 機上的大多數 I/O 都是主板的 8255 的可編程外圍接口芯便管理的,PPI 包括三
7、個8 位寄存器,兩個用于輸入功能,一個用于輸出功能。利用 CPU 產生延遲時間是最常用的方法,但是對于不同的計算機,它們產生的延遲時間都是不一樣的。組成樂曲的每個音符的頻率和持續時間是樂曲程序發聲所需要的兩個數據。音符的持續時間是根據樂曲的速度及每個音符的節拍來確定的。在 4/4 中,四分音符為一拍,每小節四拍,全音符持續四拍,四分音符持續一拍,八分音符持續半拍等。3. 系統設計系統設計這次課程設計的設計思想是在熟練掌握匯編程序的設計方法的基礎上,利用通用發生程序編寫音樂程序組成音樂的每個音符的頻率值和持續時間是音樂程序發聲所需要的兩個數據,根據音調與頻率和時間之間的關系,把要編輯的音樂的每個
8、音符的頻率和持續時間定義成兩個數據表,進而把它們寫入通用發聲程序,音樂程序就完成。在編制此音樂演奏程序時,應該知道 ROM BIOS 中有個 BEEP 子程序,這能根據 BL 中組出的時間計數值控制 8254 定時器,產生持續時間為 1 個或幾個 0.5 秒,頻率為 896HZ 的聲音,我們可以利用并修改 BEEP,使其產生任一頻率的聲音。首先要了解計算機是如何產生聲音和樂曲的。找出相關程序源代碼,弄清楚各功能的環節間的聯系、聯接方法,搞清楚單調與頻率和時間的關系,利用計算機控制發聲的原理,依照基本的算法思想寫程序,測試,更正,擴充功能,修飾細節。本次設計在具體設計過程中的整體設計思路如下:該
9、程序主要分成 根據音階表和簡譜為演奏的樂曲定義一個頻率表 mus_freq 和一個時間表 mus_time。分別將兩個表的偏移地址放入 SI 和 BP。lea si, mus_freqlea bp, ds:mus_time從表中取出音符的頻率放入 DI,取出音符的持續時間(實際上是 10ms 的倍數)放入BX。mov di, simov bx, ds:bp頻率表中最后一個數據-1 作為樂曲的結束符,也可用其他的特殊值來代替。調用通用發聲子程序 SOUNDF 發出音調。這個程序比較簡單,如果想演奏另一個樂曲,只需把 mus_freq 和 mus_time 兩個表中的數據換成另一個樂曲的頻率和節拍
10、時間就可以了。該算法的整體思路是在這個設計中用到了 BEEP 通用發聲程序,我們利用對 BEEP 程序的修改讓它產生任何一種頻率的聲音,也可以讓聲音的持續時間更容易被調整 在編譯的過程中,用到了子程序調用,分別根據輸入調用 music1,music2,music3 程序還要調用子程序 gensound 發出音調,主要特點是程序簡單明了,有良好的交互界面。程序的主要功能是給用戶提供三首已經寫好的短曲,根據用戶的選擇演奏樂曲,演奏完一首樂曲后跳回起始狀態,如此循環,直到用戶輸入結束的信息為止。本程序設計過程的整體設計思路是通過定義數據段,堆棧段和代碼段實現程序的各種要求。其中堆棧段是為樂曲的音調及
11、頻率的數據分配空間;數據段是記錄程序運行過程中所需的信息,包括字符信息,單調數據,音頻數據;代碼段則是程序算法部分, 通過對各數據的調用,實現音樂演奏功能。找出相關程序源代碼,弄清楚各功能的環節間的聯系、聯接方3法,搞清楚單調與頻率和時間的關系,寫出其中的一個音樂文件的代碼,理解其在總程序中的作用。依照基本的算法思想寫程序,測試,更正,擴充功能,修飾細節。系統的主要功能:給用戶提供三首已經寫好的短曲,根據用戶的選擇演奏樂曲,演奏完一首樂曲后跳回起始狀態,如此循環,直到用戶輸入結束的信息為止。4. 硬件設計硬件設計4.1 電路圖4.2 元件清單45. 軟件設計軟件設計5.1 程序流程圖(1)主程
12、序流程圖圖圖 1 主程序流程圖主程序流程圖(2)Music 子程序流程圖5DI= -1返回 DOS 界面并重新輸入字符GENSOUND子程序取下一頻率值和下一時間值開始結束圖圖 2 Music 子程序流程圖子程序流程圖5.2 程序清單程序清單如下:;數據段DATA SEGMENT PARA DATAINFO1 DB 0DH,0AH,WELCOME YOU TO COME HERE!$INFO2 DB 0DH,0AH,this is a music program!$INFO3 DB 0DH,0AH,please select!$INFO4 DB 0DH,0AH,INPUT ERROR!$INF
13、O5 DB 0DH,0AH,PLEASE INPUT AGAIN!$MUSLIST DB 0DH,0AH,A MUSIC1 DB 0DH,0AH,B MUSIC2 DB 0DH,0AH,C MUSIC3 DB 0DH,0AH,Q EXIT db 0dh,0ah,$MUS_FREG1 DW 330,294,262,294,3 DUP (330) ;音樂 1 的頻率表 1,2 小節 DW 3 DUP (294),330,392,392 ;3,4 小節 DW 330,294,262,294,4 DUP (330) ;5,6 小節 DW 294,294,330,294,262,-1 ;7,8 小節MU
14、S_TIME1 DW 6 DUP (25*8),50*8 ;音樂 1 的時間節拍表 1,2 小節 DW 2 DUP (25*8,25*8,50*8) ;3,4 小節 DW 12 DUP (25*8),100*8 ;58 小節MUS_FREG2 DW 330,392,330,294,330,392,330,294,330 DW 330,392,330,294,262,294,330,392,294 DW 262,262,220,196,196,220,262,294,332,262,-1MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,5
15、0,25,25),100 DW 3 DUP(50,25,25),1006MUS_FREG3 DW 262,262,294,262,349 DW 330,262,262,294,262 DW 392,349,262,262,523 DW 440,349,262,262,466 DW 466,440,262,392,349,-1MUS_TIME3 DW 50,50,100,100,100 DW 100,100,50,50,100,100 DW 100,100,100,50,50,100 DW 100,100,100,100,100,50 DW 50,100,100,100,100,100DATA
16、ENDS;堆棧段STACK SEGMENT PARA STACK STACK DB 200 DUP (STACK) ;初始化堆棧STACK ENDS;代碼段CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FAR MOV AX,DATA ;數據段裝入段寄存器 DS MOV DS,AX MOV aH, 0 ;BIOS 功能調用,設置顯示方式 MOV AL,4 INT 10H ;十號 doc 中斷? MOV AH,0BH ;0B 號 doc 調用? MOV BH,0 MOV BL,4 INT 10H MOV AH,0BH MOV BH,01
17、H MOV BL,00 INT 10HSHOW MACRO b ;定義一個宏 LEA DX,b MOV AH,9 ;9 號 doc 調用? INT 21H ENDM show INFO1 show INFO2 show INFO3 show MUSLISTINPUT: MOV AH,01H ;鍵盤輸入并回顯 INT 21H CMP AL,Q7 JZ retu ;退出 CMP AL,A JNZ B0 CALL MUSIC1 JMP EXIT1B0: CMP AL,B JNZ C0 CALL MUSIC2 JMP EXIT1C0: CMP AL,C JNZ exit CALL MUSIC3EXIT
18、1: show INFO5 ;宏調用 JMP INPUT EXIT: call clear show INFO4 show INFO5 show INFO1 show INFO2 show INFO3 show MUSLIST jmp inputRETU: MOV AH,4CH ;帶返回碼終止 INT 21HMAIN ENDP MUSIC1 PROC NEAR PUSH DS SUB AX,AX ;AX 清零 PUSH AX LEA SI,MUS_FREG1 LEA BP,DS:MUS_TIME1FREG1: MOV DI,SI CMP DI,-1 ;音符的頻率是否結束 JE END_MUS1
19、 ;若是則返回 MOV DX,DS:BP ;取出音符的持續時間放入 BX MOV BX,1400 CALL GENSOUND ;調用 GENSOUND 子程序發出音調 ADD SI,2 ADD BP,2 JMP FREG1END_MUS1: RETMUSIC1 ENDP8GENSOUND PROC NEAR PUSH AX ;保存將要用到的寄存器 PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;向 8253-5/8254-2 計數器寫入控制字 OUT 43H,AL ;方式 3、雙字節寫和二進制計數方式寫到控制口 MOV DX,12H ;設置被除數 MO
20、V AX,533H*896 DIV DI ;其商(AX)為預置值 OUT 42H,AL ;先送 LSB MOV AL,AH OUT 42H,AL ;后送 MSB IN AL,61H ;讀 8255 端口 B(61H)原值 MOV AH,AL ;保存端口原值 OR AL,3 OUT 61H,AL ;接通揚聲器WAIT1: MOV CX,8FF0H ;在 80486/DX2/66 中取DELAY1: LOOP DELAY1 DEC BX JNZ WAIT1 MOV AL,AH ;寫回 61H 口原值,關閉揚聲 OUT 61H,AL POP DI ;恢復寄存器 POP DX POP CX POP B
21、X POP AX RET ;子程序結束返回GENSOUND ENDPMUSIC2 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,29 ADD BP,2 JMP FREG1END_MUS2: RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FRE
22、G3 LEA BP,DS:MUS_TIME3FREG3: MOV 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 ENDPclear proc near ;清屏子程序 push ax push bx push cx push dx mov ah,6 ;屏幕初始化或上卷 mov al,0 mov ch,0 ;左上角行號為 0 mov cl,0 ;左上角列號為 0 mov dh,24 ;右下角行號為 24mov dl,7
23、9 ;右下角列號為 79 mov bh,7 ;卷入行屬性為 7 int 10h ;調用顯示 BIOS pop dx pop cx pop bx pop ax retclear endpCODE ENDS END MAIN105.3程序調試1.編輯源程序,假定源文件名為 YINYUE.ASM。2.匯編源程序 YINYUE.ASM。調用宏匯編程序 MASM 對源文件 YINYUE.ASM 進行匯編,生成目標文件 YINYUE.OBJ。若匯編無錯誤,則進入第三步。3.用連接命令 LINK 連接目標程序文件 YINYUE.OBJ。若連接成功,則進入下一步。4.運行可執行文件 YINYUE.EXE。5D
24、EBUG 調試的具體步驟:DEBUG 命令均為一個字母,其后可以跟一個或多個參數。命令中參數之間必須用分界符號隔開。命令和參數可以用大寫或小寫混合的方式輸入,每個命令以回車鍵作結束符。在執行命令過程中,可以按 CTRL+BREAK 來終止一個命令的執行,然后返回到DEBUG 提示符下。這里我用到了(顯示內存單元內容的)D 命令和(跟蹤命令)T 命令。在 dos 的提示符下,鍵入命令: c:debug typegame 在 debug 程序調入后,將出現提示符,此時就可用 debug 命令來調試程序。6. 小結小結設計中遇到的問題設計中遇到的問題在此次課程設計的過程中,我遇到了很多的問題,主要有
25、以下一些:(1) 在編程初期首先遇到的是結構化程序的結構很重要,剛開編的時候沒有寫流程圖和算法,結果程序可讀性很差,也很難查錯,從中了解到寫程序需要一步步來,不能操之過急。(2) 在編程中時常出現邏輯錯誤。因為這個錯誤在編譯中不會被發現,所以很難找出,要對程序一步一步的檢查才行,可以用對子程序稍加修改后單獨運行來查錯。這體現我經歷的程序不夠多,需要在這方面加把勁。(3)在編寫音樂的時候,不懂的節拍的把握。后來上網查資料和老師的幫助,才對音樂的節拍有所了解,最后終于解決了這問題。問題的解決方法問題的解決方法此次課程設計中遇到了很多問題,在指導老師的幫助下,加上我自己的努力及同學朋友的全力幫助下,我的這些問題都已得到完滿的解決。如節拍的問題,我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校校園餐管理制度
- 學校科技室管理制度
- 學校配劑室管理制度
- 學生寒假前管理制度
- 學防火設備管理制度
- 安全日活動管理制度
- 完善少先隊管理制度
- 實習生公司管理制度
- 實驗室常規管理制度
- 客戶備件庫管理制度
- 陜西省專業技術人員繼續教育2025公需課《黨的二十屆三中全會精神解讀與高質量發展》20學時題庫及答案
- 學習通《科研誠信與學術規范》課后及考試答案
- 陜09J01 建筑用料及做法圖集
- 蒸發設備操作講解
- 空心玻璃微珠項目資金申請報告寫作模板+
- 東風汽車零部件編碼規則
- CATIA在汽車底盤設計中的應用
- 【簡譜】親愛的旅人啊簡譜
- 大理智能制造項目可行性研究報告模板
- 現代護理管理工具的應用.ppt
- 上海市基本醫療保險結算項目庫動態維護細則
評論
0/150
提交評論