1. 程式人生 > >微機實驗課-實驗四揚聲器程式設計

微機實驗課-實驗四揚聲器程式設計

微機實驗四操作參考

2018年11月 William

〇、實驗準備

         本次實驗是設計彙編程式,控制8253和8255的工作原理及其應用程式設計。8253為微機系統中使用的定時/計數器,8255為並行介面,即提供可用的I/O介面。

         本實驗的揚聲器控制原理如下。

8255的地址為:60H~63H;PB埠地址為61H,控制口為63H;

8253的地址為:40H~43H;通道2地址42H,控制口地址43H。

PC的揚聲器以計數器2為核心。計數器8255CLK2的輸入頻率為1.193182 MHz,工作於方式3,改變計數器初值可以由得到不同頻率的方波輸出。

f

CLK2頻率:1.1931816*1000000=12 34DE H

若要使揚聲器輸出600Hz頻率訊號,則8253計數初值為1988(整數商)

對於600 HzN=計數初值=1193182/600=1988

對於1000 HzN=計數初值=1193182/1000=1193

改變8253的輸出頻率,即可改變揚聲器輸出聲頻訊號頻率。

(1) 給定8253OUT2輸出頻率,獲取對應計數初值:

對於1000 Hz, 這裡可以用除法實現計算:(DX,AX)=0012 34DE, (DI)=1000

(DX,AX)/DI

MOV    DX,12H

MOV    AX,34DEH

MOV    DI, 1000

DIV     DI  

這樣,計數初值就在AX中。

(2) 初始化8253

MOV        AL, 10110110B        ;初始化,8253計數器2,模式3,初值16,二進位制

OUT         43H, AL                       ;8253的控制口地址43H

MOV        AX, 1983                   ;計數初值=1.19 MHz, 600 Hz=1983

OUT         42H, AL                     ;送計數初值低位位元組,8253的計數器2的地址42H

MOV        AL, AH

OUT         42H, AL                     ;

送計數初值高位位元組

揚聲器受8255A晶片B口的兩個輸出端線控制,PB0=1,即GATE2=1,計數器2正常計數; PB1=1,開啟輸出控制門,揚聲器工作。8255工作於方式0輸出。

一、任務一操作介紹

任務一要求是,觀察並記錄61H(即8255的PB埠)和42H(即8253的通道2埠)埠變化,產生的影響。即我們改變61H和42H埠輸出時,程式會有怎樣的響應結果。

實驗指導書中,已將程式完全給出,並進行了詳細註釋,在此不再贅述分析,見程式如下圖。

 

    將程式完整複製到txt文字中,並重命名為“shiyan4.asm”,建立好彙編檔案,如前實驗一致,直接進入debug模式。如下圖,直接全速執行[-g],進入 wait1 等待鍵值迴圈中。

    通過閱讀、分析程式可知:

1)按下 a 鍵時:對8253定時器初始化,設定通道2,方式3;然後用該計數器,計數當輸出1000Hz時的計數次數,以產生1000Hz頻率的方波,並從42H(OUT2)埠輸出。即該子程式功能為:初始化定時器,設定計數初值,並輸出1KHz頻率訊號。

2)按下 b 鍵時:使PB1=1,輸出高電平,驅動揚聲器,以開啟揚聲器。

3)按下 c 鍵時:使PB1=0,關閉揚聲器的驅動,使揚聲器無法工作。

4)按下 d 鍵時:使PB0=1,輸出高電平,驅動8253定時器,以開啟定時器。

5)按下 e 鍵時:使PB0=0,關閉定時器驅動電壓,使定時器無法工作。

6)按下 ESC 鍵時:退出整個程式,回到DOS。

    因此,要揚聲器發聲,按鍵順序為:a->b->e,即可發生。如下圖,此時就能聽到1000Hz頻率的蜂鳴聲了!

    然後可使用,e 或 b鍵關閉使用 c 同時 d 開啟

61H(即8255的PB埠)埠變化: PB0(b和c鍵控制)和 PB1(d和e鍵控制)要同時為1,才能開啟揚聲器,否則,喇叭無聲音。

42H(即8253的通道2埠)埠變化:可以為揚聲器設定不同頻率的方波,頻率不同,喇叭音調不同。(在keya子程式中,[MOV DI,1000;將頻率轉換為計數初值],“1000”即為設定/更改頻率的地方)。

到此,完成任務一的要求。

任務二:

編寫電子琴程式要求程式能響應三個鍵,每個鍵對應不同頻率的聲音,按下發聲,鬆開靜音。

1、下面程式是實現:按下x鍵,每次以100Hz間隔升調發聲。程式如下圖所示,在任務一的程式上,添加了 keyx 子程式,紅框中為新增的程式。

直接debug測試如下,開啟abd後,按x可不斷升調發聲。

2、實現了一個4個頻率的電子琴(本來是設計是7個音階的),程式如下圖

測試結果如下圖,按下1初始化揚聲器,按下2468可實現4個不同音階的發聲。

其他參考程式不再列舉,到此本次實驗全部結束,也是整個微機實驗的全部結束,後會有期!

歡迎交流提問,請留言,或加筆者的扣扣1021100382~