第一篇:微機原理課程設(shè)計音樂播放器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
一、課程設(shè)計的任務(wù)和目的
課程設(shè)計題目:音樂播放器
課程設(shè)計的實現(xiàn)目的:本課程設(shè)計主要是通過匯編語言用軟件編程的方法實現(xiàn)簡單的音樂播放功能。通過在《微機原理與接口技術(shù)》課程上所學(xué)的匯編知識和8253/8254芯片相關(guān)知識,來完成本課程設(shè)計;用匯編程序完成鍵控音樂播放器的,用8253/8254定時器來產(chǎn)生聲音。該播放器有若干首歌曲可以選擇,開始時輸出說明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進行播放、退出或出錯提示。通過課程設(shè)計環(huán)節(jié)來加強對所學(xué)知識的理解和應(yīng)用。
二、課程設(shè)計相關(guān)知識
2.1 定時/計數(shù)器8253/58254
在微機及控制系統(tǒng)中,經(jīng)常要用到定時信號。如系統(tǒng)的日歷時鐘,動態(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 位的減計數(shù)器通道。
(2)對于每個計數(shù)器,都可以單獨作為定時器或計數(shù)器使用,并且都可以按照二進制或十進制來計數(shù)。
(3)每個通道都有6 種工作方式,都可以通過程序設(shè)置或改變。(4)每個計數(shù)器的速率可高達10MHz。
主要部分有:數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器、計數(shù)通道0#、1#、2#: 內(nèi)部結(jié)構(gòu)如下圖:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
8254內(nèi)部結(jié)構(gòu)
2.2 8254外部引腳
8254芯片是具有24個引腳的雙列直插式集成電路芯片,其引腳分布如圖所示。8254芯片的24個引腳分為兩組,一組面向CPU,另一組面向外部設(shè)備,各個引腳及其所傳送信號的情況,介紹如下:
8254的引腳
(1)D7~D0:雙向、三態(tài)數(shù)據(jù)線引腳,與系統(tǒng)的數(shù)據(jù)線連接,傳送控制、數(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。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
(8)GATEi: i=0,1,2,第i個通道的門控信號輸入引腳,門控信號的作用與通道的工作方式有關(guān)。
(9)OUTi:i=0,1,2,第i個通道的定時/計數(shù)到信號輸出引腳,輸出信號的形式由通道的工作方式確定,此輸出信號可用于觸發(fā)其它電路工作,或作為向CPU發(fā)出的中斷請求信號。
2.3 8254端口地址
8254控制字
說明 :(1)8254每個通道對輸入CLK按二進制或二十進制從預(yù)置值開始減1計數(shù),減到0時從OUT輸出一個信號。
(2)8254編程時先寫控制字,再寫時間常數(shù)。
2.4 8254工作方式
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
(1)方式0:計數(shù)結(jié)束產(chǎn)生中斷方式
當(dāng)寫入控制字后,OUT變?yōu)榈碗娖?,?dāng)寫入初值后立即開始計數(shù),當(dāng)計數(shù)結(jié)束時,變成高電平。
(2)方式1:可編程單次脈沖方式
當(dāng)初值裝入后且GATE由低變高時,OUT變?yōu)榈碗娖?,計?shù)結(jié)束變?yōu)楦唠娖健?3)方式2:頻率發(fā)生器方式
當(dāng)初值裝入時,OUT變?yōu)楦?;計?shù)結(jié)束,OUT變?yōu)榈?。該方式下如果計?shù)未結(jié)束,但GATE為低時,立即停止計數(shù),強制OUT變高,當(dāng)GATE再變高時,便啟動一次新的計數(shù)周期。
(4)方式3:方波發(fā)生器
當(dāng)裝入初值后,在GATE上升沿啟動計數(shù),OUT 輸出高電平; 當(dāng)計數(shù)完成一半時,OUT輸出低電平。方式3與方式2的工作方式類似,也是在初始化完成后能重復(fù)循環(huán)計數(shù),只是輸出的波形不同。
(5)方式4:軟件出發(fā)選通方式
進入工作方式4,OUTi輸出高電平。裝入計數(shù)值n后,如果GATE為高電平,則立即開始減“1”計數(shù),直到計數(shù)值減到“0”為止,OUTi輸出寬度為一個CLKi周期的負(fù)脈沖。由軟件裝入的計數(shù)值只有一次有效,如果要繼續(xù)操作,必須重新置入計數(shù)初值n。如果在操作的過程中,GATE變?yōu)闊o效,則停止減“1”計數(shù),到GATE再次有效時,重新從初值開始減“1”計數(shù)。
(6)方式5:硬件觸發(fā)方式計數(shù)
進入工作方式5,OUTi輸出高電平,硬件觸發(fā)信號由GATE端引入。因此,開始時GATE應(yīng)輸入為0,裝入計數(shù)初值n后,減“1”計數(shù)并不工作,一定要等到硬件觸發(fā)信號由GATE端引入一個正階躍信號,減“1”計數(shù)才會開始,待計數(shù)值計到“0”,OUTi將輸出負(fù)脈沖,其寬度固定為一個CLKi周期,表示定時時間到或計數(shù)次數(shù)到。
三、程序設(shè)計思路
所有音樂都是由各個不同頻率的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。
CPU通過對定時器的通道2(端口地址為42)進行編程,使其I/O寄存器接收一個控制聲音頻率的16位計數(shù)值,端口61H的最低控制通道2門控的開斷。以產(chǎn)生特殊的音響。當(dāng)定時器接收的計數(shù)值為533H時,能產(chǎn)生896Hz的聲音,因此產(chǎn)生其他頻率的計數(shù)值就可算出來:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
533Hz×896÷頻率=1234DC÷頻率
在送出頻率計數(shù)值之前,還要給方式寄存器送一個方式值,該數(shù)決定對哪一個通道編程,采用什么模式,送入通道的計數(shù)值是一字節(jié)還是兩字節(jié),是二進制碼還是BCD碼。其位組合的格式如下:
當(dāng)通道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ū)動揚聲器。送到揚聲器的信號還受到了從并行接口芯片8255(端口地址為61H)來的雙重控制,端口61H的最低位控制通道2的門控開斷,以產(chǎn)生特殊的音頻信號,端口61H的PA1位和定時器的輸出信號同時作為與門的輸入,PA0和PA1位可由程序決定為0還是為1。顯然只有PA0和PA1都是1時,才能使揚聲器發(fā)出聲音??刂埔糸L的時間可以簡單地通過反復(fù)執(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,2801 DY:LOOP DY DEC BX JNZ L MOV AL,AH OUT 61H,AL;關(guān)揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
四、功能流程圖及子程序說明
1、總流程圖
MAIN程序:MAIN程序是總程序,輸出說明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。
開始輸出說明讀取按鍵是‘1’?N是‘2’?Y播放曲1Y播放曲2N是‘3’?Y播放曲3N是‘0’?Y結(jié)束Y選擇無效程序總流程圖
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和BP,指向下一個頻率,重復(fù)上面的工作
DELAY子程序和DELAY_OFF子程序:兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
開始保護現(xiàn)場曲N各音符頻率設(shè)置曲N各音符時間設(shè)置讀取頻率F頻率是-1 ?Y恢復(fù)現(xiàn)場N讀取時間T結(jié)束返回計算機計數(shù)次數(shù)送計數(shù)器,產(chǎn)生該頻率F信號啟動喇叭延時T關(guān)閉喇叭音符間延時播音流程圖
五、試驗結(jié)果截屏:
初始界面:
如果按錯了鍵,會出現(xiàn)如下界面:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
如果選擇正確,將出現(xiàn)如下界面:
六、參考文獻
【1】李長青.微機原理與接口技術(shù).徐州:中國礦業(yè)大學(xué)出版社,2006 【2】沈美明.匯編語言程序設(shè)計實驗教程.北京:清華大學(xué)出版社,2002年 【3】周明德.微機原理與接口技術(shù).北京:人民郵電出版社,2002年
七、總結(jié)
在本次設(shè)計中,可以說是一次成功的經(jīng)驗。在我們學(xué)完了《微型計算機原理與接口技術(shù)》這門課的基礎(chǔ)上來做這個設(shè)計,通過設(shè)計后,使我們對這門課的理論知識的理解有很大程度上的加強。微機原理這門課程本身是一門實驗性和工程性很強的專業(yè)技術(shù)課,因此不僅要重視理論教學(xué),更應(yīng)注意實踐技能的培養(yǎng)和訓(xùn)練。課程設(shè)計是這門課程的一個重要環(huán)節(jié),通過課程設(shè)計,鞏固、加深和拓寬了學(xué)習(xí)的理解,本課程設(shè)計的重點目標(biāo)是使用匯編語言,而不過多涉及硬件方面的太多知識。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
在編程方面我通過本次課程設(shè)計學(xué)到了很多。一開始面對很長的程序往往有畏難情緒,感覺無法下手,沒辦法只能硬著頭皮啃下去,多看幾個和音樂播放有關(guān)的匯編程序,然后我就能慢慢看懂了并理解了別的作者的設(shè)計思路。然后再根據(jù)自己的思路,對照本人在圖書館借的匯編語言指導(dǎo)書慢慢編寫符合自己思路的程序。一次寫出來的程序肯定不會是正確的,還需要進一步調(diào)試它。檢查程序過程中,在充分思考的基礎(chǔ)上多次實驗是檢查改正程序的良方。編寫程序的過程中,體會最深的是子程序的調(diào)用和程序的條理問題,一個程序就算功能實現(xiàn)了,但是也要使主程序和子程序的條理分明,易讀性高,才能算一個比較好的程序。調(diào)試程序中,學(xué)習(xí)了DEBUG 的使用,DEBUG對檢查程序的錯誤作用很大。同時,也要靈活使用各種調(diào)試方法,來縮小尋找錯誤的范圍。
書到用時方恨少。在課程設(shè)計過程中,我才體會到這句話的深意。課堂上學(xué)的8254的知識和匯編語言都太少,還不足以完成本次課設(shè),為此我經(jīng)常跑圖書館借了各種各樣的工具書。有的書用處較大,有的書僅能用到一小塊知識,就是這樣,一步步在知識的海洋里我尋覓著自己需要的東西,確實克服了不少困難,解決了不少問題?;蛟S坎坷才能更好的使人成長。在這次的課程設(shè)計中,我的收獲是不但做出了一個符合要求的音樂播放器,而且為自己積累了一些寶貴的經(jīng)驗。同時我也對音樂方面的頻率知識有了一些認(rèn)識,我想如果不是本次課程設(shè)計中用到這方面知識,我這輩子可能沒有機會去接觸這方面的知識了。這,或許也是我比別的同學(xué)多出的一點收獲吧!
六、附錄
1、源程序代碼:
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0);Resize the stack by changing the number '100' SSEG ENDS
DSEG SEGMENT INFO1 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,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
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
SELECTION|',0DH,0AH,'-------------------',0DH,0AH,'$' 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,-1 TIME1 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,392 DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262,-1 TIME2 DW 6 DUP(1),2
;曲2的時間
DW 2 DUP(1,1,2)DW 12 DUP(1),4 FREG3 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,-1 TIME3 DW 3 DUP(2),1,1,2,1,1,4
;曲3的時間
DW 2 DUP(2,2,1,1),4 DW 3 DUP(2,1,1,1),4 DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG
INIT PROC
;初始化程序
mov ax, dseg mov ds, ax mov es, ax
INIT ENDP
MAIN PROC
;程序入口
call INIT
RE: MOV DX,28BH
;關(guān)閉揚聲器
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
LEA DX,INFO1
;輸出說明信息
MOV AH,09H INT 21H LEA DX,INFO2 INT 21H LEA DX,INFO3 INT 21H
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
LEA DX,INFO4 INT 21H LEA DX,INFO5 INT 21H LEA DX,INFO8 INT 21H
MOV AH,01H
;讀取按鍵
INT 21H CMP AL,'1'
;根據(jù)不同的按鍵播放不同的曲子
JE MUSIC1 CMP AL,'2' JE MUSIC2 CMP AL,'3' JE MUSIC3 CMP AL,'0' JE EXIT
LEA DX,INFO9
MOV AH,09H INT 21H JMP RE
MUSIC1: MOV SI,OFFSET FREG1
MOV BP,OFFSET TIME1 CALL PLAY JMP RE MUSIC2: MOV SI,OFFSET FREG2
MOV BP,OFFSET TIME2 CALL PLAY JMP RE MUSIC3: MOV SI,OFFSET FREG3
MOV BP,OFFSET TIME3 CALL PLAY JMP RE EXIT: MOV DX,28BH
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX
;無效選擇,輸出錯誤提示
;指向曲1的表;指向曲2的表;指向曲3的表;關(guān)閉揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
MOV DX,288H OUT DX,AL
LEA DX,INFO7
;輸出歡迎使用信息,增加界面友好度
MOV AH,09H INT 21H mov ax, 4c00h;The end of the program, return to the system
int 21h
MAIN ENDP
PLAY PROC
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
MOV AX,4240H
DIV BX
MOV BX,AX
MOV DX,283H
MOV AL,36H
OUT DX,AL
MOV DX,280H
MOV AX,BX
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX NOT AL MOV DX,288H OUT DX,AL
ROD:CALL DELAY
LOOP ROD
MOV DX,28BH
MOV AL,89H
;PLAY子程序,功能上面介紹過
;取頻率
;看是否有效
;無效就退出
;讀取時間
;保存時間
;計算計數(shù)初值,1M的十六進制為0F4240H
;設(shè)置計數(shù)器工作方式
;輸入計數(shù)初值
;開揚聲器
;延時
;關(guān)揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
OUT DX,AL MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
CALL DELAY_OFF
;音節(jié)間延時
ADD SI,2
ADD BP,2
JMP L1
L0: RET
PLAY ENDP
DELAY PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,09FH LL1:MOV CX,0FFFFH
LOP: LOOP LOP DEC BX JNZ LL1 POP DX
POP CX
POP BX
POP AX
RET
DELAY ENDP
DELAY_OFF PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0FH LL2:MOV CX,0CFFFH LOP2: LOOP LOP2 DEC BX JNZ LL2 POP DX
POP CX
POP BX
POP AX
RET
;延時子程序
;循環(huán)這么多次
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
DELAY_OFF ENDP CSEG ENDS END MAIN
2、各個音符的對應(yīng)頻率表:
音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253
第二篇:微機原理課程設(shè)計——音樂播放器
一. 課程設(shè)計目的
1.通過D/A裝換器產(chǎn)生模擬信號,使PC機作為簡易音樂播放器。2.了解利用數(shù)模轉(zhuǎn)換器產(chǎn)生音樂的基本方法。
二.課程設(shè)計任務(wù)
設(shè)計并實現(xiàn)一個鍵控音樂播放器。要求:
(1)自己選用合適的芯片,不少于兩種。
(2)自行設(shè)計電路并使用匯編語言編寫程序完成鍵控音樂播放器功能。
(3)該播放器有若干首歌曲可以選擇,開始時輸出說明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進行播放、退出或出錯提示。
三、總體設(shè)計方案
1、總體設(shè)計方案一
所有音樂都是由各個不同頻率的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。而我們學(xué)過的有計數(shù)器可以產(chǎn)生各種頻率,所以我們主要采用計數(shù)器8253產(chǎn)生各音符,用8255并行接口來控制揚聲器的開關(guān),達到播放音樂的功能。
2、總體設(shè)計方案二
可以使用0832(數(shù)模轉(zhuǎn)換器)來產(chǎn)生頻率,原理圖:
更連續(xù),效果更好點。
提出這個方案是因為我想產(chǎn)生模擬信號,來驅(qū)動揚聲器,這樣產(chǎn)生的聲音更加圓潤感覺我們想把一個周期的波形分成32份,然后每份給8253一個值讓他轉(zhuǎn)換成模擬信號,不同的頻率可以用8253計數(shù)器控制,比如要產(chǎn)生261Hz的頻率,使用1MHz的話,周期就為1/261=3.83ms,分成32份,每份間隔時間就是3.83ms/32=0.12ms,換句話說就是送計數(shù)器0的初值為1M/261/32=120次。
3、各個音符的對應(yīng)頻率表:
音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253
四.部分電路設(shè)計及功能解說
1、頻率發(fā)生電路
使用8253產(chǎn)生音符頻率。8253采用方式3,產(chǎn)生方波信號,根據(jù)輸入計數(shù)初值的不同產(chǎn)生不同頻率的方波信號來驅(qū)動揚聲器。
2、揚聲器開關(guān)控制電路
使用8255并行接口芯片來控制揚聲器的開和關(guān),PC0始終接低電平,PA0和8253的OUT0接在與門上,這樣只有PA0=1時揚聲器才有可能開通,否則不發(fā)聲。關(guān)閉的方法是,從PC口讀入數(shù)據(jù)再從PA口輸出;而開揚聲器時只要在輸出PA口數(shù)據(jù)前對數(shù)據(jù)進行一個取反操作就可以了。
設(shè)某音符頻率為fHz,而CLK脈沖是1MHz,則計數(shù)初值N=1M/f。8253的控制端口為28BH,控制字為36H。五.硬件接線圖
六.軟件設(shè)計流程圖
1、總流程圖
開始輸出說明讀取按鍵是‘1’?N是‘2’?Y播放曲1Y播放曲2N是‘3’?Y播放曲3N是‘0’?Y結(jié)束Y選擇無效程序總流程圖
2、音樂播放子程序流程圖
開始保護現(xiàn)場曲N各音符頻率設(shè)置曲N各音符時間設(shè)置讀取頻率F頻率是-1 ?Y恢復(fù)現(xiàn)場N讀取時間T結(jié)束返回計算機計數(shù)次數(shù)送計數(shù)器,產(chǎn)生該頻率F信號啟動喇叭延時T關(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和BP,指向下一個頻率,重復(fù)上面的工作。
3、DELAY子程序和DELAY_OFF子程序
兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。八.程序清單
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0);Resize the stack by changing the number '100' SSEG ENDS
DSEG SEGMENT
;TO DO: Add your program's data here INFO1 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,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,'$' 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,-1 TIME1 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,392 DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262,-1 TIME2 DW 6 DUP(1),2
;曲2的時間
DW 2 DUP(1,1,2)DW 12 DUP(1),4 FREG3 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,-1 TIME3 DW 3 DUP(2),1,1,2,1,1,4
;曲3的時間
DW 2 DUP(2,2,1,1),4 DW 3 DUP(2,1,1,1),4 DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG
INIT PROC;Initialize procedure
mov ax, dseg mov ds, ax
mov es, ax;TO DO: Add your initialize code here(as your requirement)ret
;return to the MAIN procedure
INIT ENDP
MAIN PROC
;Here is your program entry point
call INIT;call the INIT procedure to initialize the program
;**TO DO: Add your main code here**
RE: MOV DX,28BH
;關(guān)閉揚聲器
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
LEA DX,INFO1 MOV AH,09H INT 21H LEA DX,INFO2 INT 21H LEA DX,INFO3 INT 21H LEA DX,INFO4 INT 21H LEA DX,INFO5 INT 21H LEA DX,INFO8 INT 21H
MOV AH,01H
INT 21H CMP AL,'1'
JE MUSIC1 CMP AL,'2' JE MUSIC2 CMP AL,'3' JE MUSIC3 CMP AL,'0' JE EXIT
LEA DX,INFO9 MOV AH,09H INT 21H JMP RE
;輸出說明信息
;讀取按鍵
;根據(jù)不同的按鍵播放不同的曲子
;無效選擇,輸出錯誤提示
MUSIC1: MOV SI,OFFSET FREG1
;指向曲1的表
MOV BP,OFFSET TIME1 CALL PLAY JMP RE MUSIC2: MOV SI,OFFSET FREG2
;指向曲2的表
MOV BP,OFFSET TIME2 CALL PLAY JMP RE MUSIC3: MOV SI,OFFSET FREG3
;指向曲3的表
MOV BP,OFFSET TIME3 CALL PLAY JMP RE EXIT: MOV DX,28BH
;關(guān)閉揚聲器
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL LEA DX,INFO7
;輸出歡迎使用信息,增加界面友好度 MOV AH,09H INT 21H mov ax, 4c00h;The end of the program, return to the system MOV AL,89H OUT DX,AL
int 21h
MAIN ENDP
;TO DO: Add other procedures(PROC)here(as your requirement)
;THE PROGRAMME OF PLAYING THE MUSIC
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,280H
;輸入計數(shù)初值
MOV AX,BX
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX NOT AL MOV DX,288H OUT DX,AL
ROD:CALL DELAY
LOOP ROD
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL CALL DELAY_OFF
ADD SI,2
ADD BP,2
JMP L1
L0: RET
PLAY ENDP
DELAY PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,09FH LL1:MOV CX,0FFFFH
;開揚聲器 ;延時
;關(guān)揚聲器
;延時子程序
;循環(huán)這么多次
;音節(jié)間延時
LOP: LOOP LOP DEC BX JNZ LL1 POP DX
POP CX
POP BX
POP AX
RET
DELAY ENDP
DELAY_OFF PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0FH LL2:MOV CX,0CFFFH LOP2: LOOP LOP2 DEC BX JNZ LL2 POP DX
POP CX
POP BX
POP AX
RET DELAY_OFF ENDP CSEG ENDS;TO DO: Add other segments here(as your requirement)
END MAIN
九.試驗結(jié)果和分析
1、試驗結(jié)果:
程序初始運行界面
如果按錯了鍵,會出現(xiàn)如下界面
如果選擇正確,將出現(xiàn)如下界面:
2、分析
這是按照方案一做的結(jié)果,按1~3分別播放“生日快樂”等歌,但由于本組人對音樂都是外行,各音階頻率的排序和延時時間搭配不好,導(dǎo)致音樂嚴(yán)重走調(diào),但基本能聽出不是噪音。
按照方案二做的電路和程序,無論怎么樣都不出聲,后來我們直接送數(shù)據(jù)到0832產(chǎn)生三角波信號(程序在我們的一次作業(yè)中寫的)。還是無法讓揚聲器發(fā)出聲音,因此按這個方案失敗了。
十.課程設(shè)計總結(jié)和體會
1.實驗過程中碰到了很多的難題和障礙,我認(rèn)識到平時基礎(chǔ)知識的重要性,只有能夠熟練的掌握才能在實驗過程中得心應(yīng)手,否則一步錯則整個試驗都會陷入困境,因而,嚴(yán)謹(jǐn)?shù)膽B(tài)度是試驗成功的重要保障!
2.通過這次課程設(shè)計,我們對各個芯片有了進一步的了解,對各個芯片的功能有了更深刻的認(rèn)識和體會,平時上課的理論知識只是停留在理論的層面,只有通過了這樣的試驗才能更好的體會到,做到了理論和實際的相結(jié)合,使理論知識真正運用到了實踐中去。在課程設(shè)計過程中,同組人員之間相互合作,共同研究使我更加堅信了團體的力量。在團體的共同協(xié)作和努力下,任何的難題都可以被解決!
3.我們大家在實驗的時候都團結(jié)合作,遇到問題時候一起探討,增強了我們的合作精神。
十一.參考文獻
1、《〈微機原理與接口技術(shù)〉學(xué)生實驗指導(dǎo)書》 揚州大學(xué) 羅加奇
2、《微機原理及應(yīng)用》 機械工業(yè)出版社 胡鋼 主編
第三篇:微機原理課程設(shè)計電子音樂播放器
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
目錄
一、課程設(shè)計任務(wù)及要求...................................................1 1.1課程設(shè)計題目:....................................................1 1.2課程設(shè)計任務(wù)及要求:..............................................1
二、課程設(shè)計相關(guān)知識.....................................................1 2.1 定時/計數(shù)器8253/58254............................................1 2.2 8254外部引腳.....................................................2 2.3 8254端口地址....................................................3 2.4 8254工作方式....................................................4
三、程序設(shè)計思路.........................................................5
四、功能流程圖及子程序說明...............................................6 4.1總流程圖..........................................................6 4.2音樂播放子程序流程圖..............................................7 4.3部分源程序代碼....................................................9
五、調(diào)試結(jié)果截屏及結(jié)果分析..............................................10 5.1調(diào)試結(jié)果截屏.....................................................10 5.2結(jié)果分析.........................................................11
六、參考文獻............................................................11
七、附錄................................................................12 7.1源程序代碼:.....................................................13 7.2各個音符的對應(yīng)頻率表:...........................................17
八、總結(jié)................................................................18
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
一、課程設(shè)計任務(wù)及要求
1.1課程設(shè)計題目:
電子音樂播放器
1.2課程設(shè)計任務(wù)及要求:
設(shè)計一個音樂程序,演奏音樂按大寫字母“A”,唱樂曲“瑪麗有只小羔羊”;
按大寫字母“B”,唱樂曲“太湖船”
按大寫字母“C”,唱樂曲“祝福歌”
按“Q”鍵,退出
二、課程設(shè)計相關(guān)知識
2.1 定時/計數(shù)器8253/58254
在微機及控制系統(tǒng)中,經(jīng)常要用到定時信號。如系統(tǒng)的日歷時鐘,動態(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 位的減計數(shù)器通道。
(2)對于每個計數(shù)器,都可以單獨作為定時器或計數(shù)器使用,并且都可以按照二進制或十進制來計數(shù)。
武漢理工大學(xué)《微機原理與接口技術(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)D7~D0:雙向、三態(tài)數(shù)據(jù)線引腳,與系統(tǒng)的數(shù)據(jù)線連接,傳送控制、數(shù)據(jù)及狀態(tài)信息。
(2)RD:來自于CPU的讀控制信號輸入引腳,低電平有效。
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
(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=0,1,2,第i個通道的定時/計數(shù)到信號輸出引腳,輸出信號的形式由通道的工作方式確定,此輸出信號可用于觸發(fā)其它電路工作,或作為向CPU發(fā)出的中斷請求信號。
2.3 8254端口地址
8254控制字 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
說明 :(1)8254每個通道對輸入CLK按二進制或二十進制從預(yù)置值開始減1計數(shù),減到0時從OUT輸出一個信號。
(2)8254編程時先寫控制字,再寫時間常數(shù)。
2.4 8254工作方式
(1)方式0:計數(shù)結(jié)束產(chǎn)生中斷方式
當(dāng)寫入控制字后,OUT變?yōu)榈碗娖?,?dāng)寫入初值后立即開始計數(shù),當(dāng)計數(shù)結(jié)束時,變成高電平。
(2)方式1:可編程單次脈沖方式
當(dāng)初值裝入后且GATE由低變高時,OUT變?yōu)榈碗娖?,計?shù)結(jié)束變?yōu)楦唠娖健?3)方式2:頻率發(fā)生器方式
當(dāng)初值裝入時,OUT變?yōu)楦撸挥嫈?shù)結(jié)束,OUT變?yōu)榈?。該方式下如果計?shù)未結(jié)束,但GATE為低時,立即停止計數(shù),強制OUT變高,當(dāng)GATE再變高時,便啟動一次新的計數(shù)周期。
(4)方式3:方波發(fā)生器
當(dāng)裝入初值后,在GATE上升沿啟動計數(shù),OUT 輸出高電平; 當(dāng)計數(shù)完成一半時,OUT輸出低電平。方式3與方式2的工作方式類似,也是在初始化完成后能重復(fù)循環(huán)計數(shù),只是輸出的波形不同。
(5)方式4:軟件出發(fā)選通方式
進入工作方式4,OUTi輸出高電平。裝入計數(shù)值n后,如果GATE為高電平,則立即
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
開始減“1”計數(shù),直到計數(shù)值減到“0”為止,OUTi輸出寬度為一個CLKi周期的負(fù)脈沖。由軟件裝入的計數(shù)值只有一次有效,如果要繼續(xù)操作,必須重新置入計數(shù)初值n。如果在操作的過程中,GATE變?yōu)闊o效,則停止減“1”計數(shù),到GATE再次有效時,重新從初值開始減“1”計數(shù)。
(6)方式5:硬件觸發(fā)方式計數(shù)
進入工作方式5,OUTi輸出高電平,硬件觸發(fā)信號由GATE端引入。因此,開始時GATE應(yīng)輸入為0,裝入計數(shù)初值n后,減“1”計數(shù)并不工作,一定要等到硬件觸發(fā)信號由GATE端引入一個正階躍信號,減“1”計數(shù)才會開始,待計數(shù)值計到“0”,OUTi將輸出負(fù)脈沖,其寬度固定為一個CLKi周期,表示定時時間到或計數(shù)次數(shù)到。
三、程序設(shè)計思路
所有音樂都是由各個不同頻率的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。
CPU通過對定時器的通道2(端口地址為42)進行編程,使其I/O寄存器接收一個控制聲音頻率的16位計數(shù)值,端口61H的最低控制通道2門控的開斷。以產(chǎn)生特殊的音響。當(dāng)定時器接收的計數(shù)值為533H時,能產(chǎn)生896Hz的聲音,因此產(chǎn)生其他頻率的計數(shù)值就可算出來:
533Hz×896÷頻率=1234DC÷頻率
在送出頻率計數(shù)值之前,還要給方式寄存器送一個方式值,該數(shù)決定對哪一個通道編程,采用什么模式,送入通道的計數(shù)值是一字節(jié)還是兩字節(jié),是二進制碼還是BCD碼。其位組合的格式如下:
當(dāng)通道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端口
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
MOV AL,AH MOV 42H,AL 從定時器輸出的方波信號,經(jīng)功率放大和濾波后驅(qū)動揚聲器。送到揚聲器的信號還受到了從并行接口芯片8255(端口地址為61H)來的雙重控制,端口61H的最低位控制通道2的門控開斷,以產(chǎn)生特殊的音頻信號,端口61H的PA1位和定時器的輸出信號同時作為與門的輸入,PA0和PA1位可由程序決定為0還是為1。顯然只有PA0和PA1都是1時,才能使揚聲器發(fā)出聲音。控制音長的時間可以簡單地通過反復(fù)執(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,2801 DY:LOOP DY DEC BX JNZ L MOV AL,AH OUT 61H,AL;關(guān)揚聲器
四、功能流程圖及子程序說明
4.1總流程圖
MAIN程序:MAIN程序是總程序,輸出說明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
4.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和BP,指向下一個頻率,重復(fù)上面的工作
DELAY子程序和DELAY_OFF子程序:兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
開始保護現(xiàn)場曲N各音符頻率設(shè)置曲N各音符時間設(shè)置讀取頻率F頻率是-1 ?Y恢復(fù)現(xiàn)場N讀取時間T結(jié)束返回計算機計數(shù)次數(shù)送計數(shù)器,產(chǎn)生該頻率F信號啟動喇叭延時T關(guān)閉喇叭音符間延時播音流程圖 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
4.3部分源程序代碼
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
五、調(diào)試結(jié)果截屏及結(jié)果分析
5.1調(diào)試結(jié)果截屏
初始界面:
如果按錯了鍵,會出現(xiàn)如下界面:
如果選擇正確,將出現(xiàn)如下界面: 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
5.2結(jié)果分析
根據(jù)輸出結(jié)果顯示,此次試驗設(shè)計結(jié)果與預(yù)想設(shè)計方案想要達到的結(jié)果相一致,沒有出現(xiàn)任何偏差,此次設(shè)計較為成功。但在實驗過程中對程序不斷地進行了調(diào)試,將音頻頻率不斷地進行了改變,由原來的低頻通過同時擴大其倍數(shù),最終使音頻達到預(yù)期的效果。武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
六、參考文獻
【1】李長青.微機原理與接口技術(shù).徐州:中國礦業(yè)大學(xué)出版社,2006 【2】沈美明.匯編語言程序設(shè)計實驗教程.北京:清華大學(xué)出版社,2002年 【3】周明德.微機原理與接口技術(shù).北京:人民郵電出版社,2002年 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
七、附錄
7.1源程序代碼:
DATA SEGMENT DATA1 DB 0AH, 0DH, 'HELLEL!WELCOME YOU TO COME HERE!$' DB 0AH, 0DH, 'THIS IS A MUSIC PROGRAM!$' DB 0AH, 0DH, 'PLEASE SELECLT!$' DATA4 DB 0AH, 0DH, 'input ERROR!$' DATA5 DB 0AH, 0DH, 'input AGAIN!$'
MUSLIST DB 0AH, 0DH, 'PressA Ma li you zhi xiao yang gao' DB 0AH, 0DH, 'PressB Tai hu chuan' DB 0AH, 0DH, 'PressC zhu fu ge' DB 0AH, 0DH, '$' MUSFRQA DW 330,294,262,294,3 dup(330)DW 3 dup(294),330,392,392 DW 330,294,262,294,4 dup(330)DW 294,294,330,294,262,-1 MUSTIMA DW 6 dup(100),200 DW 2 dup(100,100,200)DW 12 dup(100),400 MUSFRQB 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,330,262 DW-1 MUSTIMB DW 3 dup(200),100,100,200,100,100,400 DW 2 dup(200,200,100,100),400 DW 3 dup(200,100,100),400 MUSFRQC DW 392, 262, 294, 330, 350, 392, 262, 262 DW 440, 350, 392, 440, 494, 524, 262, 262 DW 350, 392, 350, 330, 294, 330 DW 350, 330, 294, 262, 294, 330, 294, 262, 247, 262,-1 MUSTIMC DW 200, 4 DUP(100), 200, 200, 200 DW 200, 4 DUP(100), 200, 200, 200
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
DW 200, 4 DUP(100), 200 DW 4 DUP(100), 200, 4 DUP(100), 400 DATA ENDS STACK SEGMENT PARA STACK 'STACK' STA DB 200 DUP('STACK')STACK ENDS CODE SEGMENT ASSUME DS: DATA, SS: STACK, CS: CODE, ES: DATA START: MOV AX, DATA;MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX SHOW MACRO B;MOV DX, OFFSET B MOV AH, 09H INT 21H;ENDM SHOW DATA1;L0: SHOW MUSLIST MOV AH, 01H;INT 21H CMP AL, 51H JZ RETURN CMP AL, 41H JNZ l1 CALL MUSICA JMP EXIT1 l1: CMP AL, 42H JNZ l2 CALL MUSICB JMP EXIT1 l2: CMP AL, 43H JNZ EXIT CALL MUSICC JMP EXIT1
設(shè)置段寄存器 顯示以B開始的字符串宏定義宏結(jié)束 提示信息 輸入并選擇
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
EXIT1: SHOW DATA5 JMP L0 EXIT: SHOW DATA4 SHOW DATA5 JMP L0 RETURN: MOV AX, 4C00H;返回DOS INT 21H;******************************************************************* MUSICA PROC;音樂A LEA SI, MUSFRQA LEA BP,DS: MUSTIMA FREQA: MOV DI, [SI] CMP DI,-1 JE ENDMUSA MOV BX, DS: [BP] CALL SOUND ADD SI,2 ADD BP,2 JMP FREQA ENDMUSA:RET MUSICA ENDP;******************************************************************* MUSICB PROC;音樂B LEA SI, MUSFRQB LEA BP,DS: MUSTIMB FREQB: MOV DI, [SI] CMP DI,-1 JE ENDMUSB MOV BX, DS: [BP] CALL SOUND ADD SI,2 ADD BP,2 JMP FREQB ENDMUSB:RET MUSICB ENDP;*******************************************************************
武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
MUSICC PROC;音樂C LEA SI, MUSFRQC LEA BP,DS: MUSTIMC FREQC: MOV DI, [SI] CMP DI,-1 JE ENDMUSC MOV BX, DS: [BP] CALL SOUND ADD SI,2 ADD BP,2 JMP FREQC ENDMUSC:RET MUSICC ENDP SOUND PROC;發(fā)音程序 PUSH AX;保護寄存器 PUSH BX PUSH CX PUSH DX PUSH DI MOV AL, 0B6H;寫定時器模式 OUT 43H, AL MOV DX, 12H;時間因子 MOV AX, 348CH DIV DI;頻率
OUT 42H, AL;寫計數(shù)器2低八位 MOV AL, AH OUT 42H, AL;寫計數(shù)器2高八位 IN AL, 61H;獲取當(dāng)前端口設(shè)置 MOV AH, AL;保存在AH中
OR AL, 3;打開揚聲器 OUT 61H, AL DELA1: LOOP DELA1 DEC BX JNZ WAIT1
16;******************************************************************* WAIT1: MOV CX, 2800;改變數(shù)值,用以設(shè)置播放速率 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
MOV AL, AH;恢復(fù)端口信號 OUT 61H, AL POP DI;寄存器出棧 POP DX POP CX POP BX POP AX RET;返回 SOUND ENDP;******************************************************************* CODE ENDS END START 7.2各個音符的對應(yīng)頻率表:
音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253 武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計
八、總結(jié)
在本次設(shè)計中,可以說是一次成功的經(jīng)驗。在我們學(xué)完了《微型計算機原理與接口技術(shù)》這門課的基礎(chǔ)上來做這個設(shè)計,通過設(shè)計后,使我們對這門課的理論知識的理解有很大程度上的加強。微機原理這門課程本身是一門實驗性和工程性很強的專業(yè)技術(shù)課,因此不僅要重視理論教學(xué),更應(yīng)注意實踐技能的培養(yǎng)和訓(xùn)練。課程設(shè)計是這門課程的一個重要環(huán)節(jié),通過課程設(shè)計,鞏固、加深和拓寬了學(xué)習(xí)的理解,本課程設(shè)計的重點目標(biāo)是使用匯編語言,而不過多涉及硬件方面的太多知識。
在編程方面我通過本次課程設(shè)計學(xué)到了很多。一開始面對很長的程序往往有畏難情緒,感覺無法下手,沒辦法只能硬著頭皮啃下去,多看幾個和音樂播放有關(guān)的匯編程序,然后我就能慢慢看懂了并理解了別的作者的設(shè)計思路。然后再根據(jù)自己的思路,對照本人在圖書館借的匯編語言指導(dǎo)書慢慢編寫符合自己思路的程序。一次寫出來的程序肯定不會是正確的,還需要進一步調(diào)試它。檢查程序過程中,在充分思考的基礎(chǔ)上多次實驗是檢查改正程序的良方。編寫程序的過程中,體會最深的是子程序的調(diào)用和程序的條理問題,一個程序就算功能實現(xiàn)了,但是也要使主程序和子程序的條理分明,易讀性高,才能算一個比較好的程序。調(diào)試程序中,學(xué)習(xí)了emu8086的使用,emu8086對檢查程序的錯誤作用很大。同時,也要靈活使用各種調(diào)試方法,來縮小尋找錯誤的范圍。
書到用時方恨少。在課程設(shè)計過程中,我才體會到這句話的深意。課堂上學(xué)的8254的知識和匯編語言都太少,還不足以完成本次課設(shè),為此我經(jīng)常跑圖書館借了各種各樣的工具書。有的書用處較大,有的書僅能用到一小塊知識,就是這樣,一步步在知識的海洋里我尋覓著自己需要的東西,確實克服了不少困難,解決了不少問題?;蛟S坎坷才能更好的使人成長。在這次的課程設(shè)計中,我的收獲是不但做出了一個符合要求的音樂播放器,而且為自己積累了一些寶貴的經(jīng)驗。同時我也對音樂方面的頻率知識有了一些認(rèn)識,我想如果不是本次課程設(shè)計中用到這方面知識,我這輩子可能沒有機會去接觸這方面的知識了。這,或許也是我比別的同學(xué)多出的一點收獲吧!
第四篇:微機原理課程設(shè)計
電子信息科學(xué)與技術(shù)《微機原理》課程設(shè)計
一、本次課程設(shè)計的目的和意義
學(xué)習(xí)和掌握計算機中常用接口電路的應(yīng)用和設(shè)計技術(shù),充分認(rèn)識理論知識對應(yīng)用技術(shù)的指導(dǎo)性作用,進一步加強理論知識與應(yīng)用相結(jié)合的實踐和鍛煉。通過這次設(shè)計實踐能夠進一步加深對專業(yè)知識和理論知識學(xué)習(xí)的認(rèn)識和理解,使自己的設(shè)計水平和對所學(xué)的知識的應(yīng)用能力以及分析問題解決問題的能力得到全面提高。
二、設(shè)計時間、基本要求
(一)、設(shè)計時間:二周(二)、基本要求:
a.每題2人;b.設(shè)計出完整的接口電路;c.編寫出全部程序;d.在實驗系統(tǒng)上調(diào)試通過。
三、設(shè)計選題與要求
選題一:多路模擬數(shù)據(jù)采集系統(tǒng)設(shè)計
要求:設(shè)計一個2路以上的模擬數(shù)據(jù)采集系統(tǒng)。
1、用按鍵選擇那一路;
2、用LED顯示轉(zhuǎn)換結(jié)果(十進制數(shù));
3、將每一路采集的100個數(shù)據(jù)存放到各自的存儲區(qū)中。
選題二:溫度測控系統(tǒng)的設(shè)計
要求:利用ADC0809設(shè)計一個溫度測控系統(tǒng),在LED數(shù)碼顯示器上顯示溫度值,并對溫度進行測試和控制,當(dāng)檢測溫度到達溫度上限60℃時開風(fēng)扇(即開啟電動機,或以一個燈的亮滅表示),低于下限30℃時關(guān)閉風(fēng)扇,LED上的顯示內(nèi)容為:XX ℃(采用十進制顯示)。
選題三:函數(shù)發(fā)生器的設(shè)計(一)要求:利用DAC0832設(shè)計一個函數(shù)發(fā)生器,并利用按鍵選擇輸出波形,能分別產(chǎn)生三角波、階梯波(每階梯1V)、正向鋸齒波、負(fù)向鋸齒波和方波。并利用按鍵(自行定義)進行輸出波形選擇,同時將當(dāng)前輸出波形代號顯示在LED上(左邊位):0為方波、1為正向鋸齒波、2為負(fù)向鋸齒波、3 為三角波、4為階梯波。
選題四:函數(shù)發(fā)生器的設(shè)計(二)要求:設(shè)計一個三角波發(fā)生器,可利用鍵盤改變其輸出波形的幅值。例如,可利用1-5這5個數(shù)字鍵改變其輸出波形的幅值,當(dāng)按下1-5數(shù)字鍵時使D/A輸出幅值從1V增加到5V。
選題五:電子音樂播放器
要求:設(shè)計要求:利用8253作為音階頻率發(fā)生器,應(yīng)先對“2008年奧運會主題歌”進行編碼后存入音符表,并建立好音階表(只建立一個8度即可),音符長度不能少于60個,連續(xù)播放3遍后停止。
選題六:鍵盤電子樂器
要求:利用并行接口8155作為鍵盤接口,設(shè)計一個具有2個八度音階的鍵盤樂器,音階鍵不少于16個,采用掃描方式管理鍵盤,音域范圍自行定義。
選題七:電子時鐘設(shè)計
要求:利用8253定時器設(shè)計一個具有時、分、秒顯示的電子時鐘,并定義一個啟動鍵,當(dāng)按下該
鍵時時鐘從當(dāng)前設(shè)定值(可在顯示緩沖區(qū)中予置)開始走時。
選題八:壓力測控系統(tǒng)的設(shè)計(一)要求:對壓力傳感器的信號進行檢測并在LED數(shù)碼顯示器上顯示壓力值,當(dāng)壓力低于30pa時,黃燈閃爍,閃爍周期為1秒。當(dāng)壓力高于150pa時,紅燈閃爍。LED的顯示內(nèi)容為P=XXX。X為測試值。
選題九:可變輸出頻率方波發(fā)生器設(shè)計
要求:設(shè)計一個輸出方波頻率可利用按鍵改變的方波信號發(fā)生器(可以使用D/A也可以直接使用8253產(chǎn)生方波),利用鍵盤選擇方波發(fā)生器的輸出頻率并驅(qū)動喇叭。輸出頻率=鍵號*100HZ
選題十:直流電機速度控制器設(shè)計
要求:利用D/A轉(zhuǎn)換器和按鍵設(shè)計一個直流電動機轉(zhuǎn)速控制器。按鍵定義如下:0 停止,1-1/10轉(zhuǎn)速,2-2/10轉(zhuǎn)速?? 9 最高速(D/A輸出滿量程),鍵號每加1,D/A輸出增加0.5V
選題十一:可任意啟動/停止的電子秒表設(shè)計
要求:6位LED數(shù)碼顯示,計時單位為1/100秒。利用功能鍵進行啟/??刂啤F涔δ転椋荷想姾笥嫊r器清0,當(dāng)?shù)谝淮危ɑ蚱鏀?shù)次)按下啟/停鍵時開始計數(shù)。第2次(或偶數(shù)次)按下該鍵時停止計時,再一次按啟/停鍵時清零后重新開始計時??
選題十二:溫度測試系統(tǒng)設(shè)計
要求:利用溫度傳感器和ADC0809設(shè)計一個溫度測試系統(tǒng),將測試結(jié)果(十進制)在LED上顯示出來,并定義一個保持按鍵,當(dāng)按下該鍵時,將當(dāng)前測試值保持不變(按鍵不動作時為正常測量顯示)。溫度顯示格式為:XXX ℃。(可以每隔0.3秒測量一次)
選題十三:壓力測試系統(tǒng)設(shè)計(二)要求:利用壓力傳感器和ADC0809設(shè)計一個壓力測試系統(tǒng),并將測試結(jié)果(十進制)在LED上顯示出來,并定義一個測試最大值按鍵,當(dāng)按下該鍵時,可進行最大值測量(按鍵不動作時為正常測量顯示),即:只有當(dāng)當(dāng)前測量值大于上次測量值時才刷新顯示,顯示格式為:P=XXX??梢悦扛?.3秒測量一次。
選題十四:簡易計算器系統(tǒng)設(shè)計
要求:設(shè)計一個可以進行2位數(shù)四則運算的計算器。
1、用按鍵輸入數(shù)和運算符號;
2、用LED顯示運算過程和結(jié)果(十進制數(shù));
3、可以表示出當(dāng)前的運算類型;
4、具有清零和復(fù)位功能;
5、具有連續(xù)運算功能。
選題十五:交通燈控制系統(tǒng)
要求:按照時間控制原則,利用并行接口和定時器,設(shè)計一套十字路口的交通燈管理系統(tǒng),通行時間(或禁止時間)30秒,準(zhǔn)備時間3秒,在準(zhǔn)備時間里黃燈閃爍3次,閃爍頻率為0.5秒,周而復(fù)始??衫?255、8253等接口電路。
選題十六:計件系統(tǒng)設(shè)計
要求:利用8253計數(shù),對外界脈沖技術(shù),并將計數(shù)值在數(shù)碼管上顯示,可通過鍵盤控制重新計數(shù)。
四、設(shè)計任務(wù)及要求
1、接口設(shè)計:根據(jù)所選題目和所用的接口電路芯片設(shè)計出完整的接口電路,并在實驗系統(tǒng)上完成電路的連接和調(diào)試通過。
2、程序設(shè)計:要求畫出程序框圖,設(shè)計出全部程序并給出程序設(shè)計說明和程序注釋。
3、課程設(shè)計報告:(1)設(shè)計題目;
(2)系統(tǒng)的主要功能、作用以及主要技術(shù)性能指標(biāo);
(3)總體設(shè)計方案、工作和組成原理(框圖)或設(shè)計說明、采用的技術(shù)路線等;
(4)系統(tǒng)設(shè)計:接口電路設(shè)計,程序設(shè)計(程序框圖和程序清單及注釋)其他有關(guān)的理論分析和計算;
(5)設(shè)計總結(jié):對整個設(shè)計工作過程進行歸納和綜合,對設(shè)計中所存在的問題和不足進行分析和總結(jié),提出解決的方法、措施、建議和對這次設(shè)計實踐的認(rèn)識、收獲和提高。
第五篇:微機原理課程設(shè)計
匯編程序設(shè)計題
題目一 密碼設(shè)置模擬
該程序可以進行密碼的設(shè)置(第一次)和修改(已設(shè)置密碼)。要求輸入的密碼不顯示。題目二 計算器
編輯程序可以實現(xiàn)鍵盤輸入數(shù)據(jù)與運算符,進行“加減乘除”運算。(提示:先輸入數(shù)據(jù)與運算符,保存,再按照運算符選擇對應(yīng)的子程序;輸入的數(shù)據(jù)是用字符表示的,需要轉(zhuǎn)換;要有良好的界面(提示信息))
題目三工作周期判斷程序
輸入年、月、日,能夠判斷當(dāng)日的星期數(shù),并進行輸出。(以校歷為依照,可設(shè)某日為起點,根據(jù)相差的天數(shù)與7的關(guān)系進行判斷)。
題目四 PC揚聲器發(fā)聲
利用8253驅(qū)動PC機內(nèi)揚聲器發(fā)聲,PC結(jié)構(gòu)參考相關(guān)文獻資料。題目五 樂曲播放
利用PC機內(nèi)8253實現(xiàn)樂曲播放。題目六 按鍵選擇樂曲播放
利用按鍵選擇播放不同樂曲。(★)(自制交互界面實現(xiàn)按鍵選擇★★)題目七 實現(xiàn)閃爍文字效果 編程提示:
提示信息于屏幕中央顯示出來,用光標(biāo)定位子程序?qū)⒐鈽?biāo)定位于80*25顯示方式的第8行第10列,然后輸出一條提示信息,接著調(diào)用屏幕上卷子程序上卷一行,接著再定位光標(biāo),然后顯示下一條提示信息,直到所有信息顯示完畢,對于閃爍的信息,同樣是定位光標(biāo),然后用BIOS功能調(diào)用13H來顯示閃爍信息,當(dāng)BL的高位為1時,字符閃爍。mov ah,00h mov al,03h ;設(shè)置顯示方式為80*25,16色文本 int 10h 題目八
數(shù)字秒表
設(shè)計可以顯示1~60秒的無存儲功能的秒表,最小單位為毫秒。題目九
倒計時牌
設(shè)計日期倒計時牌界面,可輸入設(shè)定日期,顯示當(dāng)前日期的統(tǒng)計天數(shù),如奧運計時牌。題目十
數(shù)字時鐘
編程實現(xiàn)時鐘功能,按秒刷新,要求定位在屏幕右上角。
硬件設(shè)計題
總體要求:根據(jù)題意自行設(shè)計電路,編寫相關(guān)匯編程序。題目一
交通燈控制系統(tǒng)
1.利用8253定時,8259中斷及8255設(shè)計電路,實現(xiàn)十字路口交通燈模擬控制。2.實現(xiàn)能自動控制和手動應(yīng)急控制。
3.實現(xiàn)能隨時可以調(diào)整自動模式的綠燈和紅燈時間。題目二 實現(xiàn)特定功能的鍵盤及LED顯示
了解鍵盤及LED顯示接口原理,設(shè)計實驗電路圖完成以下功能: 1.按1鍵顯示年; 2.按2鍵顯示月日; 3.按3鍵顯示GOOD ;
4.按4鍵數(shù)碼管由左到右字符“0”循環(huán)顯示。5.自行設(shè)計特效顯示功能。題目三
LED七段數(shù)碼管數(shù)字鐘
設(shè)計并完成LED七段數(shù)碼管數(shù)字鐘電路,數(shù)字鐘顯示格式為:HH:MM:SS。要求:具有通過鍵盤能夠調(diào)整時、分、秒的功能。題目四
閃爍燈
利用8253和LED燈相結(jié)合實現(xiàn)閃爍燈效果。題目五
電子鐘
利用8253定時器設(shè)計一個電子鐘,并定義一個啟動鍵。當(dāng)按下該鍵時電子時鐘從當(dāng)前設(shè)定值開始走時。
附錄:實驗箱功能模塊電路圖