版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 摘要1</b></p><p><b> 緒論2</b></p><p><b> 1 設(shè)計(jì)思路3</b></p><p><b> 2 樂理知識(shí)4</b
2、></p><p> 2.1 樂理知識(shí)簡述4</p><p> 2.2 音符與頻率的關(guān)系4</p><p><b> 3 設(shè)計(jì)原理4</b></p><p> 3.1 8259A的功能5</p><p> 3.2 8253 的功能6</p><p>
3、; 3.3 發(fā)聲原理8</p><p> 3.4 DOS功能調(diào)用11</p><p> 3.4.1 1號(hào)功能調(diào)用11</p><p> 3.4.2 2號(hào)功能調(diào)用11</p><p> 3.4.3 9號(hào)功能調(diào)用12</p><p> 3.4.4 10號(hào)功能調(diào)用12</p>&
4、lt;p> 3.4.5 16號(hào)功能調(diào)用13</p><p> 3.5 子程序調(diào)用14</p><p><b> 4 程序13</b></p><p> 4.1 程序流程圖13</p><p> 4.2 程序代碼14</p><p> 4.3 程序的運(yùn)行20</
5、p><p><b> 結(jié)束語23</b></p><p><b> 致謝24</b></p><p><b> 參考文獻(xiàn)24</b></p><p><b> 摘要</b></p><p> 用計(jì)算機(jī)來解決實(shí)際問題,需要
6、編寫程序。程序是由指令組成的,一條條指令規(guī)定了計(jì)算機(jī)究竟要執(zhí)行什么樣的操作,計(jì)算機(jī)只要按編寫的順序執(zhí)行完程序中的指令,問題也就解決了。匯編語言是一種功能很強(qiáng)的程序設(shè)計(jì)語言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語言。</p><p> 本設(shè)計(jì)是基于匯編語言與接口技術(shù)的音樂盒設(shè)計(jì)。依據(jù)PC機(jī)系統(tǒng)發(fā)聲的基本原理,制作成多功能音樂盒。</p><p> 該音樂盒主要實(shí)現(xiàn)的功能有:<
7、;/p><p> 1、程運(yùn)行后首先在屏幕上顯示出樂曲菜單,制作者姓名。</p><p> 2、用鍵盤鍵A、B、C選擇相應(yīng)的樂曲。</p><p> 3、輸入錯(cuò)誤時(shí)要有適當(dāng)提示,并允許重新輸入。</p><p> 4、選擇Q鍵后可以正常退出程序。</p><p> 5、允許中斷。可以在沒有聽完整首歌曲時(shí)人為中斷聽下
8、一首歌曲,或退出。</p><p> 本設(shè)計(jì)利用8255A、8253的工作原理發(fā)聲。用masm、link軟件對(duì)音樂盒源程序進(jìn)行調(diào)試。</p><p> 關(guān)鍵詞:匯編語言 計(jì)算機(jī)接口技術(shù) 音樂盒 8253 8255A</p><p><b> 緒論</b></p><p> 編寫程序的語言有三種:高級(jí)語言,匯編語言
9、和機(jī)器語言。機(jī)器語言是一種面向機(jī)器的程序設(shè)計(jì)語言。指令系統(tǒng)是機(jī)器語言的基礎(chǔ),其指令是由0和1構(gòu)成的二進(jìn)制代碼串,其編寫的程序可以被計(jì)算機(jī)直接識(shí)別,直接執(zhí)行。一般說來,機(jī)器言程序的執(zhí)行速度快,占用的內(nèi)存空間小。匯編又稱為符號(hào)語言,實(shí)際上是一種符號(hào)化的機(jī)器語言。匯編語言比機(jī)器語言直觀,容易記憶和理解,用匯編語言編寫的程序也比機(jī)器語言程序易讀、易檢查、易修改。匯編語言程序設(shè)計(jì)在微機(jī)應(yīng)用中占有重要地位.一般來說,凡是在微機(jī)中涉及與硬件電路有關(guān)的
10、應(yīng)用系統(tǒng),如微機(jī)控制系統(tǒng)中的檢測(cè)和控制部分,儀器儀表中的計(jì)算機(jī)控制和數(shù)據(jù)處理部分,家用電器的計(jì)算機(jī)控制部分等,其應(yīng)用程序部分都是用匯編語言來編寫的。</p><p> 在計(jì)算機(jī)系統(tǒng)中除了CPU以及基本硬件之外,還有各種外部設(shè)備,比如顯示器、鍵盤、打印機(jī)、磁盤驅(qū)動(dòng)器、光盤驅(qū)動(dòng)器等。這些外部設(shè)備需要與CPU進(jìn)行大量的信息交換,根據(jù)CPU的要求進(jìn)行各種操作。進(jìn)行信息交換時(shí),由于各種原因(比如電平、時(shí)序等的不同),這些
11、外部設(shè)備不能與CPU直接相連,它們之間的信息交換必須經(jīng)過一個(gè)中間電路,也就是接口電路才能實(shí)現(xiàn)。</p><p> 本設(shè)計(jì)是基于匯編基礎(chǔ)上,利用接口電路中的8253,8255功能使電腦發(fā)聲而設(shè)計(jì)的音樂盒。</p><p> 音樂盒的主要功能是,根據(jù)按鍵不同,而選擇播放不同的歌曲,和退出等操作。</p><p><b> 1 設(shè)計(jì)思路</b>
12、</p><p> PC的揚(yáng)聲器驅(qū)動(dòng)系統(tǒng)如圖1-1所示。</p><p> 圖1-1 PC的揚(yáng)聲驅(qū)動(dòng)系統(tǒng) </p><p> 揚(yáng)聲器的發(fā)聲是由輸出寄存器(即8255A的PB口)的兩位進(jìn)行控制的。輸出寄存器的端口地址為61H。</p><p> 揚(yáng)聲器發(fā)聲最簡單的方式:直接對(duì)端口61H的D1位交替輸出0或1(同時(shí)61H的D0位清0
13、),使揚(yáng)聲器交替地通與斷,推動(dòng)揚(yáng)聲器發(fā)聲。</p><p> 由于揚(yáng)聲器總是隨時(shí)可用的,因此CPU可用直接I/O方式對(duì)其進(jìn)行操作。</p><p> 8253定時(shí)計(jì)數(shù)器的計(jì)數(shù)通道2用于提供系統(tǒng)的揚(yáng)聲器音頻信號(hào),但8253計(jì)數(shù)器通道2輸出的方波受8255A PB0輸出高電平時(shí)才允許計(jì)數(shù)通道2的方波輸出。該方波又與PB1相與后送揚(yáng)聲器的驅(qū)動(dòng)電路,去驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。一般情況下,可讓PB0輸出
14、高電平,通過對(duì)8253編程設(shè)置方波輸出頻率以控制發(fā)聲頻率。通過控制8255A PB1輸出以控制發(fā)聲時(shí)間。</p><p> 8253計(jì)數(shù)值的計(jì)算方法為:</p><p> 計(jì)數(shù)值=時(shí)鐘頻率÷音符頻率(時(shí)鐘頻率=1.19318 MHz=1234DCH)</p><p> 所以利用8255和8253來制作音樂盒,詳細(xì)步驟見下面設(shè)計(jì)原理部分.</p&
15、gt;<p><b> 2樂理知識(shí)</b></p><p> 2.1 樂理知識(shí)簡述</p><p> 1 2 3 4 5 6 7</p><p> do remifa solla si</p><p> 七個(gè)音不
16、都一樣高,而是從左到右一個(gè)比一個(gè)高上去的,一這七個(gè)音為基礎(chǔ),在它們的上方或下方加圓點(diǎn)來表明更高或更低的音,上方的圓點(diǎn)叫“高音點(diǎn)”下方加的圓點(diǎn)叫“低音點(diǎn)” 。</p><p> 長短音:音樂中的音不光有高低,還要有長短,一個(gè)音可以唱得時(shí)間很長,也可以唱得很短促。長短音的標(biāo)記方法,主要用“增時(shí)線”和“減時(shí)線” ,加寫在音的右邊或下邊,如在5的右邊加寫一條橫線(5—),就使5延長了一倍,要是在5的下邊寫一條橫線( 5
17、 ),就使5減短了一半,也即減短1/2。附點(diǎn)在音符右方加一個(gè)圓點(diǎn),這個(gè)音叫“附點(diǎn)音符” ,附點(diǎn)的作用是把音符的時(shí)值延長1/2。</p><p> 2.2 音符與頻率的關(guān)系</p><p> 不包括鋼琴鍵盤的黑鍵,用簡譜表示的C大調(diào)音符與頻率近似值的對(duì)應(yīng)關(guān)系如下:</p><p><b> .</b></p><p>
18、; 音符 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1</p><p> . . . . . . .</p><p> 頻率131 147 165 175 196 220 247 ?262 294 ?330 349 392 440 494 523</p><p>&l
19、t;b> 3 設(shè)計(jì)原理</b></p><p> 3.1 8259A的功能</p><p> 8255A是一種功能很強(qiáng)的可編程并行接口芯片,采用NMOS工藝制造,它有三個(gè)8位并行輸入/輸出端口;可工作于三種工作方式,分別為方式0、方式1、方式2;能按無條件傳送、查詢傳送和中斷傳送方式進(jìn)行數(shù)據(jù)傳送。</p><p> 8255A的內(nèi)部結(jié)構(gòu)如圖
20、3-1所示。 </p><p> 圖3-1 8255A的內(nèi)部結(jié)構(gòu)</p><p> 8255A的功能如表3-1所示</p><p> 表3-1 8255A的端口尋址和操作功能表</p><p> 3.2 8253的功能</p><p><b> 8253的內(nèi)部結(jié)構(gòu)</b></p&
21、gt;<p> 8253的內(nèi)部結(jié)構(gòu)如圖3-2a所示</p><p> 圖3-2a 8253的內(nèi)部結(jié)構(gòu)</p><p> 8253讀/寫邏輯信號(hào)組合的功能以及各計(jì)數(shù)器通道、控制字寄存器在PC機(jī)中的地址分配如表3-2a所示</p><p> 表3-2a 8253讀/寫邏輯信號(hào)組合功能及地址分配</p><p><b
22、> 8253的控制字</b></p><p> 8253的控制字用于選擇哪個(gè)計(jì)數(shù)器通道工作,三個(gè)通道可同時(shí)工作,但是要分別進(jìn)行初始化;用于規(guī)定讀/寫操作格式或類型,8253可以有8位的計(jì)數(shù)值或16位的計(jì)數(shù)值,可以按二進(jìn)制計(jì)數(shù)或按二—十進(jìn)制計(jì)數(shù);用于選擇工作方式,8253共有六種工作方式。 8253是由主機(jī)編程設(shè)定的,通過把一個(gè)8位的控制字寫入8253的控制字寄存器,使8253按照某種給定的方
23、式工作??刂谱值亩x如圖3-2b所示。 </p><p> 圖3-2b 8253的控制字</p><p><b> 3.3 發(fā)聲原理</b></p><p> 8253在PC機(jī)中的應(yīng)用</p><p> IBM PC/XT機(jī)系統(tǒng)板上使用了一片8253,其連接如圖3-3所示。計(jì)數(shù)器通道2用于驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。825
24、3的端口地址范圍是40H~43H,片選</p><p> 圖3-3 PC/XT中的8253</p><p> 單拍脈沖的寬度=n1×輸入時(shí)鐘CLK的周期=n1×Tclk=n1×(1/Fclk)</p><p> n1=單拍脈沖的寬度/輸入時(shí)鐘CLK的周期</p><p><b> 計(jì)數(shù)器2的發(fā)
25、聲程序</b></p><p> 計(jì)數(shù)器2的輸出送往揚(yáng)聲器發(fā)聲電路。門控信號(hào)GATE2接8255并行接口電路的PB0,因此計(jì)數(shù)器2的計(jì)數(shù)過程將受到PB0的控制,而PB0又受I/O端口61H的D0位的控制, 當(dāng)PB0=1時(shí),OUT2才能輸出方波。OUT2和PB1經(jīng)過一個(gè)與門接至揚(yáng)聲器驅(qū)動(dòng)電路。因此OUT2也將受到PB1的控制,而PB1又受I/O端口61H的D1位的控制。ROM-BIOS中的發(fā)聲子程序B
26、EEP使計(jì)數(shù)器2工作于方式3,產(chǎn)生約為1 kHz的方波,程序如下:</p><p><b> BEEP PROC</b></p><p> MOVAL, 10110110B ;計(jì)數(shù)器2,方式3,16位計(jì)數(shù),二進(jìn)制計(jì)數(shù)</p><p> OUT 43H, AL;寫入控制字</p><p> M
27、OV AX, 0533H ;計(jì)數(shù)初值為0533H=1331(1.193 18 MHz/1331=896 Hz)</p><p> OUT 42H, AL;寫入計(jì)數(shù)初值低8位</p><p> MOV AL, AH</p><p> OUT 42H, AL ;寫入計(jì)數(shù)初值高8位</p><p> IN
28、 AL, 61H ;讀8255端口B的原值</p><p> MOV AH, AL ;暫存AH</p><p> OR AL, 03H ;使PB0=1、PB1=1</p><p> OUT 61H, AL ;輸出,使揚(yáng)聲器發(fā)聲</p><p> SUB CX, CX <
29、;/p><p> LOP: LOOP LOP;延時(shí)</p><p> DEC BL ;BL值由入口參數(shù)提供,決定發(fā)聲長短</p><p> JNZ LOP ;BL=6發(fā)長聲,BL=1發(fā)短聲</p><p> MOV AL, AH</p><p> OUT 6
30、1H, AL ;恢復(fù)8255端口B的原值,停止發(fā)聲</p><p> RET ;返回 </p><p> BEEP ENDP </p><p> 利用PC機(jī)中的定時(shí)器/計(jì)數(shù)器電路8253可以使揚(yáng)聲器發(fā)聲并且還可以用來演奏簡單的樂曲。</p><p><b> 聲音的產(chǎn)生</b><
31、/p><p> 在PC機(jī)中產(chǎn)生聲音可以通過使用8253的計(jì)數(shù)器2,工作于方式3來實(shí)現(xiàn)。設(shè)置控制字的指令為</p><p> MOV AL,0B6H ;計(jì)數(shù)器2,方式3,16位計(jì)數(shù),二進(jìn)制計(jì)數(shù)</p><p> OUT 43H,AL</p><p> 設(shè)置好控制字后要根據(jù)聲音的頻率對(duì)計(jì)數(shù)器2(也就是42H端口),設(shè)定對(duì)應(yīng)
32、的計(jì)數(shù)初值。指令如下:</p><p> MOV AL,計(jì)數(shù)初值低8位</p><p> OUT 42H,AL</p><p> MOV AL,計(jì)數(shù)初值高8位</p><p> OUT 42H,AL</p><p> 然后通過設(shè)定PC機(jī)中的并行接口電路8255的PB0、PB1,打開揚(yáng)聲器的門電
33、路,就可以發(fā)出該頻率的聲音了。實(shí)現(xiàn)該功能的指令如下:</p><p> IN AL, ?61H;讀取8255端口B的值</p><p> MOV AH, ?AL;暫存AH</p><p> OR AL, 03H;使PB0=1、PB1=1</p><p> OUT 61H, AL;輸出,使揚(yáng)聲器發(fā)聲</
34、p><p> 如果提供給8253計(jì)數(shù)器2的CLK的時(shí)鐘頻率為1 193 180 Hz,即1234DCH,并把要求發(fā)出的聲音的頻率值放入DI中,使AX獲得對(duì)應(yīng)的計(jì)數(shù)初值的指令為</p><p> MOV DX,12H</p><p> MOV AX,34DCH</p><p><b> DIV ??DI</b><
35、/p><p> 上述指令執(zhí)行后計(jì)數(shù)初值在AX中,然后可以分別按低字節(jié)和高字節(jié)輸出至42H端口,使計(jì)數(shù)器產(chǎn)生所需頻率的聲音(音符)。在實(shí)際應(yīng)用中,計(jì)數(shù)初值要根據(jù)實(shí)際系統(tǒng)中的時(shí)鐘頻率來計(jì)算。</p><p><b> 延時(shí)程序及其作用</b></p><p> 當(dāng)時(shí)鐘為1 193 180 Hz時(shí),延時(shí)10 ms可用如下延時(shí)程序?qū)崿F(xiàn):</p&
36、gt;<p> DELAY:MOV CX,2801</p><p> LOP10:?LOOP LOP10</p><p> 如果實(shí)際應(yīng)用環(huán)境中的時(shí)鐘頻率較高,則應(yīng)重新計(jì)算并設(shè)置延時(shí)時(shí)間。</p><p> 編寫演奏樂曲需要把與音符所對(duì)應(yīng)的頻率放在FREQ表中,把與音符所對(duì)應(yīng)的節(jié)拍(延時(shí)次數(shù)值)放在TIME表中。然后由主程序控制,逐一按音符的
37、頻率和節(jié)拍值,使揚(yáng)聲器發(fā)出聲音。當(dāng)與音符對(duì)應(yīng)的頻率值為0時(shí),停止演奏。</p><p> 子程序PLAY的功能是使揚(yáng)聲器發(fā)出聲音,演奏樂曲。由DI指定音符的頻率,BX指定與音符對(duì)應(yīng)的節(jié)拍。SI指向頻率表FREQ,BP指向節(jié)拍表TIME。頻率表以0結(jié)尾,用于作為程序結(jié)束的條件:如果取來的頻率值為0,則程序結(jié)束。</p><p> 3.4 DOS功能調(diào)用</p><p&
38、gt; 3.4.1 1號(hào)功能調(diào)用</p><p> 從鍵盤輸入一個(gè)字符(1號(hào)調(diào)用)</p><p><b> 調(diào)用格式:</b></p><p> MOV AH,1</p><p><b> INT 21H</b></p><p> 掃描鍵盤將從鍵盤輸入
39、的一個(gè)字符的ASCII碼送入AL中(回顯 )。</p><p> 3.4.2 2號(hào)功能調(diào)用</p><p> 屏幕顯示一個(gè)字符(2功能號(hào)調(diào)用)</p><p><b> 調(diào)用格式:</b></p><p> MOV AH,2</p><p> MOV DL,字符的ASCII碼&
40、lt;/p><p><b> INT 21H</b></p><p> 3.4.3 9號(hào)功能調(diào)用</p><p> 屏幕顯示一個(gè)字符串(9功能號(hào)調(diào)用)</p><p><b> 調(diào)用格式:</b></p><p><b> MOV AH,9</b
41、></p><p> MOV DX,字符串的首地址(偏移地址) </p><p><b> INT 21H</b></p><p> 3.4.4 10號(hào)功能調(diào)用</p><p> 從鍵盤輸入字符串 (10功能號(hào)調(diào)用)</p><p> 功能: 從鍵盤接收字符串送
42、入內(nèi)存的輸入緩沖區(qū),同時(shí)送顯示器顯示。</p><p><b> 調(diào)用前要求: </b></p><p> 先定義一個(gè)輸入緩沖區(qū) MAXLEN DB 100 ;第1個(gè)字節(jié)指出緩沖區(qū)能容納的字符個(gè)數(shù),即緩沖區(qū)長度,不能為0 </p><p> AC
43、LEN DB ? ;第2個(gè)字節(jié)保留,以存放實(shí)際輸入的字符個(gè)數(shù) </p><p> STRING DB 100 DUP(?);第3個(gè)字節(jié)開始存放從鍵盤輸入的字符串。</p><p> 調(diào)用格式: LEA DX
44、,MAXLEN(緩沖區(qū)首偏移地址) </p><p> MOV AH,10 </p><p><b> INT 21H </b></p><p> 注意:調(diào)用時(shí),要求DS:DX指向輸入緩沖區(qū) </p><p> 3.4.5 16號(hào)功能調(diào)用<
45、;/p><p> 鍵盤驅(qū)動(dòng)程序 (16號(hào)功能調(diào)用)</p><p> 1、當(dāng)某個(gè)BIOS程序中具有多種不同功能時(shí),用不同的編號(hào)——功能號(hào)加以區(qū)分,并約定功能號(hào)存放在寄存器AH中。其調(diào)用方法與DOS功能調(diào)用類似:</p><p> (1) 功能號(hào)→AH </p><p>
46、(2) 入口參數(shù)→指定寄存器</p><p> (3) 指令“INT n”實(shí)現(xiàn)對(duì)BIOS子程序的調(diào)用 </p><p> 下面以鍵盤I/O中斷調(diào)用為例介紹BIOS中斷調(diào)用的方法。 </p><p><b> 3.5 子程序調(diào)用</b></p><p><b> 子程序的概念
47、</b></p><p> 在程序設(shè)計(jì)中,我們會(huì)發(fā)現(xiàn)一些多次無規(guī)律重復(fù)的程序段或語句序列。解決此類問題一個(gè)行之有效的方法就是將它們?cè)O(shè)計(jì)成可供反復(fù)調(diào)用的獨(dú)立的子程序結(jié)構(gòu),以便在需要時(shí)調(diào)用。在匯編語言中,子程序又稱過程。調(diào)用子程序的程序稱為主調(diào)程序或主程序</p><p><b> 子程序的結(jié)構(gòu):</b></p><p> 1、
48、子程序與循環(huán)程序的區(qū)別</p><p> 2、子程序的調(diào)用與返回</p><p> 3、入口參數(shù)與出口參數(shù)的傳遞</p><p> 4、現(xiàn)場(chǎng)的保護(hù)與恢復(fù)</p><p><b> 子程序的定義</b></p><p> 子程序的定義是由過程定義偽指令PROC和ENDP來完成的。其格式如下
49、:</p><p> 過程名 PROC [NEAR/FAR]</p><p><b> 子程序體</b></p><p><b> 過程名 ENDP</b></p><p> 其中PROC表示過程定義開始,ENDP表示過程定義結(jié)束。過程名是過程入口地址的符號(hào)表示。</p>
50、<p> 一般過程名同標(biāo)號(hào)一樣,具有三種屬性,即段屬性、偏移地址屬性以及類型屬性</p><p><b> 子程序體一般包括:</b></p><p><b> 1、保護(hù)現(xiàn)場(chǎng)</b></p><p> 2、根據(jù)入口參數(shù)進(jìn)行處理</p><p><b> 3、產(chǎn)生出口參數(shù)
51、</b></p><p><b> 4、恢復(fù)現(xiàn)場(chǎng)</b></p><p><b> 5、RET</b></p><p> 子程序的調(diào)用與返回:</p><p><b> 調(diào)用</b></p><p> CALL 標(biāo)號(hào)</
52、p><p><b> 功能:</b></p><p> 1、主程序的下一條指令入棧,即IP指針入棧</p><p> 2、轉(zhuǎn)向子程第的第一條指令,既標(biāo)號(hào)指定的子程序第1條指令的偏移地址送IP</p><p><b> 返回</b></p><p><b> R
53、ET</b></p><p> 功能:返回到主程序CALL指令的下一條指令,即將下一條指令地址送IP。 </p><p><b> 4 程序</b></p><p> 4.1 程序流程圖 </p><p><b> 4.2 程序代碼</b></p><p&g
54、t; DATA SEGMENT</p><p> STR1 DB 0DH,0AH,'welcom you come to here! Wenguanghong dian zi gong cheng xi 09 dian 301ban STR2 DB 0DH,0AH,'this is a music program !$'</p><p> STR3 DB 0D
55、H,0AH,'please select !$'</p><p> STR4 DB 0DH,0AH,'input error !$'</p><p> STR5 DB 0DH,0AH,'please input again !$'</p><p> STR6 DB 0DH,0AH,'A shao nian
56、 zhuang zhi bu yan chou $'</p><p> STR7 DB 0DH,0AH,'B wo niu yu huang li niao $'</p><p> STR8 DB 0DH,0AH,'C mei li de tong hua $'</p><p> STR9 DB 0DH,0AH,'
57、;Q EXIT $'</p><p> FREQ1 DW 294,392,392,294,330,262,220,262,196,262,262,220,262,294,330,392,294,294</p><p> DW 294,392,392,294,330,262,220,262,220,196,196,220,262,294,330,220,196,196</p
58、><p> DW 392,392,392,330,392,440,392,330,440,440,392,330,294,392,294,330,262,220</p><p> DW 392,220,262,220,392,440,392,330,392,294,392,392,392,330,392,440,440,392</p><p> DW 330,44
59、0,440,392,440,392,330,294,294,392,294,330,262,220,196,220,262,220,294,262,294,220,196</p><p> DW 392,294,330,262,220,196,220,262,220,294,262,294,220,196,196,0</p><p> TIME1 DW 25,25,37,6,6,25
60、,12,12,50,19,6,12,12,25,12,12,50,50</p><p> DW 25,25,37,6,6,25,12,12,50,19,6,12,12,12,25,12,50,50</p><p> DW 19,6,12,6,6,37,12,12,12,6,6,12,50,12,6,6,12,12</p><p> DW 19,6,25,12,
61、12,6,6,6,6,50,19,6,12,6,6,12,25,12</p><p> DW 12,12,12,6,6,6,6,12,25,12,6,6,12,12,19,6,25,12,12,6,6,12,50</p><p> DW 12,6,6,12,12,19,6,25,12,12,6,6,12,50,50</p><p> FREQ2 DW 392
62、,392,392,392,330,392,262,440,392,392,392,392,392,330,294,262,330,294</p><p> DW 294,330,392,392,392,330,330,294,262,262,294,330,262,262,220,196,220,196</p><p> DW 392,392,392,330,392,262,440,3
63、92,392,392,392,392,330,294,262,330,294</p><p> DW 262,330,294,294,330,392,392,330,330,294,262,262,294,330,262,262,220</p><p> DW 196,392,392,392,392,330,294,262,440,392,392,440,262,294,262,294
64、,330,294,262,0</p><p> TIME2 DW 6,12,6,12,6,6,12,12,25,6,12,6,12,6,6,12,12,25</p><p> DW 19,6,12,6,6,12,6,6,12,12,19,6,12,6,6,12,12,25</p><p> DW 6,12,6,12,6,6,12,12,25,6,12,6,
65、12,6,6,12,12,25</p><p> DW 12,12,12,12,12,6,6,12,12,19,6,12,6,6</p><p> DW 12,12,25,6,12,6,12,6,6,12,12,12,6,6,12,12,12,12,25,25,50</p><p> FREQ3 DW 220,330,247,220,262,294,262,3
66、30,220,440,392,440,392,294,349,330,330,330</p><p> DW 220,440,392,294,330,349,330,294,262,220,330,294,247,220,220</p><p> DW 220,247,262,294,330,262,247,196,220,262,294,330,330</p><
67、p> DW 220,247,262,294,330,262,247,196,220,262,294,262,262</p><p> DW 220,247,262,294,330,262,247,196,220,262,294,262,330,330</p><p> DW 220,247,262,294,330,262,247,196,220,262,294,262,262,
68、262</p><p> DW 262,262,294,330,262,247,196,262,247,196,247,220,220,220,0</p><p> TIME3 DW 25,25,50,12,12,19,6,50,25,25,12,12,12,12,12,12,25,50</p><p> DW 25,25,19,6,12,12,25,25,
69、50,25,25,37,12,50,25</p><p> DW 12,12,12,12,12,12,25,25,12,12,12,12,25</p><p> DW 12,12,12,12,12,12,25,25,12,12,12,12,25</p><p> DW 12,12,12,12,12,12,25,25,12,12,6,12,12,25</p
70、><p> DW 12,12,12,12,12,12,25,25,6,6,12,12,12,50</p><p> DW 12,6,6,12,12,25,25,25,25,50,12,12,25,50</p><p><b> DATA ENDS</b></p><p> STACK SEGMENT</p>
71、;<p> DB 200 DUP (?)</p><p> STACK ENDS</p><p> CODE SEGMENT</p><p> ASSUME DS:DATA,SS:STACK,CS:CODE</p><p> START:MOV AX,DATA</p><p> MOV DS,
72、AX </p><p> MOV DX,OFFSET STR1 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR2 </p><p><
73、b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR3 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p>
74、;<p> LEA DX,STR6 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR7 </p><p><b> MOV AH,9</b><
75、/p><p><b> INT 21H</b></p><p> LEA DX,STR8 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR9 &
76、lt;/p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> MOV AH,02H</p><p> MOV DL,0DH</p><p><b> INT 21H</b></p&
77、gt;<p> MOV AH,02H</p><p> MOV DL,0AH</p><p><b> INT 21H</b></p><p><b> JMP INPUT</b></p><p> XSH:MOV AH,02H</p><p> M
78、OV DL,0DH</p><p><b> INT 21H</b></p><p> MOV AH,02H</p><p> MOV DL,0AH</p><p><b> INT 21H</b></p><p> LEA DX,STR5 </p>
79、;<p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> MOV AH,02H</p><p> MOV DL,0DH</p><p><b> INT 21H</b></p><
80、;p> MOV AH,02H</p><p> MOV DL,0AH</p><p><b> INT 21H</b></p><p> INPUT: MOV AH,1 </p><p><b> INT 21H</b></p><p>
81、 CMP AL,'Q'</p><p> JE EXIT </p><p> CMP AL,'A'</p><p><b> JNE N1</b></p><p> LEA SI,FREQ1 </p><p> LEA
82、 BP,TIME1</p><p> LOP:MOV DI,[SI]</p><p><b> CMP DI,0</b></p><p><b> JZ XSH</b></p><p> MOV BX,DS:[BP]</p><p><b> CALL
83、PLAY</b></p><p><b> ADD SI,2</b></p><p><b> ADD BP,2</b></p><p><b> JMP LOP</b></p><p><b> JMP XSH</b></p&g
84、t;<p> N1:CMP AL,'B'</p><p><b> JNE N2</b></p><p> LEA SI,FREQ2</p><p> LEA BP,TIME2</p><p><b> JMP LOP</b></p><p
85、> N2:CMP AL,'C'</p><p><b> JNE ERROR</b></p><p> LEA SI,FREQ3</p><p> LEA BP,TIME3</p><p><b> JMP LOP</b></p><p>&l
86、t;b> ERROR:</b></p><p> LEA DX,STR4</p><p> MOV AH,9 </p><p><b> INT 21H</b></p><p> LEA DX,STR5 </p><p><b> MOV AH,
87、9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR6 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p>
88、LEA DX,STR7 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> LEA DX,STR8 </p><p><b> MOV AH,9</b></p><p&
89、gt;<b> INT 21H</b></p><p> LEA DX,STR9 </p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> MOV AH,02H</p><p&g
90、t; MOV DL,0AH</p><p><b> INT 21H</b></p><p> JMP INPUT</p><p> JMP INPUT </p><p> EXIT:MOV AH,4CH </p><p> INT 21H </p>
91、;<p> PLAY PROC </p><p><b> PUSH AX</b></p><p><b> PUSH BX</b></p><p><b> PUSH CX</b></p><p><b> PUSH DX</
92、b></p><p><b> PUSH DI</b></p><p> MOV AH,1 </p><p><b> INT 16H</b></p><p> JZ PLAY1 </p><p> JMP START </p><
93、p> play1:MOV AL,0B6H</p><p> OUT 43H,AL</p><p> MOV DX,12H</p><p> MOV AX,348CH</p><p><b> DIV DI</b></p><p> OUT 42H,AL</p>&l
94、t;p><b> MOV AL,AH</b></p><p> OUT 42H,AL</p><p><b> IN AL,61H</b></p><p><b> MOV AH,AL</b></p><p><b> OR AL,03H</b&
95、gt;</p><p> OUT 61H,AL</p><p> CALL DELAY1</p><p><b> MOV AL,AH</b></p><p> OUT 61H,AL</p><p><b> POP DI</b></p><p&
96、gt;<b> POP DX</b></p><p><b> POP CX</b></p><p><b> POP BX</b></p><p><b> POP AX</b></p><p><b> RET </b>
97、</p><p> PLAY ENDP</p><p> DELAY1 PROC</p><p><b> SHL BX,1</b></p><p><b> SHL BX,1</b></p><p><b> SHL BX,1</b>
98、</p><p><b> SHL BX,1</b></p><p><b> SHL BX,1</b></p><p><b> SHL BX,1</b></p><p><b> SHL BX,1</b></p><p>
99、;<b> SHL BX,1</b></p><p> DELAY:MOV CX,0FFFFH</p><p> LOP10:LOOP LOP10</p><p><b> DEC BX</b></p><p><b> JNZ DELAY</b></p>
100、<p><b> RET</b></p><p> DELAY1 ENDP</p><p> CODE ENDS</p><p><b> ENDSTART</b></p><p><b> 4.3程序的運(yùn)行</b></p>&l
101、t;p> 如上編寫好程序后,在運(yùn)行里輸入cmd后,回車輸入程序文件夾所在的盤符加冒號(hào)E:,回車,cd空格輸入文件夾名lzq,然后輸入masm,回車,輸入程序所在的記事本名zq后,回車,回車,回車,再回車,無誤后顯示如圖</p><p> 然后輸入link空格記事本名,回車如圖</p><p> 然后回車,回車,再回車,如圖</p><p> 后輸入zq
102、回車,如圖</p><p> 然后就可以欣賞歌曲了,輸入大寫字母A播放歌曲,《少年壯志不言愁》,輸入B播放《蝸牛與黃鸝鳥》,輸入C播放《美麗的童話》,輸入Q退出播放,其中可以在播放歌曲過程中中斷,進(jìn)行下一首要播放的歌曲(16號(hào)功能的調(diào)用)。</p><p><b> 結(jié)束語</b></p><p> 本次畢業(yè)設(shè)計(jì)論文算是畫上了句號(hào),感覺如
103、卸重?fù)?dān),總算是松了口氣,在做這個(gè)畢設(shè)時(shí),</p><p> 不知我熬了多少個(gè)日日夜夜,每晚都要熬到深夜才入睡。從中我體會(huì)到了辛苦,還有喜悅。當(dāng)我一遍一遍的去編寫程序,又一遍一遍的修改時(shí),真的很煩,很累,很想放棄,當(dāng)?shù)玫街笇?dǎo)老師的指導(dǎo)時(shí),我豁然開朗,再回去修改了一翻,終于完成了,達(dá)到了我想要的結(jié)果。當(dāng)時(shí)真的十分高興,那種成功的喜悅不能言表。</p><p> 除了那些感受之外,我還學(xué)到了
104、很多知識(shí),專業(yè)課方面的知識(shí)有:更近一步的學(xué)習(xí)了匯編語言中DOS功能號(hào)的調(diào)用,子程序的調(diào)用等,還有計(jì)算機(jī)接口技術(shù)里8255A的功能作用,8253的功能作用,及發(fā)聲原理等,除了專業(yè)課的知識(shí)外,還學(xué)到了音樂方面的樂理知識(shí),有指導(dǎo)老師講的,還有自己查資料學(xué)的,使我不再是音樂盲了。</p><p> 寫論文的時(shí)候,使我提高了打字速度,進(jìn)一步熟練了五筆打字法。在制圖過程中,我學(xué)會(huì)了畫圖,才道自己也可以制作課件。</p
105、><p> 完成畢業(yè)設(shè)計(jì),離不開指導(dǎo)老師的耐心和細(xì)心指導(dǎo),使我少做了很多無用功,使我受益匪淺。在此表示十分的感謝。</p><p> 雖然經(jīng)過細(xì)心完成但出錯(cuò)之處在所難免,還懇請(qǐng)老師在此批改我的論文。</p><p> 完成了這次的畢設(shè),只是一小步的進(jìn)步,我還要在以后的時(shí)間里更進(jìn)一步的去學(xué)習(xí)我的專業(yè)知識(shí),只有不斷的去學(xué)習(xí),才能使自己不斷地進(jìn)步。學(xué)無止境,人生有涯,而
106、知識(shí)無涯。</p><p><b> 致謝</b></p><p> 完成這個(gè)畢業(yè)設(shè)計(jì)離不開我的導(dǎo)師xx老師的耐心的指導(dǎo),和多次辛苦的批改,在此表示衷心的感謝!到一聲老師您辛苦了!</p><p> 在xx老師的指導(dǎo)中,我學(xué)到了好多以前沒學(xué)到的知識(shí)比如音樂方面的知識(shí)、16號(hào)功能的調(diào)用,讓我的程序如我所愿、EDIT命令的應(yīng)用等,使我受益匪淺
107、。</p><p> 大學(xué)生活一晃而過,回首走過的歲月,心中倍感充實(shí),當(dāng)我寫完這篇畢業(yè)論文的時(shí)候,有一種如釋重負(fù)的感覺,感慨良多。</p><p> 再次誠摯的感謝我的論文指導(dǎo)老師xx老師。她在忙碌的教學(xué)工作中擠出時(shí)間來審查、修改我的論文。還有教過我的所有老師們,你們嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣;他們循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪。</p&g
108、t;<p> 感謝三年中陪伴在我身邊的同學(xué)、朋友,感謝他們?yōu)槲姨岢龅挠幸娴慕ㄗh和意見,有了他們的支持、鼓勵(lì)和幫助,我才充實(shí)的度過了三年的學(xué)習(xí)生活,給我的大學(xué)生活,畫上了圓滿的句號(hào)。謝謝!</p><p><b> 參考文獻(xiàn)</b></p><p> [1]王成端.匯編語言程序設(shè)計(jì)[M].北京:高等教育出版社,2003</p><
109、p> [2]王成端.微機(jī)接口技術(shù)[M].2版.北京:高等教育出版社,2004</p><p> [3]丁輝.匯編語言程序設(shè)計(jì).北京:電子工業(yè)出版社,2001</p><p> [4]張念準(zhǔn),江浩.USB總線開發(fā)技術(shù)指南.北京:國防工業(yè)出版社,</p><p> [5]莊琴生.計(jì)算機(jī)接口技術(shù).西安:電子科技大學(xué)出版社.2004</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂盒畢業(yè)設(shè)計(jì)論文
- 電子音樂盒的設(shè)計(jì)【畢業(yè)論文】
- 音樂盒畢業(yè)設(shè)計(jì)
- 畢業(yè)論文(設(shè)計(jì))基于單片機(jī)的多功能音樂盒設(shè)計(jì)
- 基于單片機(jī)的遙控?zé)粜男我魳泛?畢業(yè)論文
- 單片機(jī) 音樂盒畢業(yè)設(shè)計(jì)
- 畢業(yè)論文---基于單片機(jī)的電子音樂盒
- 音樂盒.doc
- 基于單片機(jī)的音樂盒的設(shè)計(jì)畢業(yè)設(shè)計(jì)(論文)
- huwei基于at89s52單片機(jī)的音樂盒設(shè)計(jì)畢業(yè)論文
- 單片機(jī)音樂盒設(shè)計(jì)
- 基于89s52單片機(jī)與led點(diǎn)陣的音樂盒設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的音樂盒設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的音樂盒設(shè)計(jì)-畢業(yè)設(shè)計(jì)
- 音樂盒的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 課程設(shè)計(jì)--雙功能音樂盒
- 穿過風(fēng)雪的音樂盒
- 音樂盒-開題報(bào)告.doc
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)音樂盒的制作
- 單片機(jī)音樂盒課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論