版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、武漢理工大學(xué)微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書目錄摘要1音樂演奏21 設(shè)計(jì)任務(wù)及要求分析21.1設(shè)計(jì)任務(wù)21.2要求分析22 方案比較與選擇32.1方案一32.2方案二32.3方案選擇33 系統(tǒng)原理說明34 硬件電路與原理45 軟件設(shè)計(jì)55.1屏幕顯示程序設(shè)計(jì)55.2發(fā)聲的原理與控制程序75.3音樂編程85.3.1音樂節(jié)拍時(shí)間95.3.2音樂的音符頻率105.4 程序流程圖125.5 源程序146調(diào)試記錄及結(jié)果分析20結(jié)束語22參考文獻(xiàn)23附錄24摘要隨著科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)在各個(gè)領(lǐng)域的應(yīng)用越來越廣泛。計(jì)算機(jī)已成為人們生活、學(xué)習(xí)、工作中必備的工具。其中,匯編語言是計(jì)算機(jī)能夠提供給用戶使用的
2、最快而有效的語言,也是能夠利用計(jì)算機(jī)所有特性并能直接控制硬件的唯一語言。借助于匯編程序,計(jì)算機(jī)本身可以自動(dòng)地把匯編源程序翻譯成用機(jī)器語言表示的目的程序,從而實(shí)現(xiàn)了程序設(shè)計(jì)工作的部分自動(dòng)化。音樂演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂譜編程。通過相應(yīng)的頻率表將樂譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過延時(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)系
3、,就可以按照樂曲的曲譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表;然后編寫程序一次取出表中的頻率和時(shí)間值,調(diào)用程序發(fā)出各種聲音。這個(gè)程序最終通過菜單所提示的信息選取音樂。以80x86未處理器為 對(duì)象,以8253為計(jì)數(shù)器的核心,通過宏指令和bois系統(tǒng)功能的調(diào)用,以及運(yùn) 用masm軟件在pc機(jī)上來進(jìn)行調(diào)試和運(yùn)行,從而模擬地來實(shí)現(xiàn)“音樂演奏”的目的。關(guān)鍵詞:樂譜編程 8253定時(shí)/計(jì)數(shù)器 masm 音樂演奏音樂演奏1 設(shè)計(jì)任務(wù)及要求分析1.1設(shè)計(jì)任務(wù)編寫音樂程序,按大寫字母“a”,奏一首歌曲;按大寫字母“b”;奏另一首歌曲,曲目自選。按q退出程序。(盡量演奏完整曲目)1.2要求分析在pc機(jī)中都帶有
4、8253-5定時(shí)/計(jì)數(shù)器,ibm-pc/at中帶有8254定時(shí)/計(jì)數(shù)器,這兩種芯片功能十分類似。本文通過對(duì)8253-5定時(shí)/計(jì)數(shù)器芯片的操作實(shí)現(xiàn)音樂演奏。該聲音接口通過匯編語言對(duì)8253-5的端口直接進(jìn)行操作,可以不必要過多的使用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用來控制計(jì)算機(jī)的揚(yáng)聲器的聲音頻率。該音樂演奏主要用到通道2的功能,使通道2工作在“方波發(fā)生器”方式,產(chǎn)生相應(yīng)頻率的音調(diào)送至喇叭驅(qū)動(dòng)電路,使喇叭發(fā)出不同音調(diào)的聲音。使用8255a的pb1控制通道2的輸出對(duì)揚(yáng)聲器產(chǎn)生控制的時(shí)間
5、。人機(jī)交互包括屏幕顯示提示語以及人工輸入相應(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)用用于單字符輸入以及多字符輸出顯示。音樂演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂譜編程。通過相應(yīng)的頻率表將樂譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過延時(shí)程序轉(zhuǎn)化為對(duì)喇叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。2 方案比較與選擇2.1方案一通過編程使用軟件來實(shí)現(xiàn)計(jì)數(shù)和喇叭發(fā)聲的時(shí)間設(shè)置,控制8255a并行i/o接口驅(qū)動(dòng)喇叭發(fā)聲。cpu每執(zhí)行一條指令需要耗費(fèi)一定的時(shí)間,這樣可以通過循環(huán)的方式設(shè)置好循環(huán)
6、次數(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的開支。2.3方案選擇方案一的優(yōu)點(diǎn)是可以減少硬件開支,便于調(diào)試和問題的查找。缺點(diǎn)是cpu開支太大,利用率不高,而且時(shí)間不夠精準(zhǔn);方案二的優(yōu)點(diǎn)是控制精度提高,同時(shí)也減少cpu的開支。缺點(diǎn)是硬件開銷比較多。本設(shè)計(jì)實(shí)現(xiàn)的功能所需要的硬件電路并不是太復(fù)雜,一般的ibm
7、-pc/xt/at機(jī)家族都帶有相應(yīng)的硬件電路。在提高精度與簡(jiǎn)易程度的比較下,決定采用方案二,這樣可以大大提高時(shí)間控制精度,同時(shí)減少軟件程序的復(fù)雜度。3 系統(tǒng)原理說明在ibm-pc/xt機(jī)中都帶有8253-5定時(shí)/計(jì)數(shù)器,本文通過對(duì)8253-5定時(shí)/計(jì)數(shù)器芯片的操作實(shí)現(xiàn)音樂演奏。該聲音接口通過匯編語言對(duì)8253-5的端口直接進(jìn)行操作,可以不必要過多的使用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用來控制計(jì)算機(jī)的揚(yáng)聲器的聲音頻率。該音樂演奏主要用到通道2的功能,使通道2工作在“方波發(fā)生器”方式
8、,產(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ī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)用用于單字符輸入以及多字符輸出顯示。音樂演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂譜編程。通過相應(yīng)的頻率表將樂譜中對(duì)應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過延時(shí)程序轉(zhuǎn)化為對(duì)喇叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。4 硬件電路與原理ibm-pc/xt內(nèi)部82
9、53電路圖如圖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。音樂產(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不能通過“與門
10、”;反之,則可以通過“與門”控制揚(yáng)聲器。所以,揚(yáng)聲器發(fā)音時(shí)間的長(zhǎng)短取決于8255a的pb1信號(hào)。另外cpu通過讀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)備,清屏
11、子程序如下:clr proc near mov bh,0 ;第0頁 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 retclr endp最后輸出提示語字符。輸出提示語字符時(shí),需要多次使用一段相同的輸出代碼,將該代碼定義為宏,可以避免多次重復(fù)書寫相同的代碼。不定義為子程序是為了避免多次調(diào)用使執(zhí)行速度減慢。相應(yīng)宏定義語句為:show mac
12、ro 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,
13、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ā)聲的原理與控制程序一首樂曲由若干音符組成,一個(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,因此在打開揚(yáng)聲器的條件下,執(zhí)行下列程序段即可發(fā)出與輸出頻率對(duì)應(yīng)的音調(diào)。mov al,0b6h ;寫入方式控制字out 43h,a
14、l ;寫入控制端口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ù)器 接下來設(shè)計(jì)發(fā)聲程序,發(fā)聲系統(tǒng)受8255a芯片(端口地址為60h-63h)的兩根輸出線pb0和pb1的控制,pb0輸出的高電平使2號(hào)計(jì)數(shù)器正常工作,pb1輸出高電平打開輸出控制門。發(fā)聲程序代碼如下:in al,61h ;讀取8255a的pb端口原輸出值mov ah,al ;將原輸出值保存于ah中or al,3 ;使pb0、pb1、均為1out 61h,al ;打開gate2門,輸出方波到揚(yáng)
15、聲器5.3音樂編程一首歌曲包含節(jié)拍和頻率,此處定義的音樂地址宏包含兩個(gè)參數(shù),所以音樂編程需要對(duì)音樂的節(jié)拍時(shí)間以及樂譜(頻率)進(jìn)行編寫程序。當(dāng)選擇不同的歌曲時(shí),主程序調(diào)用不同的宏,將用戶要求的歌曲的頻率和節(jié)拍導(dǎo)入,實(shí)現(xiàn)音樂的演奏。5.3.1音樂節(jié)拍時(shí)間控制音符的演奏時(shí)間,這是設(shè)計(jì)音樂程序的關(guā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í)在
16、修改它。節(jié)拍時(shí)間設(shè)置好以后,就可以利用延時(shí)程序,通過pb1端口控制發(fā)聲的時(shí)間長(zhǎng)短。80x86的各種處理器采用6-66mhz的工作頻率,loop治理的執(zhí)行時(shí)間在這些處理器上也不同。為了建立一個(gè)與處理器無關(guān)的時(shí)間延遲,ibm采用了一個(gè)利用硬件產(chǎn)生時(shí)間延遲的方法,即通過監(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í)保
17、護(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音樂的音符頻率程序用mus_freg、mus_time分別定義了音樂頻率和節(jié)拍。使得發(fā)聲程序可以按照理想的要求發(fā)出連續(xù)的樂曲。節(jié)拍和頻率定義原理如下:樂曲是按照一定的高低、長(zhǎng)短和強(qiáng)弱關(guān)系組成的音調(diào),在每一首樂曲中,每個(gè)音符的音高和音長(zhǎng)與發(fā)聲系統(tǒng)中的
18、頻率、節(jié)拍有關(guān)??蓞⒖枷卤恚罕?-1 音符頻率音名cdefgabcdefgabc唱名12345671234567i頻率131147165175196220247262294330349392440492523其中,低音階從低音c(131hz)到中央c(262hz),高音階從中央c(262hz)到高音c(523hz)。組成樂曲的音符的頻率值和持續(xù)時(shí)間是樂曲程序發(fā)聲所必需的兩組數(shù)據(jù),頻率可以查上表,音符的持續(xù)時(shí)間根據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定。知道了音調(diào)及頻率、時(shí)間的關(guān)系后,可以按照樂曲的樂譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義為兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值和時(shí)間值。本次設(shè)計(jì)所選
19、的兩首音樂樂譜如圖圖5-3 蘭花草樂譜圖5-4生日快樂樂譜根據(jù)上述原理對(duì)兩首音樂進(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,-1mus_time1 dw 30,30,30,30,60,30 d
20、w 30,15,30,30,120 dw 30,30,30,30,80,30 dw 30,30,30,30,120 dw 30,30,30,30,60,3025dw 30,30,30,30,60,60 dw 30,30,30,30,60,60 dw 30,15,30,30,120mus_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
21、30,30,60,60,60,120 dw 30,30,60,60,60,60,60 dw 30,30,60,60,60,1205.4 程序流程圖主流程圖開始鍵盤輸入提示信息輸入是“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)用開始計(jì)數(shù)并打開揚(yáng)聲器 y n圖5-6 gensound子程序流程圖 music子程序流程圖圖5-7 music子程序流程圖5.5 源程
22、序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
23、 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,-1mus_time1 dw 30,30,30,30,60,30 dw 30,15,30,30,120 dw 30,30,
24、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 youmus_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
25、,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 ;將提示
26、語的偏移地址送入dx mov ah,9 ;調(diào)用中斷,輸出多字符 int 21h endm ;* 音樂地址宏 address macro a,b lea si,a ;將頻率表的偏移地址送入silea bp,ds:b ;將節(jié)拍時(shí)間表的偏移地址送入bpendm ;* 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,
27、mus_time1 ;取數(shù)據(jù) call music ;調(diào)用音樂子程序 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ò)誤,顯示提示語 show info6 show info1 show info2 show info3 show info4 sho
28、w muslist jmp input retu: mov ah,4ch ;返回 int 21h ;* ;背景清屏clr proc near mov bh,0 ;第0頁 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 retclr endp;*發(fā)聲 gensound proc near push ax ;保護(hù)寄存器 push bx push cx push dx p
29、ush 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 ;打開gate2門,輸出方波到揚(yáng)聲器wait1: mov cx,3314 ;延時(shí) call waitf delay1: dec bx ;節(jié)拍時(shí)間值減1 jnz wait
30、1 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ù)寄存器 r
31、et waitf endp ;* music proc 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ù)時(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 start6調(diào)試記錄及結(jié)果分析將源程序編寫完成后,在pc機(jī)上,使用軟件masm進(jìn)行調(diào)試運(yùn)行。,剛開始編譯時(shí),出現(xiàn)了很多的變量未定義的錯(cuò)誤,經(jīng)過反復(fù)檢查,將拼寫錯(cuò)誤的地方一一改正,隨后發(fā)現(xiàn)在按照提示正確輸入時(shí),可以演奏音樂,但是當(dāng)輸入錯(cuò)誤的字符時(shí),發(fā)現(xiàn)屏幕并不顯示錯(cuò)誤提示語,經(jīng)過多次檢查和調(diào)試,發(fā)現(xiàn)是沒有清屏程序重新設(shè)置文本顯示模式,加上該段代碼后程序運(yùn)行正常。調(diào)試過程中聲音的節(jié)拍調(diào)試時(shí)間比較長(zhǎng),多次取值后得到一個(gè)可以識(shí)別的演奏聲音。解決完程序中的問題后,按提示語輸入相應(yīng)的字符命令,可以播
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度爬架租賃業(yè)務(wù)戰(zhàn)略合作框架合同4篇
- 二零二四年度新媒體主播網(wǎng)絡(luò)直播內(nèi)容版權(quán)合作合同3篇
- 2025年度美國(guó)新移民必知的移民政策解析與法律服務(wù)合同3篇
- 2025年度科技項(xiàng)目出差補(bǔ)貼與保障服務(wù)合同3篇
- 2025年度個(gè)人傭金提成及獎(jiǎng)勵(lì)合同3篇
- 二零二五版南匯農(nóng)業(yè)志版權(quán)授權(quán)合同4篇
- 二零二五年度物業(yè)小區(qū)門衛(wèi)安全防護(hù)服務(wù)合同4篇
- 二零二五年度智能電視操作系統(tǒng)授權(quán)使用合同4篇
- 二零二四年度醫(yī)療設(shè)備維修與保養(yǎng)服務(wù)外協(xié)合同
- 2025年度門面房租賃風(fēng)險(xiǎn)評(píng)估與管理合同4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 商場(chǎng)電氣設(shè)備維護(hù)勞務(wù)合同
- 《妊娠期惡心嘔吐及妊娠劇吐管理指南(2024年)》解讀
- 2023年國(guó)家公務(wù)員錄用考試《行測(cè)》真題(行政執(zhí)法)及答案解析
- 全國(guó)教學(xué)設(shè)計(jì)大賽一等獎(jiǎng)英語七年級(jí)上冊(cè)(人教2024年新編)《Unit 2 Were Family!》單元教學(xué)設(shè)計(jì)
- 2024智慧醫(yī)療數(shù)據(jù)字典標(biāo)準(zhǔn)值域代碼
- 年產(chǎn)12萬噸裝配式智能鋼結(jié)構(gòu)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 【獨(dú)家揭秘】2024年企業(yè)微信年費(fèi)全解析:9大行業(yè)收費(fèi)標(biāo)準(zhǔn)一覽
- 醫(yī)療器械經(jīng)銷商會(huì)議
- 《±1100kV特高壓直流換流變壓器使用技術(shù)條件》
評(píng)論
0/150
提交評(píng)論