版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、微機原理與接口技術(shù)課程設(shè)計 一、課程設(shè)計的任務(wù)和目的課程設(shè)計題目:音樂播放器課程設(shè)計的實現(xiàn)目的:本課程設(shè)計主要是通過匯編語言用軟件編程的方法實現(xiàn)簡單的音樂播放功能。通過在微機原理與接口技術(shù)課程上所學的匯編知識和8253/8254芯片相關(guān)知識,來完成本課程設(shè)計;用匯編程序完成鍵控音樂播放器的,用8253/8254定時器來產(chǎn)生聲音。該播放器有若干首歌曲可以選擇,開始時輸出說明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進行播放、退出或出錯提示。通過課程設(shè)計環(huán)節(jié)來加強對所學知識的理解和應用。二、課程設(shè)計相關(guān)知識 2.1 定時/計數(shù)器8253/58254 在微機及控制系統(tǒng)中,經(jīng)常要用到定時信號。如系統(tǒng)的
2、日歷時鐘,動態(tài)存儲器刷新。對外部執(zhí)行機構(gòu)控制時也需要定時中斷、定時檢測、定時查詢等。定時的方法主要是兩種:軟件定時:利用指令的執(zhí)行時間設(shè)計循環(huán)程序,使cpu 執(zhí)行延遲子程序的時間就是定時時間。缺點:執(zhí)行延遲時,cpu 一直被占用,降低了cpu 的效率。硬件定時:用計數(shù)器/定時器作為主要硬件,在軟件簡單指令的控制下產(chǎn)生精確的時間延遲。突出優(yōu)點為計數(shù)時不占用cpu 時間,如利用定時器/計數(shù)器產(chǎn)生中斷信號,可建立多作業(yè)環(huán)境,提高了cpu 效率。作為定時器可用8253或者8254,二者功能基本相同,知識工作的最高頻率不一樣。本實驗就采用了8254,其主要功能為:(1)每片上有3 個獨立的16 位的減計
3、數(shù)器通道。(2)對于每個計數(shù)器,都可以單獨作為定時器或計數(shù)器使用,并且都可以按照二進制或十進制來計數(shù)。(3)每個通道都有6 種工作方式,都可以通過程序設(shè)置或改變。(4)每個計數(shù)器的速率可高達10mhz。主要部分有:數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器、計數(shù)通道0#、1#、2#:內(nèi)部結(jié)構(gòu)如下圖: 8254內(nèi)部結(jié)構(gòu) 2.2 8254外部引腳8254芯片是具有24個引腳的雙列直插式集成電路芯片,其引腳分布如圖所示。8254芯片的24個引腳分為兩組,一組面向cpu,另一組面向外部設(shè)備,各個引腳及其所傳送信號的情況,介紹如下: 8254的引腳(1)d7d0:雙向、三態(tài)數(shù)據(jù)線引腳,與系統(tǒng)的數(shù)據(jù)線連
4、接,傳送控制、數(shù)據(jù)及狀態(tài)信息。(2)rd:來自于cpu的讀控制信號輸入引腳,低電平有效。(3)wr:來自于cpu的寫控制信號輸入引腳,低電平有效。(4)cs:芯片選擇信號輸入引腳,低電平有效。(5)a1、a0:地址信號輸入引腳,用以選擇8254芯片的通道及控制字寄存器。(6)vcc及gnd:+5v電源及接地引腳。(7)clki: i=0,1,2,第i個通道的計數(shù)脈沖輸入引腳,8254規(guī)定,加在clk引腳的輸入時鐘信號的頻率不得高于2.6mhz,即時鐘周期不能小于380ns。(8)gatei: i=0,1,2,第i個通道的門控信號輸入引腳,門控信號的作用與通道的工作方式有關(guān)。(9)outi:i=
5、0,1,2,第i個通道的定時/計數(shù)到信號輸出引腳,輸出信號的形式由通道的工作方式確定,此輸出信號可用于觸發(fā)其它電路工作,或作為向cpu發(fā)出的中斷請求信號。2.3 8254端口地址 8254控制字說明 : (1) 8254每個通道對輸入clk按二進制或二十進制從預置值開始減1計數(shù),減到0時從out輸出一個信號。 (2) 8254編程時先寫控制字,再寫時間常數(shù)。2.4 8254工作方式(1) 方式0:計數(shù)結(jié)束產(chǎn)生中斷方式當寫入控制字后,out變?yōu)榈碗娖剑攲懭氤踔岛罅⒓撮_始計數(shù),當計數(shù)結(jié)束時,變成高電平。(2) 方式1:可編程單次脈沖方式當初值裝入后且gate由低變高時,out變?yōu)榈碗娖?,計?shù)結(jié)束
6、變?yōu)楦唠娖健?3) 方式2:頻率發(fā)生器方式當初值裝入時,out變?yōu)楦?;計?shù)結(jié)束,out變?yōu)榈?。該方式下如果計?shù)未結(jié)束,但gate為低時,立即停止計數(shù),強制out變高,當gate再變高時,便啟動一次新的計數(shù)周期。(4) 方式3:方波發(fā)生器當裝入初值后,在gate上升沿啟動計數(shù),out 輸出高電平; 當計數(shù)完成一半時,out輸出低電平。方式3與方式2的工作方式類似,也是在初始化完成后能重復循環(huán)計數(shù),只是輸出的波形不同。(5)方式4:軟件出發(fā)選通方式進入工作方式4,outi輸出高電平。 裝入計數(shù)值n后, 如果gate為高電平,則立即開始減“1”計數(shù),直到計數(shù)值減到“0”為止,outi輸出寬度為一個c
7、lki周期的負脈沖。由軟件裝入的計數(shù)值只有一次有效,如果要繼續(xù)操作, 必須重新置入計數(shù)初值n。如果在操作的過程中,gate變?yōu)闊o效,則停止減“1”計數(shù), 到gate再次有效時,重新從初值開始減“1”計數(shù)。(6)方式5:硬件觸發(fā)方式計數(shù)進入工作方式5, outi輸出高電平, 硬件觸發(fā)信號由gate端引入。 因此,開始時gate應輸入為0, 裝入計數(shù)初值n后,減“1”計數(shù)并不工作,一定要等到硬件觸發(fā)信號由gate端引入一個正階躍信號,減“1”計數(shù)才會開始,待計數(shù)值計到“0”, outi將輸出負脈沖,其寬度固定為一個clki周期,表示定時時間到或計數(shù)次數(shù)到。三、程序設(shè)計思路所有音樂都是由各個不同頻率
8、的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。cpu通過對定時器的通道2(端口地址為42)進行編程,使其i/o寄存器接收一個控制聲音頻率的16位計數(shù)值,端口61h的最低控制通道2門控的開斷。以產(chǎn)生特殊的音響。當定時器接收的計數(shù)值為533h時,能產(chǎn)生896hz的聲音,因此產(chǎn)生其他頻率的計數(shù)值就可算出來:533hz×896÷頻率=1234dc÷頻率在送出頻率計數(shù)值之前,還要給方式寄存器送一個方式值,該數(shù)決定對哪一個通道
9、編程,采用什么模式,送入通道的計數(shù)值是一字節(jié)還是兩字節(jié),是二進制碼還是bcd碼。其位組合的格式如下:當通道2用于發(fā)聲時,采用的是模式3,在模式3下,輸出線為“1”和為“0”的時間各占計數(shù)時間的一半,因而產(chǎn)生一系列間隔均勻的脈沖。 產(chǎn)生指定頻率聲音的程序段如下: mov al,0b6h out 43h,al ;43h為8254的控制字端口 mov dx,12h mov ax,34dch div di ;(di)=頻率 out 42h,al ;42h為8254的通道2端口 mov al,ah mov 42h,al從定時器輸出的方波信號,經(jīng)功率放大和濾波后驅(qū)動揚聲器。送到揚聲器的信號還受到了從并行接
10、口芯片8255(端口地址為61h)來的雙重控制,端口61h的最低位控制通道2的門控開斷,以產(chǎn)生特殊的音頻信號,端口61h的pa1位和定時器的輸出信號同時作為與門的輸入,pa0和pa1位可由程序決定為0還是為1。顯然只有pa0和pa1都是1時,才能使揚聲器發(fā)出聲音??刂埔糸L的時間可以簡單地通過反復執(zhí)行指令來得到。我們知道執(zhí)行2801次loop指令約需要10ms的時間。因此用10ms的倍數(shù)值來控制揚聲器開關(guān)的時間間隔,就可控制發(fā)聲的音長了。實現(xiàn)程序如下: in al,61h mov ah,al or al,3 out 61h,al ;開揚聲器l: mov cx,2801dy:loop dy dec
11、 bx jnz l mov al,ah out 61h,al ;關(guān)揚聲器四、功能流程圖及子程序說明1、總流程圖main程序:main程序是總程序,輸出說明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。2、音樂播放子程序流程圖play子程序:play子程序是播音子程序,si指向音節(jié)表中的頻率,bp指向音節(jié)表中的時間。從si的指向的音節(jié)表中取一個頻率,只要不是-1,即有效就再讀取時間,然后計算計數(shù)初值送入計數(shù)器,產(chǎn)生各種頻率。開啟揚聲器,根據(jù)所取的時間調(diào)用若干次延時子程序。這段時間揚聲器就發(fā)出該頻率的聲音,延時結(jié)束,就關(guān)閉揚聲器,調(diào)用音節(jié)之間的小延時程序。最后修改si和
12、bp,指向下一個頻率,重復上面的工作delay子程序和delay_off子程序:兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。五、試驗結(jié)果截屏:初始界面:如果按錯了鍵,會出現(xiàn)如下界面:如果選擇正確,將出現(xiàn)如下界面:六、參考文獻【1】李長青. 微機原理與接口技術(shù). 徐州:中國礦業(yè)大學出版社,2006【2】沈美明. 匯編語言程序設(shè)計實驗教程. 北京:清華大學出版社,2002年【3】周明德. 微機原理與接口技術(shù). 北京:人民郵電出版社,2002年七、總結(jié)在本次設(shè)計中,可以說是一次成功的經(jīng)驗。在我們學完了微型計算機原理與接口技術(shù)這門課的基礎(chǔ)上來做這個設(shè)計,通過設(shè)計后,
13、使我們對這門課的理論知識的理解有很大程度上的加強。微機原理這門課程本身是一門實驗性和工程性很強的專業(yè)技術(shù)課,因此不僅要重視理論教學,更應注意實踐技能的培養(yǎng)和訓練。課程設(shè)計是這門課程的一個重要環(huán)節(jié),通過課程設(shè)計,鞏固、加深和拓寬了學習的理解,本課程設(shè)計的重點目標是使用匯編語言,而不過多涉及硬件方面的太多知識。在編程方面我通過本次課程設(shè)計學到了很多。一開始面對很長的程序往往有畏難情緒,感覺無法下手,沒辦法只能硬著頭皮啃下去,多看幾個和音樂播放有關(guān)的匯編程序,然后我就能慢慢看懂了并理解了別的作者的設(shè)計思路。然后再根據(jù)自己的思路,對照本人在圖書館借的匯編語言指導書慢慢編寫符合自己思路的程序。一次寫出來
14、的程序肯定不會是正確的,還需要進一步調(diào)試它。檢查程序過程中,在充分思考的基礎(chǔ)上多次實驗是檢查改正程序的良方。編寫程序的過程中,體會最深的是子程序的調(diào)用和程序的條理問題,一個程序就算功能實現(xiàn)了,但是也要使主程序和子程序的條理分明,易讀性高,才能算一個比較好的程序。調(diào)試程序中,學習了debug 的使用,debug對檢查程序的錯誤作用很大。同時,也要靈活使用各種調(diào)試方法,來縮小尋找錯誤的范圍。書到用時方恨少。在課程設(shè)計過程中,我才體會到這句話的深意。課堂上學的8254的知識和匯編語言都太少,還不足以完成本次課設(shè),為此我經(jīng)常跑圖書館借了各種各樣的工具書。有的書用處較大,有的書僅能用到一小塊知識,就是這
15、樣,一步步在知識的海洋里我尋覓著自己需要的東西,確實克服了不少困難,解決了不少問題。或許坎坷才能更好的使人成長。在這次的課程設(shè)計中,我的收獲是不但做出了一個符合要求的音樂播放器,而且為自己積累了一些寶貴的經(jīng)驗。同時我也對音樂方面的頻率知識有了一些認識,我想如果不是本次課程設(shè)計中用到這方面知識,我這輩子可能沒有機會去接觸這方面的知識了。這,或許也是我比別的同學多出的一點收獲吧!六、附錄1、源程序代碼:sseg segment para stack 'stack' dw 100h dup(0) ;resize the stack by changing the number
16、9;100'sseg endsdseg segmentinfo1 db 0dh,0ah,'-',0dh,0ah,'there are 3 songs:',0dh,0ah,0dh,0ah,'$'info2 db '1.happy birthday',0dh,0ah,'$'info3 db '2.sheep',0dh,0ah,'$'info4 db '3.river',0dh,0ah,'$'info5 db '0.exit',0dh
17、,0ah,'$'info6 db 'you have chosen :$'info7 db 'thank you for your use',0dh,0ah,'$'info8 db '-',0dh,0ah,'press the key to select song!',0dh,0ah,'$'info9 db 0dh,0ah,'-',0dh,0ah,'|invalid selection|',0dh,0ah,'-',0dh,0ah,
18、9;$'freg1 dw 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349 ;曲1的頻率dw 330,294,466,266,440,349,392,349,-1time1 dw 1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4 ;曲1的時間freg2 dw 330,294,262,294,3 dup(330) ;曲2的頻率dw 3 dup(294),330,392,392dw 330,294,262,294,4 dup(330)dw 294,294,3
19、30,294,262, -1time2 dw 6 dup(1),2 ;曲2的時間dw 2 dup(1,1,2)dw 12 dup(1),4freg3 dw 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294 ;曲3的頻率dw 262,262,220,196,220,262,294,332,262, -1time3 dw 3 dup(2),1,1,2,1,1,4 ;曲3的時間dw 2 dup(2,2,1,1),4dw 3 dup(2,1,1,1),4dseg endscseg segment assume
20、 cs:cseg, ds:dseg, es:dseg, ss:sseg init proc ;初始化程序 mov ax, dsegmov ds, axmov es, ax init endp main proc ;程序入口 call init re: mov dx,28bh ;關(guān)閉揚聲器mov al,89hout dx,almov dx,28ahin al,dxmov dx,288hout dx,al lea dx,info1 ;輸出說明信息mov ah,09hint 21hlea dx,info2int 21hlea dx,info3int 21hlea dx,info4int 21hlea
21、 dx,info5int 21hlea dx,info8int 21hmov ah,01h ;讀取按鍵int 21hcmp al,'1' ;根據(jù)不同的按鍵播放不同的曲子je music1cmp al,'2'je music2cmp al,'3'je music3cmp al,'0'je exitlea dx,info9 ;無效選擇,輸出錯誤提示mov ah,09hint 21hjmp re music1:mov si,offset freg1 ;指向曲1的表mov bp,offset time1call playjmp remus
22、ic2:mov si,offset freg2 ;指向曲2的表mov bp,offset time2call playjmp remusic3:mov si,offset freg3 ;指向曲3的表mov bp,offset time3call playjmp reexit:mov dx,28bh ;關(guān)閉揚聲器mov al,89hout dx,almov dx,28ahin al,dxmov dx,288hout dx,allea dx,info7 ;輸出歡迎使用信息,增加界面友好度mov ah,09hint 21hmov ax, 4c00h ;the end of the program,
23、return to the system int 21h main endp play proc ;play子程序,功能上面介紹過 l1:mov bx,ds:si ;取頻率 cmp bx,-1 ;看是否有效 je l0 ;無效就退出 mov cx,ds:bp ;讀取時間 mov dl,cl ;保存時間 add dl,30h mov ah,02h int 21h mov dx,0fh ;計算計數(shù)初值,1m的十六進制為0f4240h mov ax,4240h div bx mov bx,ax mov dx,283h ;設(shè)置計數(shù)器工作方式 mov al,36h out dx,al mov dx,28
24、0h ;輸入計數(shù)初值 mov ax,bx out dx,al mov al,ah out dx,al mov dx,28bh ;開揚聲器mov al,89hout dx,almov dx,28ahin al,dxnot almov dx,288hout dx,al rod:call delay ;延時 loop rod mov dx,28bh ;關(guān)揚聲器mov al,89hout dx,almov dx,28ahin al,dxmov dx,288hout dx,al call delay_off ;音節(jié)間延時 add si,2 add bp,2 jmp l1 l0:ret play endp
25、 delay proc ;延時子程序 push ax push bx push cx push dx mov bx,09fhll1:mov cx,0ffffh ;循環(huán)這么多次lop: loop lopdec bxjnz ll1pop dx pop cx pop bx pop ax ret delay endp delay_off proc push ax push bx push cx push dx mov bx,0fhll2:mov cx,0cfffhlop2: loop lop2dec bxjnz ll2pop dx pop cx pop bx pop ax retdelay_off e
26、ndpcseg endsend main2、各個音符的對應頻率表:音符 頻率/hz 半周期/us 音符 頻率/hz 半周期/us低1do 262 1908 #4fa# 740 0676#1do# 277 1805 中5so &
27、#160; 784 0638低2re 294 1700 #5so# 831 0602#2re# 311 1608 中6la 880
28、 0568低3m 330 1516 #6la# 932 0536低4fa 349 1433 中7si 988 0506#4fa# 370
29、0; 1350 高1do 1046 0478低5so 392 1276 #do# 1109 0451#5so# 415 1205 高2re 1175 0426低6la 440 1136 #2re# 1245 0402#6la# 466
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024合同違約處罰協(xié)議范本
- 2024個人簡單租房合同協(xié)議書下載
- 鹽城師范學院《展示道具設(shè)計》2021-2022學年第一學期期末試卷
- 鹽城師范學院《藝術(shù)與科技專業(yè)技能訓練》2023-2024學年第一學期期末試卷
- 2024工程造價服務(wù)合同模板
- 2024律師風險代理合同協(xié)議書樣本
- 北京版四年級下冊數(shù)學第三單元 平行與相交 測試卷及一套答案
- 北師大版四年級上冊數(shù)學第三單元 乘法 測試卷附答案(精練)
- 年產(chǎn)5000噸再生塑料顆粒項目環(huán)評報告表
- 年產(chǎn)10萬套減隔震橡膠支座項目環(huán)評報告表
- 網(wǎng)站服務(wù)合同域名續(xù)費與維護
- 實驗幼兒園陪餐記錄表
- JJG113_2013_標準金屬洛氏硬度塊檢定規(guī)程_解讀
- 小學數(shù)學一位數(shù)加減混合運算算術(shù)題(969道)
- 安全教育培訓記錄運輸車輛安全技術(shù)要求
- 巖漿礦床實習報告(四川攀枝花釩鈦磁鐵礦礦床)
- 非營利性醫(yī)院內(nèi)部治理體系
- 施工日記完結(jié)
- 防止鍋爐汽包滿水和缺水事故措施
- 【職業(yè)規(guī)劃】自動化專業(yè)大學生職業(yè)生涯規(guī)劃PPT
- 航模遙控器ET07使用說明書(全比例10通道遙控器)
評論
0/150
提交評論