《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書(shū)鍵盤(pán)電子樂(lè)器
《《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書(shū)鍵盤(pán)電子樂(lè)器》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書(shū)鍵盤(pán)電子樂(lè)器(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、武漢理工大學(xué)《微機(jī)原理》課程設(shè)計(jì)說(shuō)明書(shū) 課程設(shè)計(jì)任務(wù)書(shū) 學(xué)生姓名: 專業(yè)班級(jí): 電氣0805班 指導(dǎo)教師: 工作單位: 自動(dòng)化學(xué)院 題 目: 鍵盤(pán)電子樂(lè)器 初始條件: 掌握匯編語(yǔ)言程序設(shè)計(jì)方法,所設(shè)計(jì)的程序運(yùn)行后可通過(guò)鍵盤(pán)控制,滿足系統(tǒng)功能,并實(shí)現(xiàn)該系統(tǒng)設(shè)計(jì)方案。在DOS,windows,匯編軟件環(huán)境下運(yùn)行。 要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求) 1.設(shè)計(jì)一個(gè)用鍵盤(pán)演奏音樂(lè)的程序,計(jì)時(shí)器系統(tǒng)設(shè)計(jì)編程定時(shí)輸出――電子音調(diào),用pc機(jī)內(nèi)部8253time~使揚(yáng)聲
2、器發(fā)聲。用匯編語(yǔ)言對(duì)8253進(jìn)行編程,使其OUT0上輸出一定的頻率,將其一定頻率輸出到喇叭上,演奏出不同的音節(jié)。pc機(jī)的數(shù)字鍵(1-7)作為電子音調(diào)的音調(diào)選擇 2. 課程設(shè)計(jì)說(shuō)明書(shū)應(yīng)包括: a)設(shè)計(jì)任務(wù)及要求 b)方案比較及認(rèn)證 c)程序設(shè)計(jì)基本思想,程序流程圖,部分源程序及注解 d)調(diào)試記錄及結(jié)果分析 e)參考資料 f)附錄:全部源程序清單 g)總結(jié) 時(shí)間安排: 2011年元月07日--元月09日 選題、查閱資料和方案設(shè)計(jì) 2011年元月10日--元月14日 編程 2011年元月15日--元月16日 調(diào)試程序,改進(jìn)與提高 2011年元月17日
3、 撰寫(xiě)課程設(shè)計(jì)報(bào)告(有調(diào)試過(guò)程及結(jié)果的截屏) 2011年元月18日 答辯和交課程設(shè)計(jì)報(bào)告 指導(dǎo)教師簽名: 2011 年 元 月 6 日 系主任(或責(zé)任教師)簽名: 年 月 日 摘要 利用PC上的定時(shí)/計(jì)數(shù)芯片8253A控制PC揚(yáng)聲器發(fā)聲。編寫(xiě)內(nèi)核模塊,直接操作揚(yáng)聲器相關(guān)端口,或字符設(shè)備驅(qū)動(dòng),供應(yīng)用程序調(diào)用,用鍵盤(pán)使其發(fā)出不同的聲音。 關(guān)鍵字:8253 定時(shí)器 中斷 目錄 1
4、. 方案比較 3 2.芯片介紹 4 2.1 8255芯片簡(jiǎn)述 4 2.1.1 8255三種方式下工作 4 2.2 8253芯片簡(jiǎn)述 5 2.2.1 8253六種工作方式 5 3.通用發(fā)聲程序 7 4.音調(diào)與頻率和時(shí)間的關(guān)系 10 附錄 12 附錄一: 12 附錄二: 13 附錄三: 25 附錄四: 26 附錄五: 32 參考文獻(xiàn) 33 鍵盤(pán)電子樂(lè)器 1. 方案比較 1.1 發(fā)聲程序循環(huán) 優(yōu)點(diǎn):簡(jiǎn)單,易于思維 缺點(diǎn):程序過(guò)于長(zhǎng),比較繁瑣 1.2 調(diào)用宏,進(jìn)行發(fā)聲 優(yōu)點(diǎn):程序短 缺點(diǎn):不易想到 2.芯片介紹 2.1 8255
5、芯片簡(jiǎn)述 圖1-1 8255引腳圖 8255可編程外圍接口芯片是Intel公司生產(chǎn)的通用并行I/O接口芯片,它具有A、B、C三個(gè)并行接口,+5V單電源供電。 2.1.1 8255三種方式下工作 方式0—基本輸入/輸出方式 方式1—選通輸入/輸出方式 方式2—雙向選通輸入/輸出方式 2.1.2 8255引腳圖 如右圖所示,各引腳功能如: D7~D0——與CPU側(cè)連接的八條雙向數(shù)據(jù)線; WR(低電平有效)— 寫(xiě)輸入信號(hào); RD(低電平有效)— 讀輸入信號(hào); CS(低電平有效)— 片選輸入信號(hào); A0、A1 — 片內(nèi)寄存器選擇輸入信號(hào); PA7~PA0 —
6、 A口外設(shè)雙向數(shù)據(jù)線; PB7~PB0 — B口外設(shè)雙向數(shù)據(jù)線; PC7~PC0 — C口外設(shè)雙向數(shù)據(jù)線; RESET — 復(fù)位輸入信號(hào) 2.1.3 8255端口地址 寄存器 A口 B口 C口 控制寄存器 端口地址 60H 61H 62H 63H 2.2 8253芯片簡(jiǎn)述 8253可編程定時(shí)/計(jì)數(shù)器是Intel公司生產(chǎn)的通用外圍芯片之一,有3個(gè)獨(dú)立的十六位計(jì)數(shù)器,技術(shù)頻率范圍為0~2MHz,它所有的技術(shù)方式和操作方式都通過(guò)編程控制。 圖1-2 8253引腳圖 2.2.1 8253六種工作方式 方式0:計(jì)數(shù)結(jié)束中斷 方式1:可編程頻率
7、發(fā)生器 方式2:頻率發(fā)生器 方式3:方波頻率發(fā)生器 方式4:軟件觸發(fā)的選通信號(hào) 方式5:硬件觸發(fā)的選通信號(hào) 2.2.2 8253引腳圖 如上圖所示,各引腳功能如下: D7~D0 — 八條雙向數(shù)據(jù)線; WR(低電平有效)— 寫(xiě)輸入信號(hào); RD(低電平有效)— 讀輸入信號(hào); CS(低電平有效)— 片選輸入信號(hào); A0、A1 — 片內(nèi)寄存器地址輸入信號(hào); CLK — 計(jì)數(shù)輸入,用于輸入定時(shí)基準(zhǔn)脈沖或計(jì)數(shù)脈沖; OUT — 輸出信號(hào),以相應(yīng)的電平指示計(jì)數(shù)的完成,或輸出脈沖波形; GATE — 選通輸入,用于啟動(dòng)或禁止計(jì)數(shù)器的操作,以使計(jì)數(shù)器和計(jì)測(cè)對(duì)象同步。2.2.3 825
8、3端口地址 寄存器 0#計(jì)數(shù)器 1#計(jì)數(shù)器 2#計(jì)數(shù)器 控制寄存器 端口地址 40H 41H 42H 43H 本次課設(shè)要求用8253做。計(jì)算機(jī)中可以利用8253/54定時(shí)器來(lái)驅(qū)動(dòng)揚(yáng)聲器。連接到揚(yáng)聲器上的是定時(shí)器2,GATE2與端口61H的PB0相連,當(dāng)PB0=1時(shí),GATE2獲得高電平,使定時(shí)器2可以在模式3下工作。定時(shí)器2的OUT2與端口61H的PB1通過(guò)一個(gè)與門(mén)與揚(yáng)聲器的驅(qū)動(dòng)電路相連。當(dāng)PB1=1時(shí),允許OUT2的輸出信號(hào)到達(dá)揚(yáng)聲器電路。下面是控制揚(yáng)聲器的代碼: IN AL,61H ;get the current setting of port B
9、MOV AH,AL ;save it OR AL,00000011B ;make PB0=1 and PB1=1 OUT 61H,AL ;turn the speaker on ...... ;how long the beep sound goes here MOV AL,AH ;get the original setting of port B OUT 61H,AL ;turn off the speaker 對(duì)于IBM PC兼容機(jī)來(lái)說(shuō),無(wú)論是8086,80486還是Pentium,驅(qū)動(dòng)揚(yáng)聲器的過(guò)程是相同的。至于音調(diào)發(fā)出的時(shí)
10、間量(音長(zhǎng)),則取決于它的延遲的時(shí)間,這個(gè)延遲時(shí)間可以在PC機(jī)的80x86主處理器的幫助下實(shí)現(xiàn)。 3.通用發(fā)聲程序 BIOS中的BEEP子程序能根據(jù)BX中給出的計(jì)數(shù)值控制8253/54定時(shí)器,產(chǎn)生頻率為896Hz的聲音。實(shí)際上BEEP是一個(gè)很好的通用發(fā)聲程序。首先,BEEP程序只能產(chǎn)生896Hz的聲音,通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音。其次BEEP產(chǎn)生聲音的持續(xù)時(shí)間(音長(zhǎng))只能是0.5s的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如是10ms的倍數(shù)。 給計(jì)數(shù)器2裝入計(jì)數(shù)值533H就能產(chǎn)生896Hz的聲音(1.1931MHz/896Hz=1331=533H),同樣,產(chǎn)生其他頻率聲音的計(jì)數(shù)
11、值也可以用下式計(jì)算出來(lái): 假設(shè)發(fā)聲頻率存放在DI寄存器中,下面的指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值: MOV DX,12H MOV AX,348CH DIV DI 利用CPU來(lái)產(chǎn)生延遲時(shí)間是最常用的一種方法,但對(duì)8088/86,80286,386,486以及Pentium來(lái)說(shuō),它們產(chǎn)生的延遲時(shí)間都是不一樣的。對(duì)基于8088/86的PC/XT,PS/2等PC機(jī),可用下面的程序來(lái)產(chǎn)生時(shí)間延遲: MOV CX,N DELAY: LOOP DELAY 在8088/86CPU中,執(zhí)行一條LOOP指令需要17個(gè)時(shí)鐘周期,因此,執(zhí)行上面的指令大約需要N*17*T時(shí)鐘周期。 在
12、BIOS中,利用上述方法來(lái)產(chǎn)生250ms延遲時(shí)間的程序如下: SUB CX,CX G7: LOOP G7 ; 如果要產(chǎn)生與10ms成倍數(shù)的延遲時(shí)間,可在BX寄存器中放入倍數(shù)。例如,要產(chǎn)生1s的持續(xù)時(shí)間,則在BX中放入100,以控制LOOP指令執(zhí)行次, 也就是10ms的100倍。指令如下: MOV BX,100 WAIT: MOV CX,2800 DELAY: LOOP DELAY DEC BX JNZ WAIT 上述流程圖為: 圖2-1程序流程圖 下面在修改后的BEEP程序的基礎(chǔ)上,為80
13、88/86編寫(xiě)一個(gè)任一頻率(由DI指定)和任一持續(xù)時(shí)間(由CX和BX指定)的通用發(fā)聲程序。此程序包括三個(gè)步驟: (1) 在8253/54中的43端口送一個(gè)控制字0B6H(10110110B),該控制字對(duì)定時(shí)器2進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)數(shù)初值。 (2) 在在8253/54中的42端口(Timer2)裝入一個(gè)16位的計(jì)數(shù)值(533H*896/頻率),以建立將要產(chǎn)生的聲音頻率。 (3) 把輸出端口61H的0/1兩位置1,發(fā)出聲音。 GENSOUND PROC NEAR ;********************************** PUSH AX PUS
14、H BX PUSH CX PUSH DX PUSH DI ;********************************** MOV AL,0B6H ;寫(xiě)8253的控制字 選中8253通道1 讀寫(xiě)16位 工作方式3 二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫(xiě)入上述功能的控制字 MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值 MOV AX,348ch ;1193100HZ/freq DIV DI ;value of freq O
15、UT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H ;從61h號(hào)端口讀取PB口現(xiàn)在的狀態(tài) MOV AH,AL ;將PB口的狀態(tài)放進(jìn)AH OR AL,3 ;將AL低兩位置1 OUT 61H,AL ;向61h號(hào)端口寫(xiě)入一個(gè)字節(jié),打開(kāi)揚(yáng)聲器 WAIT1: MOV CX,2000 ;3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,
16、AH ;recover value of port OUT 61H,AL ;從61h號(hào)端口讀入一個(gè)字節(jié) ;*********************************** POP DI POP DX POP CX POP BX POP AX ;*********************************** RET GENSOUND ENDP WAITF PROC NEAR PUSH AX WAITF1: IN AL,61H AND AL,10H ;check pb4
17、 CMP AL,AH ;did it change JE WAITF1 ;wait for change MOV AH,AL ;save the new pb4 status LOOP WAITF1 ;continue until cx becomes 0 POP AX RET WAITF ENDP GENSOUND程序能產(chǎn)生19~65536Hz的聲音,這個(gè)頻率的下限19Hz是使除法不產(chǎn)生溢出的最小的DI值((DX)=12H=18d<19)。其上限65536Hz是多余的,因?yàn)槿藗冏罡吣苈?tīng)到的音頻約為20000HZ。 4.音調(diào)與頻率和時(shí)
18、間的關(guān)系 利用計(jì)算機(jī)控制發(fā)聲的原理,可以編寫(xiě)演奏樂(lè)曲的程序。在一首樂(lè)曲中,每個(gè)音符的音高和音長(zhǎng)與頻率和節(jié)拍有關(guān)。 圖3-1音頻頻率對(duì)照表 組成樂(lè)曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂(lè)曲程序發(fā)生所需要的兩個(gè)數(shù)據(jù)。音符的頻率可以從圖3-1中查表得到,但實(shí)際上送入計(jì)數(shù)器2的是輸入頻率1.1932MHz與音符頻率相除的值,通用發(fā)聲程序SOUNDF的前半部分就是完成這個(gè)計(jì)算,并將計(jì)數(shù)值送入計(jì)數(shù)器2的功能。 ; MOV AL,0B6H ;寫(xiě)8253的控制字 選中8253通道1 讀寫(xiě)16位 工作方式3 二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫(xiě)入上述功能
19、的控制字 MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值 MOV AX,348ch ;1193100HZ/freq DIV DI ;value of freq OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 ;................................. 附錄 附錄
20、一: 程序一流程圖 附錄二: 程序一 DATA SEGMENT PARA DATA INFO1 DB 0DH,0AH,WELCOME YOU TO COME HERE!$ INFO2 DB 0DH,0AH,this is a Piano program!$ INFO3 DB 0DH,0AH,please press!$ INFO4 DB 0DH,0AH,INPUT ERROR!$ INFO5 DB 0DH,0AH,PLEASE INPUT AGAIN!$ MUSLIST DB 0DH,0AH,1 262
21、 DB 0DH,0AH,2 294 DB 0DH,0AH,3 330 DB 0DH,0AH,4 347 DB 0DH,0AH,5 392 DB 0DH,0AH,6 440 DB 0DH,0AH,7 494 DB 0DH,0AH,8 524 DB 0dh,0ah,$ MUS_FREG1 DW 262,-1 MUS_TIME1 DW 50,25 MUS_FREG2 DW 294,-1 MUS_TIME2 DW 50
22、,25 MUS_FREG3 DW 330,-1 MUS_TIME3 DW 50,25 MUS_FREG4 DW 347,-1 MUS_TIME4 DW 50,25 MUS_FREG5 DW 392,-1 MUS_TIME5 DW 50,25 MUS_FREG6 DW 440,-1 MUS_TIME6 DW 50,25 MUS_FREG7 DW 494,-1 MUS_TIME7 DW 50,25 MUS_FREG8 DW 524,-1 MUS_TIME8 DW 50,25 DATA ENDS STACK SEGMENT P
23、ARA STACK STACK DB 200 DUP (STACK) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,0 ;設(shè)置顯示方式 MOV AL,4 ;設(shè)置顯示方式 INT 10H ;調(diào)用顯示器中斷 MOV AH,0BH
24、 ;設(shè)置背景顏色或彩色組 MOV BH,0 ;設(shè)置背景顏色 MOV BL,2 ;藍(lán)色 INT 10H ;調(diào)用顯示器中斷 MOV AH,0BH ;設(shè)置背景顏色或彩色組 MOV BH,01H ;設(shè)置字體顏色 MOV BL,1 ;黑色 INT 10H ;調(diào)用顯示器中斷 ;*****定義一個(gè)宏***** ;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。 ;如果輸出操作被重定向,那么,將無(wú)法判斷磁盤(pán)已滿入口參數(shù):AH=09
25、HDS:DX=待輸出字符的地址 ;說(shuō)明:待顯示的字符串以’$’作為其結(jié)束標(biāo)志 SHOW MACRO b LEA DX,b MOV AH,9 INT 21H ENDM ;********************** show INFO1 ;顯示字符串 show INFO2 ;顯示字符串 show INFO3 ;顯示字符串 show MUSLIST ;顯示字符串 INPUT:
26、 MOV AH,01H ;設(shè)置光標(biāo)類型 INT 21H ;調(diào)用中斷,返回dos CMP AL,Q ;是否按下Q JZ retu ;是則跳轉(zhuǎn),不是繼續(xù)向下運(yùn)行 CMP AL,1 ;是否按下1 JNZ B0 ;不是1跳轉(zhuǎn),是繼續(xù)向下運(yùn)行 CALL MUSIC1 ;跳轉(zhuǎn)到MUSIC1程序 JMP EXIT1 ;跳轉(zhuǎn)EXIT1 B0: CMP AL,2 ;是否按下2 JNZ C0 ;不
27、是2則跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC2 ;調(diào)用 MUSIC2程序 JMP EXIT1 ;跳轉(zhuǎn)到EXIT1 C0: CMP AL,3 ;是否按下3 JNZ D0 ;不是3跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC3 ;跳轉(zhuǎn)到MUSIC3程序 JMP EXIT1 D0: CMP AL,4 ;是否按下4 JNZ E0 ;不是4跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC4 ;跳轉(zhuǎn)到MUSIC4程序
28、 JMP EXIT1 E0: CMP AL,5 ;是否按下5 JNZ F0 ;不是5跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC5 ;跳轉(zhuǎn)到MUSIC5程序 JMP EXIT1 F0: CMP AL,6 ;是否按下6 JNZ G0 ;不是6跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC6 ;跳轉(zhuǎn)到MUSIC6程序 JMP EXIT1 G0: CMP AL,7 ;是否按下7
29、 JNZ H0 ;不是7跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC7 ;跳轉(zhuǎn)到MUSIC7程序 JMP EXIT1 H0: CMP AL,8 ;是否按下8 JNZ exit ;不是8跳轉(zhuǎn),是繼續(xù)運(yùn)行 CALL MUSIC8 ;跳轉(zhuǎn)到MUSIC8程序 EXIT1: show INFO5 ;顯示字符 JMP INPUT ;跳轉(zhuǎn)到INPUT EXIT: call clear ;跳轉(zhuǎn)到clear
30、 show INFO4 ;顯示字符 show INFO5 ;顯示字符 show INFO1 ;顯示字符 show INFO2 ;顯示字符 show INFO3 ;顯示字符 show MUSLIST ;顯示字符 jmp input ;跳轉(zhuǎn)到INPUT RETU: MOV AH,4CH ;帶返回碼返回 INT 21H ;調(diào)用dos中斷 MAIN ENDP MUSIC1 PROC NEAR
31、 PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG1 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME1 ;puts the time table offset in BP FREG1: MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS1 ;i
32、f yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note ADD SI,2 ;update the table pointer ADD BP,2 JMP FREG1 ;go process next note END_MUS1: RET MUSIC1 ENDP GENS
33、OUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;寫(xiě)8253的控制字 選中8253通道1 讀寫(xiě)16位 工作方式3 二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫(xiě)入上述功能的控制字 MOV DX,12H MOV AX,533H*896 DIV DI OUT 42H
34、,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H ;從61h號(hào)端口讀入一個(gè)字節(jié) MOV AH,AL OR AL,3 OUT 61H,AL ;向61h號(hào)端口寫(xiě)入一個(gè)字節(jié) WAIT1: MOV CX,8FF0H ;向CX中寫(xiě)入數(shù) DELAY1: LOOP DELAY1 ;延時(shí) DEC BX ;BX-1 JNZ
35、 WAIT1 ;運(yùn)算結(jié)果不為0,則ZF=0,則轉(zhuǎn)移 MOV AL,AH OUT 61H,AL ;從61h號(hào)端口讀入一個(gè)字節(jié) POP DI POP DX POP CX POP BX POP AX RET GENSOUND ENDP MUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX
36、 LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2 FREG2: MOV DI,[SI] CMP DI,-1 JE END_MUS2 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1 END_MUS2: RET MUSIC2 ENDP MUSIC3
37、 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3 FREG3: MOV DI,[SI] CMP DI,-1 JE END_MUS3 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2
38、 ADD BP,2 JMP FREG1 END_MUS3: RET MUSIC3 ENDP MUSIC4 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG4 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME4 ;puts the time table offset in BP FREG4:
39、MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS4 ;if yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note ADD SI,2 ;update the table pointer ADD B
40、P,2 JMP FREG4 ;go process next note END_MUS4: RET MUSIC4 ENDP MUSIC5 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG5 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME5 ;puts the time table offse
41、t in BP FREG5: MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS5 ;if yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note ADD SI,2 ;update the table poin
42、ter ADD BP,2 JMP FREG5 ;go process next note END_MUS5: RET MUSIC5 ENDP MUSIC6 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG6 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME6 ;puts t
43、he time table offset in BP FREG6: MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS6 ;if yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note ADD SI,2 ;up
44、date the table pointer ADD BP,2 JMP FREG6 ;go process next note END_MUS6: RET MUSIC6 ENDP MUSIC7 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG7 ;puts the freg table offset in SI LEA BP,D
45、S:MUS_TIME7 ;puts the time table offset in BP FREG7: MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS7 ;if yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note
46、 ADD SI,2 ;update the table pointer ADD BP,2 JMP FREG7 ;go process next note END_MUS7: RET MUSIC7 ENDP MUSIC8 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG8 ;puts the freg table offset in SI
47、 LEA BP,DS:MUS_TIME8 ;puts the time table offset in BP FREG8: MOV DI,[SI] ;read next frequency CMP DI,-1 ;end of tone JE END_MUS8 ;if yes,exit MOV DX,DS:[BP] ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;p
48、lay the note ADD SI,2 ;update the table pointer ADD BP,2 JMP FREG8 ;go process next note END_MUS8: RET MUSIC8 ENDP clear proc near push ax push bx push cx push dx mov ah,6 ;讀當(dāng)前光標(biāo)位置設(shè)置 mov al,0 ;
49、上滾行數(shù) mov ch,0 ;上滾窗口左上角的行、列號(hào) mov cl,0 ;上滾窗口左上角的行、列號(hào) mov dh,24 ;上滾窗口右下角的行號(hào) mov dl,79 ;上滾窗口右下角的列號(hào) mov bh,7 ;空白行的屬性 int 10h ;調(diào)用顯示器中斷 pop dx pop cx pop bx pop ax ret clear endp CODE ENDS END MAIN
50、 附錄三: 程序二流程圖 附錄四: 程序二 DATA SEGMENT msg DB 0DH,0AH,[ 1 2 3 4 5 6 7 ] DB 0DH,0AH,[ q w e r t y u ] DB 0DH,0AH,[ a s d f g h j ] DB 0DH,0AH,_________________ DB 0DH,0AH,9: EXIT DB 0DH,0AH,_________________,$
51、 ;********音調(diào)******后面用到-1判斷音樂(lè)播是否放完 sound_0 DW -1 ;sound_0 DW -1 sound_11 DW 131,-1 ;sound_11 DW 441,-1 sound_12 DW 147,-1 ;sound_12 DW 495,-1 sound_13 DW 165,-1 ;sound_13 DW 556,-1 sound_14 DW 175,-1 ;sound_14 DW 589,-1 sound_15 DW 196,-1 ;sound_15 DW 661,-1
52、 sound_16 DW 220,-1 ;sound_16 DW 742,-1 sound_17 DW 247,-1 ;sound_17 DW 833,-1 sound_21 DW 524,-1 sound_22 DW 588,-1 sound_23 DW 660,-1 sound_24 DW 698,-1 sound_25 DW 784,-1 sound_26 DW 880,-1 sound_27 DW 988,-1 sound_1 DW 262,-1 ;sound_1
53、DW 882,-1 sound_2 DW 294,-1 ;sound_2 DW 990,-1 sound_3 DW 330,-1 ;sound_3 DW 1112,-1 sound_4 DW 349,-1 ;sound_4 DW 1178,-1 sound_5 DW 392,-1 ;sound_5 DW 1322,-1 sound_6 DW 440,-1 ;sound_6 DW 1484,-1 sound_7 DW 492,-1 ;sound_7 DW 1655,-1 time DW 10;tim
54、e DW 50 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 ;設(shè)置顯示方式 MOV AL,12H ;設(shè)置顯示方式 INT 10H
55、 ;調(diào)用顯示器中斷8 ;*****定義一個(gè)宏***** ;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。 ;如果輸出操作被重定向,那么,將無(wú)法判斷磁盤(pán)已滿入口參數(shù):AH=09HDS:DX=待輸出字符的地址 ;說(shuō)明:待顯示的字符串以’$’作為其結(jié)束標(biāo)志 SHOW MACRO b LEA DX,b MOV AH,9 INT 21H ENDM ;********一個(gè)聲音宏******** onesound macro soundis,jumpis,letteris CMP AL,letteris JN
56、Z jumpis LEA SI,soundis LEA BP,DS:time CALL MUSIC JMP input ENDM show msg INPUT: MOV AH,01H ;設(shè)置光標(biāo)類型 INT 21H ;調(diào)用中斷,返回dos CMP AL,9 ;是否按下9 jnz go ;按下9則轉(zhuǎn)移 mov ah,4ch ;帶返回碼結(jié)束 int 21h ;調(diào)用DOS中斷 go: onesound sound
57、_11,a0,a;q 調(diào)用宏 a0: onesound sound_12,b0,s;w 調(diào)用宏 b0: onesound sound_13,c0,d;e 調(diào)用宏 c0: onesound sound_14,d0,f;r 調(diào)用宏 d0: onesound sound_15,e0,g;t 調(diào)用宏 e0: onesound sound_16,f0,h;y 調(diào)用宏 f0: onesound sound_17,g0,j;u 調(diào)用宏 g0: onesound sound_1,h0,q;1 調(diào)用宏 h0: onesound sound_2,i0,w;2 調(diào)
58、用宏 i0: onesound sound_3,j0,e;3 調(diào)用宏 j0: onesound sound_4,k0,r;4 調(diào)用宏 k0: onesound sound_5,l0,t;5 調(diào)用宏 l0: onesound sound_6,m0,y;6 調(diào)用宏 m0: onesound sound_7,n0,u;7 調(diào)用宏 n0: onesound sound_21,o0,1;a 調(diào)用宏 o0: onesound sound_22,p0,2;s 調(diào)用宏 p0: onesound sound_23,q0,3;d 調(diào)用宏 q0: onesou
59、nd sound_24,r0,4;f 調(diào)用宏 r0: onesound sound_25,s0,5;g 調(diào)用宏 s0: onesound sound_26,t0,6;h 調(diào)用宏 t0: onesound sound_27,u0,7;j 調(diào)用宏 u0: onesound sound_0,z0,al z0: jmp input ;********************發(fā)聲********************** GENSOUND PROC NEAR ;********************************** PUSH AX
60、PUSH BX PUSH CX PUSH DX PUSH DI ;********************************** MOV AL,0B6H ;寫(xiě)8253的控制字 選中8253通道1 讀寫(xiě)16位 工作方式3 二進(jìn)制計(jì)數(shù)方式 OUT 43H,AL ;向8253中寫(xiě)入上述功能的控制字 MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值 MOV AX,348ch ;1193100HZ/freq DIV DI ;value of freq
61、 OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 MOV AL,AH OUT 42H,AL ;將AL中數(shù)放到8253計(jì)數(shù)器中 IN AL,61H ;從61h號(hào)端口讀取PB口現(xiàn)在的狀態(tài) MOV AH,AL ;將PB口的狀態(tài)放進(jìn)AH OR AL,3 ;將AL低兩位置1 OUT 61H,AL ;向61h號(hào)端口寫(xiě)入一個(gè)字節(jié),打開(kāi)揚(yáng)聲器 WAIT1: MOV CX,2000 ;3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV
62、 AL,AH ;recover value of port OUT 61H,AL ;從61h號(hào)端口讀入一個(gè)字節(jié) ;*********************************** POP DI POP DX POP CX POP BX POP AX ;*********************************** RET GENSOUND ENDP ;************************** WAITF PROC NEAR PUSH AX WAITF1: IN
63、 AL,61H AND AL,10H ;CHECK PB4 CMP AL,AH ;DID IT CHANGE JE WAITF1 ;WAIT FOR CHANGE MOV AH,AL ;SAVE THE NEW PB4 STATUS LOOP WAITF1 ;CONTINUE UNTIL CX BECOMES 0 POP AX RET WAITF ENDP ;************************ MUSIC PROC NEAR PUSH DS SUB AX,AX PUSH AX
64、 FREG: MOV DI,[SI] CMP DI,-1 ;音樂(lè)是否放完? JE END_MUS MOV BX,DS:[BP] CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG END_MUS: RET MUSIC ENDP CODE ENDS ;********************** END START 附錄五 參考文獻(xiàn) [1] 沈美明.IBM-PC匯編語(yǔ)言程序設(shè)計(jì)(第二版).北京:清華大學(xué)出版社 [2] 彭虎.微機(jī)原理與接口技術(shù).電子工業(yè)出版社 [3] 王爽.匯編語(yǔ)言.北京:清華大學(xué)出版社 [4] 劉叔軍.匯編語(yǔ)言應(yīng)用與實(shí)例.北京:機(jī)械工業(yè)出版社 33
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見(jiàn)問(wèn)題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說(shuō)話方式
- 汽車銷售績(jī)效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對(duì)成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營(yíng)銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩
- 銷售資料:銷售10大黃金觀念
- 銷售資料:導(dǎo)購(gòu)常用的搭訕?lè)椒?/a>