狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

微機(jī)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告修改版

| 瀏覽次數(shù):

 課程設(shè)計(jì)說明書

 課程名稱:

 《微機(jī)原理及接口技術(shù)》課程設(shè)計(jì)

 設(shè)計(jì)題目:用 定時(shí)與計(jì)數(shù):利用 8253 控制揚(yáng)聲器發(fā)聲,播放一段音樂

 班級(jí):

  網(wǎng)絡(luò)工程 1502

 姓名:

 潘萬(wàn)丁

 開始時(shí)間:_2018_____年_01___月_15___日

 完成時(shí)間:_2018_____年_01___月_19___日

 成績(jī)?cè)u(píng)定 平 時(shí) 考 勤(20%)

 實(shí)驗(yàn)室調(diào)試(30%)

 創(chuàng)新(10%)

 答辯(20%)

 說 明 書(20%)

 總評(píng)

 指導(dǎo)教師簽名:

  ___年__月__日

 目錄 摘要 隨著科技的高速發(fā)展,計(jì)算機(jī)已經(jīng)經(jīng)過了好幾代的更新,然而計(jì)算機(jī)的運(yùn)行的基本原理依然沒有改變的。而今,我們通過一個(gè)學(xué)期的學(xué)習(xí),已經(jīng)初步了解了計(jì)算機(jī)的基本結(jié)構(gòu)和原理,并且已經(jīng)學(xué)會(huì)了用匯編語(yǔ)言進(jìn)行基本的程序編寫。

 一、概述 匯編語(yǔ)言是計(jì)算機(jī)能夠提供給用戶使用的最快而有效的語(yǔ)言,也是能夠利用計(jì)算機(jī)所有特性并能直接控制硬件的唯一語(yǔ)言。借助于匯編程序,計(jì)算機(jī)本身可以自動(dòng)地把 匯編源程序翻譯成用機(jī)器語(yǔ)言表示的目的程序,從而實(shí)現(xiàn)了程序設(shè)計(jì)工作的部分自動(dòng)化。而本次課程設(shè)計(jì)的主要目的就是鞏固所學(xué)過的知識(shí),用匯編語(yǔ)言熟練地運(yùn)用三大結(jié)構(gòu),進(jìn)一步掌握一些指令的功能、掌握子程序的定義及調(diào)用和 INT 21H、INT10H 中斷的使用,同時(shí)熟練運(yùn)用通用寄存器和堆棧來(lái)進(jìn)行編寫一個(gè)完整的具有某種特定功能的程序。

 二、方案設(shè)計(jì) 1.功能分析

 在此次設(shè)計(jì)中,第一個(gè)重點(diǎn)就是音樂播放的控制,要想能按照正常的頻率和節(jié)拍播放出音樂,就需要合理的設(shè)計(jì)出給蜂鳴器的頻率值和播放的時(shí)間。這樣就能比較準(zhǔn)確的把音樂按一定的節(jié)奏播放出來(lái)。如果我們要想加快播放速度,我們可以改變每一節(jié)拍的播放時(shí)間,如果我們改變了播放的頻率值,那么歌曲也就相應(yīng)的改變了。

 我們根據(jù)上面的功能分析,同時(shí)通過查閱相關(guān)資料,了解了計(jì)算機(jī)的內(nèi)部結(jié)構(gòu)的同時(shí)還清楚的理解了 DOS 中的 21H 和 10H 中斷的調(diào)用,因此我們?cè)O(shè)計(jì)出如下方案:

 (1)音樂的代碼化

 我們首先收集了一首簡(jiǎn)單的歌曲《兩只老虎》,同時(shí)還帶有相應(yīng)的音譜,通過查閱相關(guān)的音樂資料,了解了節(jié)拍的概念和各音符所對(duì)應(yīng)的頻率,而后我們把每一首歌曲都轉(zhuǎn)化成兩個(gè)數(shù)據(jù)段,一個(gè)是把各個(gè)音符翻譯成相應(yīng)的頻率值,第二是把相應(yīng)的節(jié)拍轉(zhuǎn)化成對(duì)應(yīng)的時(shí)間值,來(lái)控制播放每一個(gè)音符所對(duì)應(yīng)的時(shí)間。這樣我們?cè)诓シ鸥枨鷷r(shí),同時(shí)調(diào)用頻率值和時(shí)間值就可以把相應(yīng)的歌曲播放出來(lái)了。

?。?)音樂演奏的硬件配合

 我們了解到在計(jì)算機(jī)的主板上有 8253、8255 和蜂鳴器,同時(shí)了解到蜂鳴器的驅(qū)動(dòng)是通過 8255 和 8253 共同控制的,我們通過對(duì) 8253 的通道 2 進(jìn)行寫數(shù)據(jù)來(lái)控制蜂鳴器的聲音頻率,再通過 8255 來(lái)控制播放時(shí)間的長(zhǎng)短,就通過這樣的巧妙配合來(lái)達(dá)到播放完整音樂的效果。

 (3)音樂演奏的軟件設(shè)計(jì)

 軟件設(shè)計(jì)是本設(shè)計(jì)的重點(diǎn),在軟件設(shè)計(jì)中,我們要給 8253 和 8255 寫數(shù)據(jù),執(zhí)行相應(yīng)的代碼來(lái)控制音樂的播放。

 三、軟件設(shè)計(jì)

 在介紹音樂的播放之前,先來(lái)說說 PC 機(jī)的小喇叭是怎樣與機(jī)器相連的呢?下面的“發(fā)聲原理圖”表示了喇叭與機(jī)器簡(jiǎn)單的相連情況。喇叭的一端連接在電源正極,另一端與機(jī)器的 61H 端口的 bit 位相連。可以想象,若能連續(xù)改變 61H 端口的 bit 位 0,1 狀態(tài),就可以使喇叭線圈內(nèi)的電流時(shí)有時(shí)無(wú),從而使喇叭發(fā)聲。我們編制的匯編程序的工作,就是連續(xù)改變 61H 端口的 bit 位狀態(tài)。

  我們使用 PC 機(jī)有一個(gè)專門用于定時(shí)的電路,型號(hào)為 8253。它有三個(gè)通道,第一個(gè)通道用于控制始終正常運(yùn)轉(zhuǎn);第二個(gè)通道用于存儲(chǔ)器刷新;這兩個(gè)通道與我們現(xiàn)在要討論的問題無(wú)關(guān)。第三個(gè)就是一組電路域喇叭相連。

 如下圖所示就是 PC 機(jī)中完整的發(fā)聲電路,定時(shí)器通道 3 的 G 端與 61H 端口的 bit0 位相連,如果把 61H 端口的 bit0 位置為 1,那么定時(shí)器通道 3 就會(huì)被啟動(dòng),此時(shí)將有一組信號(hào)從 OUT 輸出,信號(hào)的頻率可以用程序控制;若 61H 的端口 bit0 位為 0,則定時(shí)器被關(guān)閉,out 端就恒為 1.

 發(fā)聲原理圖:

 發(fā)聲程序設(shè)計(jì)原理:

 PC 機(jī)發(fā)聲系統(tǒng)以 8253 的 2 號(hào)計(jì)數(shù)器為核心。系統(tǒng)初始化時(shí),2 號(hào)計(jì)數(shù)器 I作在“方波發(fā)生器”方式,初值為二進(jìn)制數(shù),,寫入順序?yàn)橄鹊秃蟾撸珻LK2 為1.193182MHz,當(dāng)計(jì)數(shù)初值為 533H 時(shí),OUT2 輸出的方波大約為 900Hz,經(jīng)過簡(jiǎn)單的濾波之后,送至揚(yáng)聲器。改變 1、4 號(hào)計(jì)數(shù)器的計(jì)數(shù)初值就可以使揚(yáng)聲器發(fā)出不同頻率的音響。

  ROM BIOS 中有個(gè) BEEP 子程序,這能根據(jù) BL 中組出的時(shí)間計(jì)數(shù)值控制8253 定時(shí)器,產(chǎn)生持續(xù)時(shí)間為 1 個(gè)或幾個(gè) 0.5 秒,頻率為 896HZ 的聲音,我們可以利用并修改 BEEP,使其產(chǎn)生任一頻率的聲音。為此我們需要做兩點(diǎn)修改,首先,BEEP 程序只能產(chǎn)生 896HZ 的聲音,我們的通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音。其次,BEEP 產(chǎn)生聲音的持續(xù)時(shí)間(音長(zhǎng))只能是 0.5 秒的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如可以是 10ms 的倍數(shù)。

 我們知道 BEEP 能將計(jì)數(shù)值 533H 送給定時(shí)器 2 產(chǎn)生 896HZ 的聲音的,那么產(chǎn)生其它頻率聲音的時(shí)間計(jì)數(shù)值應(yīng)為:

 533H×896÷給定頻率=123280H÷給定頻率 發(fā)聲程序包括 4 個(gè)步驟:

?。?)在 8253 中的 42 端口送一個(gè)控制字 0B6H(10110110B),該控制字對(duì)定時(shí)器 2 進(jìn)行初始化,使定時(shí)器 2 準(zhǔn)備接收計(jì)數(shù)初值。

?。?)在 8253 中的 42H 端口(Timer2)裝入一個(gè) 16 位的計(jì)數(shù)值(533H×895/頻率),以建立將要產(chǎn)生的聲音頻率。

 (3)把輸出端口 61H 的 PB0、PB1 兩位置 1,發(fā)出聲音。

 對(duì)于發(fā)音部分。PC 機(jī)上的大多數(shù)輸入/輸出(I/O)都是由主板上的 8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI 包括 3 個(gè) 8 位寄存器,兩個(gè)用于輸入功能,一個(gè)用于輸出功能。輸入寄存器分配的 I/O 端口號(hào)為 60H 和 62H,輸出寄存器分配的 I/O 端口號(hào)為 61H。由 PPI 輸出寄存器中的 0、1 兩位來(lái)選擇揚(yáng)聲器的驅(qū)動(dòng)方式。

 (4)注意音樂節(jié)拍表的頻率表的設(shè)定。一個(gè)頻率對(duì)應(yīng)一個(gè)節(jié)拍,如果頻率表和節(jié)拍表有問題,同樣不會(huì)發(fā)出聲音。

 對(duì)于發(fā)音部分。PC 機(jī)上的大多數(shù)輸入/輸出(I/O)都是由主板上的 8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI 只有 PB0 和 PB1 同時(shí)為“1”時(shí),才能驅(qū)動(dòng)揚(yáng)聲器地聲。

 當(dāng)從 8255 中采集到輸入的數(shù)據(jù)時(shí),需要確定相應(yīng)的頻率,所以在軟件編程時(shí)要建立一個(gè)數(shù)據(jù)表。

 把相應(yīng)的頻率送到一個(gè)寄存器上,通過公式:

 計(jì)數(shù)值=533H×896÷ f=1234DCH÷ f

 算出計(jì)數(shù)值,再把算得的計(jì)數(shù)值送給 8253,就可產(chǎn)生所要頻率的方波。在把計(jì)數(shù)值送 8253 前,必須先把 8253 進(jìn)行初始化:

 使其選用通道 2,工作在方式 3 下。

 就整個(gè)電路而言,接好電路后,通過軟件編程不斷地采集從 8255 口中輸入的信號(hào),而 8 個(gè)開關(guān)都接在 8255 的 A 口上,只要有開關(guān)按下,就會(huì)采集到一個(gè)數(shù)據(jù),根據(jù)這個(gè)數(shù)據(jù)與事先編好的表對(duì)應(yīng),得到一個(gè)計(jì)數(shù)值,把這個(gè)計(jì)數(shù)值送給 8253 的通道 2,8253 的通道 2 工作的方式3 下,這樣就可以產(chǎn)生滿足頻率要求的發(fā)聲方波。這個(gè)方波經(jīng)驅(qū)動(dòng)放大就可以使揚(yáng)聲器發(fā)出相應(yīng)的聲音。

 所以 8255 在這里完成兩個(gè)任務(wù),它不僅從 A 口中采集到數(shù)據(jù),而且 B 口的 PB1 和 PB0 兩個(gè)位要控制發(fā)聲。8253 的主要任務(wù)就是產(chǎn)生

 所要求發(fā)聲的不同頻率的方波。

 本例程序是由 8253 芯片控制發(fā)聲的音階和節(jié)拍, 由 8255 芯片控制揚(yáng)聲器的端口地址開啟揚(yáng)聲器發(fā)生。音階對(duì)應(yīng)的數(shù)據(jù)表如下 音符

 簡(jiǎn)譜音階

 頻率

 音符

 簡(jiǎn)譜音階

 頻率

 音符

 簡(jiǎn)譜音階

 頻率

 C’’ 1. 139 C 1 262 C’ .1 524 D’’ 2. 147 D 2 294 D’ .2 587 E’’ 3. 165 E 3 330 E’ .3 659 F’’ 4. 175 F 4 349 F’ .4 698 G’’ 5. 196 G 5 392 G’ .5 784 A’’ 6. 220 A 6 440 A’ .6 880 B’’ 7. 247 B 7 494 B’ .7 988 通過編寫程序,由計(jì)算機(jī)主板上的 8253 芯片和 8255 芯片連接到主板上的揚(yáng)聲 器來(lái)控制主板發(fā)聲。

 1.算法描述流程圖:

 Y

  N

 開始 數(shù)據(jù)段存入內(nèi)存 取 SI 所指向的音節(jié)頻率段頻率 取 BP 所指向的發(fā)聲時(shí)長(zhǎng)值 頻率是否為-1? 向 8253 計(jì)數(shù)器 2 寫控制字 8253 控制 8255 發(fā)聲 調(diào)整 SI,BP 地址,使 SI 指向下一個(gè)頻率 BP 指向下一個(gè)時(shí)長(zhǎng) 結(jié)束

  實(shí)現(xiàn)代碼如下:

 ;***************************************************************************;程序名稱:ceshi ;兩只老虎樂曲 ;*************************************************************************** stack segment para stack "stack"

  db 64 dup("stack...") stack ends ;******************************************************************* dseg segment para "data" mus_freq

  dw

 262,294,330,262,262,294,330,262

  dw

 330,349,392,330,349,392,392,440

  dw

 392,349,330,262,392,440,392,349

 dw

 330,262,294,196,262,294,196,262,-1 mus_time

  dw

 25,25,25,25,25,25,25,25,25,25

  dw

 50,25,25,50,12,12,12,12,25,25

  dw

 12,12,12,12,25,25,25,25,50,25,25,50 dseg ends ;******************************************************************* cseg segment para "code"

  assume cs:cseg,ss:stack,ds:dseg ;-------------------------------------------------------------------

 music proc far

  mov

 ax,dseg

  mov

 ds,ax

  lea

 si,mus_freq

  lea

 bp,ds:mus_time freq:

  mov

 di,[si]

  cmp

 di,-1

  je

  end_mus

  mov

 bx,ds:[bp]

  call soundf

  add

 si,2

  add

 bp,2

  jmp

 freq end_mus:

 mov

 ax,4c00h

  int

 21h music endp ;-------------------------------------------------------------------------- soundf proc near

  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

  mov

 al,ah

  out

 42h,al

  in

  al,61h

  mov

 ah,al

  or

  al,3

  out

 61h,al wait1:

  mov

 cx,6630

  call waitf

  dec

 bx

  jnz

 wait1

  mov

 al,ah

  out

 61h,al

  pop

 di

  pop

 dx

  pop

 cx

  pop

 bx

  pop

 ax

  ret soundf endp ;-------------------------------------------------------------------------- waitf proc near

  push ax waitf1:

  in

  al,61h

  and

 al,10h

  cmp

 al,ah

  je

  waitf1

 mov

 ah,al

  loop waitf1

  pop

 ax

  ret waitf endp ;-------------------------------------------------------------------------- cseg ends ;***************************************************************************

  end music ;***************************************************************************

 四、調(diào)試過程 1. 編輯源程序,假定源文件名為 YINYUE.ASM。

 2. 匯編源程序 YINYUE.ASM。調(diào)用宏匯編程序MASM對(duì)源文件 YINYUE.ASM進(jìn)行匯編,生成目標(biāo)文件 YINYUE.OBJ。若匯編無(wú)錯(cuò)誤,則進(jìn)入第三步。

 3. 用連接命令 LINK 連接目標(biāo)程序文件 YINYUE.OBJ。若連接成功,則進(jìn)入下一步。

 4. 運(yùn)行可執(zhí)行文件 YINYUE.EXE。

 5. 兩只老虎音樂響起。

  五、結(jié)果描述 按上面的調(diào)試步驟過后,運(yùn)行 ceshi 過后,音樂就響起了。

 六、總結(jié) 1. 在這一周的實(shí)驗(yàn)過程中碰到了很多的難題和障礙,我們組剛開始各做各的,最后選擇最好的程序進(jìn)行答辯,所以我們每個(gè)人都得到了鍛煉。在實(shí)驗(yàn)的過程中我認(rèn)識(shí)到平時(shí)基礎(chǔ)知識(shí)的重要性,只有能夠熟練的掌握指令的含義才能在實(shí)驗(yàn)過程中得心應(yīng)手,否則一步錯(cuò)則整個(gè)試驗(yàn)都會(huì)陷入困境,因而,嚴(yán)謹(jǐn)?shù)膽B(tài)度是試驗(yàn)成功的重要保障!

 2. 通過這次課程設(shè)計(jì),我對(duì)各個(gè)芯片有了進(jìn)一步的了解,對(duì)各個(gè)芯片的功能有了更深刻的認(rèn)識(shí)和體會(huì),平時(shí)上課的理論知識(shí)只是停留在理論的層面,只有通過了這樣的試驗(yàn)才能更好的體會(huì)到,做到了理論和實(shí)際的相結(jié)合,使理論知識(shí)真正運(yùn)用到了實(shí)踐中去。同時(shí)在實(shí)驗(yàn)過程中我還遇到了很多沒見過的指令,同時(shí)自己也自己回到宿舍花時(shí)間在網(wǎng)上看了一些有關(guān)于指令的視頻教程,對(duì)自己的原有知識(shí)進(jìn)一步鞏固與提升了。

 3. 我們大家在實(shí)驗(yàn)的時(shí)候都團(tuán)結(jié)合作,遇到問題時(shí)候一起探討,增強(qiáng)了我們的合作精神。特別是在制作仿真圖的時(shí)候大家都很積極幫忙,討論。

 七、參考文獻(xiàn) [1]韓雁,徐煜明?!段C(jī)原理與接口技術(shù)》。北京:電子工業(yè)出版社,2007。

 [2]超想-3000TC 微機(jī)原理與接口實(shí)驗(yàn)指導(dǎo)書。

 [3]Stephen E.Derenzo 著,蔡梅琳等譯。Practical Interfacing in the Laboratory, Using a PC for the

 Instrumentation, Data Analysis, and Control(微機(jī)接口技術(shù)實(shí)驗(yàn)教程)。北京:機(jī)械工業(yè)出版社,2006. [4]錢曉捷 編著。32 位匯編語(yǔ)言程序設(shè)計(jì)。機(jī)械工業(yè)出版社,2011.

 音樂播放仿真圖:

 AD[0..15]AD[0..7]AD0AD1AD2AD3AD4AD5AD6AD7AD0AD1AD2AD3AD4AD5AD6AD7AD[0..15]READY22INTR18NMI17RESET21CLK19MN/MX33HOLD/GT131HLDA/GT030A[16..19]M/IO/S028ALE/QS025DT/R/S127INTA/QS124TEST23BHE34DEN/S226RD32WR/LOCK29U18086D03D14D27D38D413D514D617D718CLK11MR1Q02Q15Q26Q39Q412Q515Q616Q719U274LS273A1B2C3E16E24E35Y015Y114Y213Y312Y411Y510Y69Y77U374LS138D08D17D26D35D44D53D62D71RD22WR23A019A120CS21CLK09GATE011OUT010CLK115GATE114OUT113CLK218GATE216OUT217U48253AU5NOTLS1SPEAKERU4(CLK2)+5vAD[0..7] 仿真圖里導(dǎo)入的《兩老虎》音樂程序:

  stack segment

  db 64 dup("stack...") stack ends data segment

 mus_freq dw 262,294,330,262,262,294,330,262

  dw 330,349,392,330,349,392,392,440

  dw 392,349,330,262,392,440,392,349

  dw 330,262,294,196,262,294,196,262,-1 music_time dw 10 dup(25)

  dw 50,25,25,50,12,12,12,12,25,25

  dw 12,12,12,12,25,25,25,25,50,25,25,50

 data ends code segment

 assume cs:code,ds:data,ss:stack music

  proc far

  mov ax,data

 mov ds,ax

 mov ax,stack

 mov ss,ax

  lea si,mus_freq

 lea bp,ds:music_time

 freq: mov di,[si]

 cmp di,-1

 je end_mus

 mov bx,ds:[bp]

 call soundf

 add si,2

 add bp,2

 jmp freq

 end_mus:

  mov al,0

 out 62h,al

 mov ah,4ch

 int 21h music endp

 soundf

 proc

 push ax

 push bx

 push cx

 push dx

 push di

 ;MOV AL,80H

 ;OUT 66H,AL

 mov al,0b6h

 out 46h,al

  MOV DX,00H

  MOV AX,6000

  div di

  out 44h,al

 mov al,ah

 out 44h,al

  mov al,0

 mov ah,al

 or al,3

 out 62h,al

 d1: mov cx,2801 d2:

  loop d2

 dec bx

 jnz d1

  mov al,ah

 out 62h,al

  pop di

 pop dx

 pop cx

 pop bx

 pop ax

 ret soundf endp code ends

 end music he.DSN shiyan.asm

推薦訪問: 微機(jī) 修改版 課程設(shè)計(jì)

【微機(jī)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告修改版】相關(guān)推薦

工作總結(jié)最新推薦

NEW