【文章內(nèi)容簡(jiǎn)介】
始保護(hù)現(xiàn)場(chǎng)曲N各音符頻率設(shè)置曲N各音符時(shí)間設(shè)置讀取頻率F頻率是1 ?Y恢復(fù)現(xiàn)場(chǎng)N讀取時(shí)間T結(jié)束返回計(jì)算機(jī)計(jì)數(shù)次數(shù)送計(jì)數(shù)器,產(chǎn)生該頻率F信號(hào)啟動(dòng)喇叭延時(shí)T關(guān)閉喇叭音符間延時(shí)播音流程圖MAIN程序MAIN程序是總程序,輸出說(shuō)明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。PLAY子程序PLAY子程序是播音子程序,SI指向音節(jié)表中的頻率,BP指向音節(jié)表中的時(shí)間。從SI的指向的音節(jié)表中取一個(gè)頻率,只要不是1,即有效就再讀取時(shí)間,然后計(jì)算計(jì)數(shù)初值送入計(jì)數(shù)器,產(chǎn)生各種頻率。開(kāi)啟揚(yáng)聲器,根據(jù)所取的時(shí)間調(diào)用若干次延時(shí)子程序。這段時(shí)間揚(yáng)聲器就發(fā)出該頻率的聲音,延時(shí)結(jié)束,就關(guān)閉揚(yáng)聲器,調(diào)用音節(jié)之間的小延時(shí)程序。最后修改SI和BP,指向下一個(gè)頻率,重復(fù)上面的工作。DELAY子程序和DELAY_OFF子程序兩個(gè)都是子程序,采用空操作循環(huán)多次的方法,只是第二個(gè)延時(shí)時(shí)間較短,大概為5ms。SSEG SEGMENT PARA STACK 39。stack39。dw 100h dup(0)。Resize the stack by changing the number 39。10039。 SSEG ENDSDSEG SEGMENT。TO DO: Add your program39。s data here INFO1 DB 0DH,0AH,39。39。,0DH,0AH,39。THERE ARE 3 SONGS:39。,0DH,0AH,0DH,0AH,39。$39。 INFO2 DB 39。 BIRTHDAY39。,0DH,0AH,39。$39。 INFO3 DB 39。39。,0DH,0AH,39。$39。 INFO4 DB 39。39。,0DH,0AH,39。$39。 INFO5 DB 39。39。,0DH,0AH,39。$39。 INFO6 DB 39。YOU HAVE CHOSEN :$39。INFO7 DB 39。THANK YOU FOR YOUR USE39。,0DH,0AH,39。$39。 INFO8 DB 39。39。,0DH,0AH,39。PRESS THE KEY TO SELECT SONG!39。,0DH,0AH,39。$39。 INFO9 DB 0DH,0AH,39。39。,0DH,0AH,39。|INVALID SELECTION|39。,0DH,0AH,39。39。,0DH,0AH,39。$39。 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 DW1,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的時(shí)間 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的時(shí)間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的時(shí)間DW 2 DUP(2,2,1,1),4 DW 3 DUP(2,1,1,1),4 DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEGINIT PROC。Initialize proceduremov ax, dseg mov ds, axmov es, ax。TO DO: Add your initialize code here(as your requirement)ret。return to the MAIN procedureINIT ENDPMAIN PROC。Here is your program entry pointcall INIT。call the INIT procedure to initialize the program。**TO DO: Add your main code here**RE: MOV DX,28BH;關(guān)閉揚(yáng)聲器MOV AL,89H OUT DX,ALMOV DX,28AH IN AL,DX MOV DX,288H OUT DX,ALLEA 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 21HMOV AH,01HINT 21H CMP AL,39。139。JE MUSIC1 CMP AL,39。239。 JE MUSIC2 CMP AL,39。339。 JE MUSIC3 CMP AL,39。039。 JE EXITLEA DX,INFO9 MOV AH,09H INT 21H JMP RE;輸出說(shuō)明信息;讀取按鍵;根據(jù)不同的按鍵播放不同的曲子;無(wú)效選擇,輸出錯(cuò)誤提示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)閉揚(yáng)聲器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,ALint 21hMAIN ENDP。TO DO: Add other procedures(PROC)here(as your requirement)。THE PROGRAMME OF PLAYING THE MUSICPLAY PROC;PLAY子程序,功能上面介紹過(guò)L1: MOV BX,DS:[SI];取頻率CMP BX,1;看是否有效JE L0;無(wú)效就退出MOV CX,DS:[BP];讀取時(shí)間MOV DL,CL;保存時(shí)間ADD DL,30HMOV AH,02HINT 21HMOV DX,0FH;計(jì)算計(jì)數(shù)初值,1M的十六進(jìn)制為0F4240HMOV AX,4240HDIV BXMOV BX,AXMOV DX,283H;設(shè)置計(jì)數(shù)器工作方式MOV AL,36HOUT DX,ALMOV DX,280H;輸入計(jì)數(shù)初值MOV AX,BXOUT DX,ALMOV AL,AHOUT DX,ALMOV DX,28BHMOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX NOT AL MOV DX,288H OUT DX,ALROD:CALL DELAYLOOP RODMOV DX,28BHMOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL CALL DELAY_OFFADD SI,2ADD BP,2JMP L1L0: RETPLAY ENDPDELAY PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV BX,09FH LL1:MOV CX,0FFFFH;開(kāi)揚(yáng)聲器 ;延時(shí);關(guān)揚(yáng)聲器;延時(shí)子程序;循環(huán)這么多次;音節(jié)間延時(shí)LOP: LOOP LOP DEC BX JNZ LL1 POP DXPOP CXPOP BXPOP AXRETDELAY ENDPDELAY_OFF PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV BX,0FH LL2:MOV CX,0CFFFH LOP2: LOOP LOP2 DEC BX JNZ LL2 POP DXPOP CXPOP BXPOP AXRET DELAY_OFF ENDP CSEG ENDS。TO DO: Add other segments here(as your requirement)END MAIN試驗(yàn)結(jié)果:程序初始運(yùn)行界面如果按錯(cuò)了鍵,會(huì)出現(xiàn)如下界面如果選擇正確,將出現(xiàn)如下界面:分析這是按照方案一做的結(jié)果,按1~3分別播放“生日快樂(lè)”等歌,但由于本組人對(duì)音樂(lè)都是外行,各音階頻率的排序和延時(shí)時(shí)間搭配不好,導(dǎo)致音樂(lè)嚴(yán)重走調(diào),但基本能聽(tīng)出不是噪音。按照方案二做的電路和程序,無(wú)論怎么樣都不出聲,后來(lái)我們直接送數(shù)據(jù)到0832產(chǎn)生三角波信號(hào)(程序在我們的一次作業(yè)中寫的)。還是無(wú)法讓揚(yáng)聲器發(fā)出聲音,因此按這個(gè)方案失敗了。,我認(rèn)識(shí)到平時(shí)基礎(chǔ)知識(shí)的重要性,只有能夠熟練的掌握才能在實(shí)驗(yàn)過(guò)程中得心應(yīng)手,否則一步錯(cuò)則整個(gè)試驗(yàn)都會(huì)陷入困境,因而,嚴(yán)謹(jǐn)?shù)膽B(tài)度是試驗(yàn)成功的重要保障!,我們對(duì)各個(gè)芯片有了進(jìn)一步的了解,對(duì)各個(gè)芯片的功能有了更深刻的認(rèn)識(shí)和體會(huì),平時(shí)上課的理論知識(shí)只是停留在理論的層面,只有通過(guò)了這樣的試驗(yàn)才能更好的體會(huì)到,做到了理論和實(shí)際的相結(jié)合,使理論知識(shí)真正運(yùn)用到了實(shí)踐中去。在課程設(shè)計(jì)過(guò)程中,同組人員之間相互合作,共同研究使我更加堅(jiān)信了團(tuán)體的力量。在團(tuán)體的共同協(xié)作和努力下,任何的難題都可以被解決!,遇到問(wèn)題時(shí)候一起探討,增強(qiáng)了我們的合作精神?!丁次C(jī)原理與接口技術(shù)〉學(xué)生實(shí)驗(yàn)指導(dǎo)書(shū)》 揚(yáng)州大學(xué) 羅加奇《微機(jī)原理及應(yīng)用》 機(jī)械工業(yè)出版社 胡鋼 主編第三篇:微機(jī)原理課程設(shè)計(jì)音樂(lè)播放器《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)關(guān)智杰一、課程設(shè)計(jì)的任務(wù)和目的課程設(shè)計(jì)題目:音樂(lè)播放器課程設(shè)計(jì)的實(shí)現(xiàn)目的:本課程設(shè)計(jì)主要是通過(guò)匯編語(yǔ)言用軟件編程的方法實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放功能。通過(guò)在《微機(jī)原理與接口技術(shù)》課程上所學(xué)的匯編知識(shí)和8253/8254芯片相關(guān)知識(shí),來(lái)完成本課程設(shè)計(jì);用匯編程序完成鍵控音樂(lè)播放器的,用8253/8254定時(shí)器來(lái)產(chǎn)生聲音。該播放器有若干首歌曲可以選擇,開(kāi)始時(shí)輸出說(shuō)明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進(jìn)行播放、退出或出錯(cuò)提示。通過(guò)課程設(shè)計(jì)環(huán)節(jié)來(lái)加強(qiáng)對(duì)所學(xué)知識(shí)的理解和應(yīng)用。二、課程設(shè)計(jì)相關(guān)知識(shí) 定時(shí)/計(jì)數(shù)器8253/58254在微機(jī)及控制系統(tǒng)中,經(jīng)常要用到定時(shí)信號(hào)。如系統(tǒng)的日歷時(shí)鐘,動(dòng)態(tài)存儲(chǔ)器刷新。對(duì)外部執(zhí)行機(jī)構(gòu)控制時(shí)也需要定時(shí)中斷、定時(shí)檢測(cè)、定時(shí)查詢等。定時(shí)的方法主要是兩種:軟件定時(shí):利用指令的執(zhí)行時(shí)間設(shè)計(jì)循環(huán)程序,使CPU 執(zhí)行延遲子程序的時(shí)間就是定時(shí)時(shí)間。缺點(diǎn):執(zhí)行延遲時(shí),CPU 一直被占用,降低了CPU 的效率。硬件定時(shí):用計(jì)數(shù)器/定時(shí)器作為主要硬件,在軟件簡(jiǎn)單指令的控制下產(chǎn)生精確的時(shí)間延遲。突出優(yōu)點(diǎn)為計(jì)數(shù)時(shí)不占用CPU 時(shí)間,如利用定時(shí)器/計(jì)數(shù)器產(chǎn)生中斷信號(hào),可建立多作業(yè)環(huán)境,提高了CPU 效率。作為定時(shí)器可用8253或者8254,二者功能基本相同,知識(shí)工作的最高頻率不一樣。本實(shí)驗(yàn)就采用了8254,其主要功能為:(1)每片上有3 個(gè)獨(dú)立的16 位的減計(jì)數(shù)器通道。(2)對(duì)于每個(gè)計(jì)數(shù)器,都可以單獨(dú)作為定時(shí)器或計(jì)數(shù)器使用,并且都可以按照二進(jìn)制或十進(jìn)制來(lái)計(jì)數(shù)。(3)每個(gè)通道都有6 種工作方式,都可以通過(guò)程序設(shè)置或改變。(4)每個(gè)計(jì)數(shù)器的速率可高達(dá)10MHz。主要部分有:數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器、計(jì)數(shù)通道0、2: 內(nèi)部結(jié)構(gòu)如下圖:《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)關(guān)智杰8254內(nèi)部結(jié)構(gòu) 8254外部引腳8254芯片是具有24個(gè)引腳的雙列直插式集成電路芯片,其引腳分布如圖所示。8254芯片的24個(gè)引腳分為兩組,一組面向CPU,另一組面向外部設(shè)備,各個(gè)引腳及其所傳送信號(hào)的情況,介紹如下:8254的引腳