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

微機課程設計實驗報告修改版

| 瀏覽次數:

 課程設計說明書

 課程名稱:

 《微機原理及接口技術》課程設計

 設計題目:用 定時與計數:利用 8253 控制揚聲器發聲,播放一段音樂

 班級:

  網絡工程 1502

 姓名:

 潘萬丁

 開始時間:_2018_____年_01___月_15___日

 完成時間:_2018_____年_01___月_19___日

 成績評定 平 時 考 勤(20%)

 實驗室調試(30%)

 創新(10%)

 答辯(20%)

 說 明 書(20%)

 總評

 指導教師簽名:

  ___年__月__日

 目錄 摘要 隨著科技的高速發展,計算機已經經過了好幾代的更新,然而計算機的運行的基本原理依然沒有改變的。而今,我們通過一個學期的學習,已經初步了解了計算機的基本結構和原理,并且已經學會了用匯編語言進行基本的程序編寫。

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

 二、方案設計 1.功能分析

 在此次設計中,第一個重點就是音樂播放的控制,要想能按照正常的頻率和節拍播放出音樂,就需要合理的設計出給蜂鳴器的頻率值和播放的時間。這樣就能比較準確的把音樂按一定的節奏播放出來。如果我們要想加快播放速度,我們可以改變每一節拍的播放時間,如果我們改變了播放的頻率值,那么歌曲也就相應的改變了。

 我們根據上面的功能分析,同時通過查閱相關資料,了解了計算機的內部結構的同時還清楚的理解了 DOS 中的 21H 和 10H 中斷的調用,因此我們設計出如下方案:

 (1)音樂的代碼化

 我們首先收集了一首簡單的歌曲《兩只老虎》,同時還帶有相應的音譜,通過查閱相關的音樂資料,了解了節拍的概念和各音符所對應的頻率,而后我們把每一首歌曲都轉化成兩個數據段,一個是把各個音符翻譯成相應的頻率值,第二是把相應的節拍轉化成對應的時間值,來控制播放每一個音符所對應的時間。這樣我們在播放歌曲時,同時調用頻率值和時間值就可以把相應的歌曲播放出來了。

 (2)音樂演奏的硬件配合

 我們了解到在計算機的主板上有 8253、8255 和蜂鳴器,同時了解到蜂鳴器的驅動是通過 8255 和 8253 共同控制的,我們通過對 8253 的通道 2 進行寫數據來控制蜂鳴器的聲音頻率,再通過 8255 來控制播放時間的長短,就通過這樣的巧妙配合來達到播放完整音樂的效果。

 (3)音樂演奏的軟件設計

 軟件設計是本設計的重點,在軟件設計中,我們要給 8253 和 8255 寫數據,執行相應的代碼來控制音樂的播放。

 三、軟件設計

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

  我們使用 PC 機有一個專門用于定時的電路,型號為 8253。它有三個通道,第一個通道用于控制始終正常運轉;第二個通道用于存儲器刷新;這兩個通道與我們現在要討論的問題無關。第三個就是一組電路域喇叭相連。

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

 發聲原理圖:

 發聲程序設計原理:

 PC 機發聲系統以 8253 的 2 號計數器為核心。系統初始化時,2 號計數器 I作在“方波發生器”方式,初值為二進制數,,寫入順序為先低后高,CLK2 為1.193182MHz,當計數初值為 533H 時,OUT2 輸出的方波大約為 900Hz,經過簡單的濾波之后,送至揚聲器。改變 1、4 號計數器的計數初值就可以使揚聲器發出不同頻率的音響。

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

 我們知道 BEEP 能將計數值 533H 送給定時器 2 產生 896HZ 的聲音的,那么產生其它頻率聲音的時間計數值應為:

 533H×896÷給定頻率=123280H÷給定頻率 發聲程序包括 4 個步驟:

 (1)在 8253 中的 42 端口送一個控制字 0B6H(10110110B),該控制字對定時器 2 進行初始化,使定時器 2 準備接收計數初值。

 (2)在 8253 中的 42H 端口(Timer2)裝入一個 16 位的計數值(533H×895/頻率),以建立將要產生的聲音頻率。

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

 對于發音部分。PC 機上的大多數輸入/輸出(I/O)都是由主板上的 8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI 包括 3 個 8 位寄存器,兩個用于輸入功能,一個用于輸出功能。輸入寄存器分配的 I/O 端口號為 60H 和 62H,輸出寄存器分配的 I/O 端口號為 61H。由 PPI 輸出寄存器中的 0、1 兩位來選擇揚聲器的驅動方式。

 (4)注意音樂節拍表的頻率表的設定。一個頻率對應一個節拍,如果頻率表和節拍表有問題,同樣不會發出聲音。

 對于發音部分。PC 機上的大多數輸入/輸出(I/O)都是由主板上的 8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI 只有 PB0 和 PB1 同時為“1”時,才能驅動揚聲器地聲。

 當從 8255 中采集到輸入的數據時,需要確定相應的頻率,所以在軟件編程時要建立一個數據表。

 把相應的頻率送到一個寄存器上,通過公式:

 計數值=533H×896÷ f=1234DCH÷ f

 算出計數值,再把算得的計數值送給 8253,就可產生所要頻率的方波。在把計數值送 8253 前,必須先把 8253 進行初始化:

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

 就整個電路而言,接好電路后,通過軟件編程不斷地采集從 8255 口中輸入的信號,而 8 個開關都接在 8255 的 A 口上,只要有開關按下,就會采集到一個數據,根據這個數據與事先編好的表對應,得到一個計數值,把這個計數值送給 8253 的通道 2,8253 的通道 2 工作的方式3 下,這樣就可以產生滿足頻率要求的發聲方波。這個方波經驅動放大就可以使揚聲器發出相應的聲音。

 所以 8255 在這里完成兩個任務,它不僅從 A 口中采集到數據,而且 B 口的 PB1 和 PB0 兩個位要控制發聲。8253 的主要任務就是產生

 所要求發聲的不同頻率的方波。

 本例程序是由 8253 芯片控制發聲的音階和節拍, 由 8255 芯片控制揚聲器的端口地址開啟揚聲器發生。音階對應的數據表如下 音符

 簡譜音階

 頻率

 音符

 簡譜音階

 頻率

 音符

 簡譜音階

 頻率

 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 通過編寫程序,由計算機主板上的 8253 芯片和 8255 芯片連接到主板上的揚聲 器來控制主板發聲。

 1.算法描述流程圖:

 Y

  N

 開始 數據段存入內存 取 SI 所指向的音節頻率段頻率 取 BP 所指向的發聲時長值 頻率是否為-1? 向 8253 計數器 2 寫控制字 8253 控制 8255 發聲 調整 SI,BP 地址,使 SI 指向下一個頻率 BP 指向下一個時長 結束

  實現代碼如下:

 ;***************************************************************************;程序名稱: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 ;***************************************************************************

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

 2. 匯編源程序 YINYUE.ASM。調用宏匯編程序MASM對源文件 YINYUE.ASM進行匯編,生成目標文件 YINYUE.OBJ。若匯編無錯誤,則進入第三步。

 3. 用連接命令 LINK 連接目標程序文件 YINYUE.OBJ。若連接成功,則進入下一步。

 4. 運行可執行文件 YINYUE.EXE。

 5. 兩只老虎音樂響起。

  五、結果描述 按上面的調試步驟過后,運行 ceshi 過后,音樂就響起了。

 六、總結 1. 在這一周的實驗過程中碰到了很多的難題和障礙,我們組剛開始各做各的,最后選擇最好的程序進行答辯,所以我們每個人都得到了鍛煉。在實驗的過程中我認識到平時基礎知識的重要性,只有能夠熟練的掌握指令的含義才能在實驗過程中得心應手,否則一步錯則整個試驗都會陷入困境,因而,嚴謹的態度是試驗成功的重要保障!

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

 3. 我們大家在實驗的時候都團結合作,遇到問題時候一起探討,增強了我們的合作精神。特別是在制作仿真圖的時候大家都很積極幫忙,討論。

 七、參考文獻 [1]韓雁,徐煜明。《微機原理與接口技術》。北京:電子工業出版社,2007。

 [2]超想-3000TC 微機原理與接口實驗指導書。

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

 Instrumentation, Data Analysis, and Control(微機接口技術實驗教程)。北京:機械工業出版社,2006. [4]錢曉捷 編著。32 位匯編語言程序設計。機械工業出版社,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] 仿真圖里導入的《兩老虎》音樂程序:

  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

推薦訪問: 微機 修改版 課程設計

上一篇:農業發展規劃

下一篇:創業規劃書范本

【微機課程設計實驗報告修改版】相關推薦

工作總結最新推薦

NEW